数据归一化学习笔记

目录

 

数据归一化的目的:

方法:

代码实现:

Sklearn 中的 Scaler


数据归一化的目的:

由于特征之间的量纲不同,如果直接采用源数据进行机器学习,则不能很好的同时反应各个特征的重要程度

所以在机器学习前,首先要对数据进行  数据归一化处理,将数据映射到同一尺度。

 

方法:

1. 最值归一化处理(normalization) :把所有数据映射到 0-1 之间;

适用于数据分布有明显边界的情况;比如一组特征是 考试的分数,分数有明显的边界;

缺点:受outlier(异常值)影响比较大,比如没有明显边界的数据;例如:收入的分布,如果大部分人的收入很少,少部分人的收入非常高,最值归一化处理后,低收入人群的值会被 “挤到” 很小的区域。

x_{scale} =\frac{x-x_{min}}{x_{max}-x_{x_{min}}}     

2.均值方差归一化(standardization): 把所有的数据归一到均值为0,方差为1的分布中;

适用于数据分布没有明显边界,有可能存在极端数据值;比如收入的分布;

建议:除非数据有明显的边界,一般都使用均值方差归一化。

x_{scale} = \frac{x - x_{min}}{s}

代码实现:

对于自己编写的代码实现最值归一化的处理可以用下面的代码实现,以二维矩阵 X 为例,分别对每一列套用下面的公式:

x_{scale} =\frac{x-x_{min}}{x_{max}-x_{x_{min}}}

X[:,0] = (X[:,0]-np.min(X[:,0]))/(np.max(X[:,0])-np.min(X[:,0]))
X[:,1] = (X[:,1]-np.min(X[:,1]))/(np.max(X[:,1])-np.min(X[:,1]))

对于均值方差归一化,以二维矩阵 X2为例,分别对每一列通用下面的公式:

x_{scale} = \frac{x - x_{min}}{s}

X2[:,0] = (X2[:,0] - np.mean(X2[: ,0]))/ np.std(X2[:,0])
X2[:,1] = (X2[:,1] - np.mean(X2[: ,1]))/ np.std(X2[:,1])

Sklearn 中的 Scaler

重要的前提:

在机器学习中,我们将源数据分为 train 和 test ,对于train 和 test ,显然都要进行数据归一化处理;假设现在要对数据进行均值方差归一化处理;

首先对train进行均值方差归一化处理,之后有一个很重要的点: 对于 test 数据集是进行归一化处理时,同样要使用 train数据集的 均值和方差 ,不能使用 test 数据集的均值和方差!

原因:测试数据集(test)是模拟真实环境

  • 真实环境很可能无法得到所有测试数据的均值和方差;比如当 test 数据只有一组数据时 , 是无法计算出均值和方差的
  • 对数据的归一化也是算法的一部分;我们由 train 数据集训练模型得到算法,所以train数据集的均值和方差也是 算法中的一部分;

scikit-learn 中的 Scaler:

为了保存 train 数据集的均值和方差 ,需要使用scikit-learn 中的 Scaler类 ; Scaler类的封装和 算法的分装模式是一致的;

将 train 数据集传入 Scaler中 进行 fit ,得到一个保存train数据集的各项统计指标的Scaler ,然后将test数据集传入新的Scaler 进行 transform , 得到响应的输出结果。

代码实现:

引入 StandardScaler ,并创建实例

from sklearn.preprocessing import StandardScaler
standardScaler = StandardScaler()

 对 X_train进行 fit

standardScaler.fit(X_train)

 

可以通过 standardScaler.scale_  查看各列的标准差

可以通过 standardScaler.mean_ 查看各列的均值

standardScaler.mean_ 
standardScaler.scale_

此时X_train 并没有被改变,需要进行一次赋值:

X_train_standard = standardScaler.transform(X_train) 

对test 进行均值方差归一化处理:

X_test_standard = standardScaler.transform(X_test)

最后:sklearn 中也有对 最值归一化处理的 模块; 被封装在 sklearn.preprocessing.MinMaxScaler 中

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值