机器学习初级篇9——特征归一化
机器学习初级篇9——特征归一化
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。 例如,分析一个人的身高和体重对健康的影响 , 如果使用米( m) 和干克( kg )作为单位 , 那么身高特征会在 1.6 ~ l.8m 的数值范围内 , 体重特征会在
50 ~ 100kg 的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。 想要
得到更为准确的结果,就需要进行特征归一化( Normalization )处理,使各指标处于同
一数值量级,以便进行分析。
特征归一化
1.归一化与标准化的概念
归一化:就是将训练集中数值特征的值缩放到0到1之间。
标准化:就是将训练集中数值特征的值缩放成均值为0,方差为1的状态。
2.为什么需要对数值类型的特征做归一化?
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内 。 最常用的方法主要再以下两种。
( 1 )线性函数归一化( Min-Max Scaling )。它对原始数据进行统性变躁,使结果映射到[0, 1 ]的范围,实现对原始数据的等比缩放。
归一化公式如下:
其中 X为原始数据,Xmax、 Xmin 分别为数据最大值和最小值。
( 2 )零均值归一化( Z-Score Normalization )。它会将原始数j居映射到均值为 0、标准差为 1 的分布上。 具体来说,假设原始特征的均值为 μ、标准差为 σ,那么归一化公式定义为:
为什么需要对数值型特征做归一化呢?我们不妨借助随机梯度下降的实例来说明归一化的重要性。假设高两种数值型特征,X1的取值范围为[0,10],X2的取值范围为[0, 3],于是可以构造一个目标函数符合图 1.1( a )中的等值图。
在学习速率相同的情况下,X1的更新速度会大于X2, 需要较多的迭代才能找到最优解。如果将 X1 和 X2 归一化到相同的数值区间后,优化目标的等值图会变成图1. 1 (b )中的图形, X1 和X2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解 。
当然 ,数据归一化并不是万能的。 在实际应用中,通过梯度下降法求解的模型通常是需要归一化的;包括线性回归、逻辑回归、支持向量机、 神经网络等模型。 但对于决策树模型则并不适用 , 决策树在进行节点分裂时主要依据数据集 D 关于特征 x 的信息增益比 ,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征 x 上的信息增益。
3.归一化的优点?
1.加快了梯度下降求最优解的速度
如图1.1,(a)图代表没处理过的数据,最优解的求值可能会比较缓慢,而(b)图是归一化的,明显收敛速度更快。
2.提升模型精度
例如在KNN类算法中,我们需要计算每个点与分类点之间的距离,当我们没有进行归一化操作的时候,取值范围大的特征占据主导因素,导致其他特征的影响极小,这样会影响到最后的结果,进行归一化后,特征之间更加平衡。
4.什么情况下必须进行归一化?
1.当损失函数有L1和L2惩罚项时,必须使用标准化或归一化,因为不用正则时,我们的损失函数只是仅仅度量预测与真实的差距,而使用正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小,而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。
2.当Kmean,KNN一些涉及到距离有关的算法,或者聚类的话,都是需要先做变量标准化的。
3.调用SVM的RBF内核和PCA算法。
5.怎么进行标准化/归一化?
1.导入数据(以鸢尾花数据为例)
from sklearn.datasets import load_iris
iris=load_iris()
iris.data
2.标准化
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(iris.data)
3.归一化
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(iris.data)
另外需要注意的是,我们要先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是非常错误的。
上一篇: linux查看oracle是否启动
下一篇: 制作交互式导航栏