预处理数
1. 标准化:去均值,方差规模化
Standardization标准化:将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值维0,方差为1.
标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。
标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)。
在sklearn.preprocessing中提供了一个scale的方法,可以实现以上功能。
from sklearn import preprocessing
import numpy as np
创建一组特征数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
将每一列特征标准化为标准正太分布,注意,标准化是针对每一列而言的
x_scale = preprocessing.scale(x)
x_scale
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
- 1
- 2
- 3
- 4
# 可以查看标准化后的数据的均值与方差,已经变成0,1了
x_scale.mean(axis=0)
- 1
- 2
array([ 0., 0., 0.])
- 1
- 2
# axis=1表示对每一行去做这个操作,axis=0表示对每一列做相同的这个操作
x_scale.mean(axis=1)
- 1
- 2
array([ 0.03718711, 0.31916121, -0.35634832])
- 1
- 2
# 同理,看一下标准差
x_scale.std(axis=0)
- 1
- 2
array([ 1., 1., 1.])
- 1
- 2
preprocessing这个模块还提供了一个实用类StandarScaler,它可以在训练数据集上做了标准转换操作之后,把相同的转换应用到测试训练集中。
这是相当好的一个功能。可以对训练数据,测试数据应用相同的转换,以后有新的数据进来也可以直接调用,不用再重新把数据放在一起再计算一次了。
# 调用fit方法,根据已有的训练数据创建一个标准化的转换器
scaler = preprocessing.StandardScaler().fit(x)
scaler
- 1
- 2
- 3
- 4
StandardScaler(copy=True, with_mean=True, with_std=True)
- 1
- 2
# 使用上面这个转换器去转换训练数据x,调用transform方法
scaler.