数据预处理
1.1 数据预处理模块
- 模块 preprocessing:包含数据预处理所有内容
- Impute 填补缺失值
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
import numpy as np
1.1.1MinMaxScaler 数据归一化
- MinMaxScaler 数据归一化Normalization是归
一化,不是正则化,真正的正则化是regularization,不是数据预处理的一种手段。归一化之后的数据服从正态分布 - MinMaxScaler有一个重要参数,
feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18],[0.5,19]]
data=pd.DataFrame(data)
scaler=MinMaxScaler()
scaler=scaler.fit(data)
scaler.transform(data)
array([[0. , 0. ],
[0.25, 0.25],
[0.5 , 0.5 ],
[1. , 1. ]])
scaler.data_max_
array([ 1., 18.])
data
[[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler=MinMaxScaler(feature_range=[5,10])
scaler.fit_transform(data)
array([[ 5. , 5. ],
[ 6.25, 6.25],
[ 7.5 , 7.5 ],
[10. , 10. ]])
#当X中的特征数量非常多的时候,fit会报错并表示,数据量太大了我计算不了
#此时使用partial_fit作为训练接口
#scaler = scaler.partial_fit(data)
# 使用numpy进行归一化
data
[[-1, 2], [-0.5, 6], [0, 10], [1, 18], [0.5, 19]]
data=np.array(data)
data
array([[-1. , 2. ],
[-0.5, 6. ],
[ 0. , 10. ],
[ 1. , 18. ],
[ 0.5, 19. ]])
data.min()
-1.0
data.min(axis=0)
array([-1., 2.])
data.max(axis=0)
array([ 1., 19.])
x_nor=(data-data.min(axis=0))/(data.max(axis=0)-data.min(axis=0))
x_nor
array([[0. , 0. ],
[0.25 , 0.23529412],
[0.5 , 0.47058824],
[1. , 0.94117647],
[0.75 , 1. ]])
preprocessing.StandardScaler 数据标准化,
- 当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布)
from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18],[0.5,19]]
scaler=StandardScaler()
scaler.fit(data)
StandardScaler()
scaler.mean_
array([ 0., 11.])
scaler.var_
array([ 0.5, 44. ])
x_std=scaler.transform(data)
x_std.mean()
-8.881784197001253e-17
x_std.std()
0.9999999999999999
data
[[-1, 2], [-0.5, 6], [0, 10], [1, 18], [0.5, 19]]
scaler.fit_transform(data)
array([[-1.41421356, -1.35680105],
[-0.70710678, -0.75377836],
[ 0. , -0.15075567],
[ 1.41421356, 1.05528971],
[ 0.70710678, 1.20604538]])
scaler.inverse_transform(x_std)
array([[-1. , 2. ],
[-0.5, 6. ],
[ 0. , 10. ],
[ 1. , 18. ],
[ 0.5, 19. ]])
对于StandardScaler和MinMaxScaler来说,空值NaN会被当做是缺失值,在fit的时候忽略,在transform的时候
保持缺失NaN的状态显示。并且,尽管去量纲化过程不是具体的算法,但在fit接口中,依然只允许导入至少二维数
组,一维数组导入会报错。通常来说,我们输入的X会是我们的特征矩阵,现实案例中特征矩阵不太可能是一维所
以不会存在这个问题。
``
- 菜菜的sklearn学习得到 https://live.bilibili.com/12582510