sklearn.preprocessing 之数据预处理

很多时候,如果不对数据进行统一化,会导致梯度下降复杂或是损失函数只能选择线性,导致模型效果不佳。

从经验上说,对特征值进行统一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

一、标准化(Standardization),或者去除均值和方差进行缩放

公式:(X-X_mean)/X_std 计算时对每个属性/每列分别进行, Z-score 标准化。

将数据按其属性(按列进行)减去其均值,然后除以其方差。最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。

首先说明下sklearn中preprocessing库里面的scale函数使用方法,默认参数如下:

scale(X, axis=0, with_mean=True, with_std=True, copy=True)

  • X:进行标准化的数据,为数组或矩阵
  • axis:当 axis=0 时,所有样本数据的每个特征(每列)服从标准正太分布,均值为0,方差为1,默认为0;当axis=1 时,每个样本的所有特征(每行)服从标准正太分布,均值为0,方差为1
  • with_mean:布尔类型,默认为True
  • with_std:布尔类型,默认为True
from sklearn import preprocessing
import numpy as np
X_train = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
X_scaled=preprocessing.scale(X_train)
X_scaled
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
print(X_scaled.mean(axis=0))  ### 计算X_scaled特征(每列)的均值进行验证
print(X_scaled.std(axis=0))   ### 计算X_scaled特征(每列)的方差进行验证
[ 0.  0.  0.]
[ 1.  1.  1.]
(X_train-X_train.mean(axis=0))/X_train.std(axis=0)  ###用原始公式将X_train标准化,结果如下:
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler().fit(X_train)
scaler

StandardScaler(copy=True, with_mean=True, with_std=True)

print(scaler.mean_)
[ 1.          0.          0.33333333]
print(scaler.scale_)
[ 0.81649658  0.81649658  1.24721913]
scaler.transform(X_train)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值