什么是特征预处理
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
包含内容
- 数值型数据的无量纲化:
- 归一化
- 标准化
特征预处理API
sklearn.preprocessing
为什么我们要进行归一化/标准化?
- 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
归一化
定义
通过对原始数据进行变换把数据映射到(默认为(0,1)之间
公式
-
X'= (x-min) / (max -min)
-
X"=X'*(mx-mi)+mi
-
作用于每一列,
max
为一列的最大值,min
为一列的最小值,那么X”
为最终结果,mx
,mi
分别为指定区间值默认mx
为1,mi
为0
API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
MinMaxScalar.fit_transform(X)
X : numpy array
格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的
array
4 数据计算
- 分析
1、实例化MinMaxScalar
2、通过fit_transform
转换
from sklearn.preprocessing import MinMaxScaler
if __name__ == '__main__':
data = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
# 示例化一个转化器类
transfer = MinMaxScaler(feature_range=[0, 1])
# 调用 transfer.fit_transform
data_final = transfer.fit_transform(data)
print('返回结果为:', data_final)
总结
注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化
定义
通过对原始数据进行变换把数据变换到均值为0.标准差为1范围内
公式
-
X'= (x - mean) / a
-
作用于每一列,
mean
为平均值,a
为标准差 -
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
-
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
API
sklearn.preprocessing.StandardScaler()
- 处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为
StandardScaler.fit_transform(X)
X:numpy array
格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的
array
数据计算
同样对上面的数据进行处理
-
分析
1、实例化StandardScaler
2、通过
fit_transform
转换
from sklearn.preprocessing import StandardScaler
if __name__ == '__main__':
data = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
# 示例化一个转化器类
transfer = StandardScaler()
# 调用 transfer.fit_transform
data_final = transfer.fit_transform(data)
print('返回结果为:', data_final)
总结
在已有样本足够多的情况下比较稳定,适合想代嘈杂大数据场景