数据特征 归一化/标准化 方法

归一化/标准化 定义

  • 归一化:就是将训练集中数值特征的值缩放到0和1之间。公式如下
    在这里插入图片描述
  • 标准化:就是将训练集中数值特征的值缩放成均值为0,方差为1的状态。公式如下
    需要先计算出均值和标准差,下面是标准差的计算公式
    在这里插入图片描述
    μ表示均值,x*表示标准化的表达式
    在这里插入图片描述

优点

  • 加快了梯度下降求最优解的速度。

例子如下,左图代表没处理过的数据,最优解的求值可能会比较缓慢,例子如下,左图代表没处理过的数据,最优解的求值可能会比较缓慢,而右图是归一化后的,明显收敛速度更快。
在这里插入图片描述

  • 提升模型精度

例如,在KNN类算法中。我们需要计算每个点与分类点之间的距离,当我们没有进行归一化操作的时候,取值范围大的特征占据主导因素,导致其他特征的影响极小,这样会影响到最后的结果。

什么情况下必须进行标准化/归一化?

  • 当你的损失函数,有L1或者L2惩罚项时,必须使用标准化/归一化,因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。
  • Kmeans,KNN一些涉及到距离有关的算法,或者聚类的话,都是需要先做变量标准化的。
  • 调用SVM的RBF内核和PCA算法

怎么进行标准化/归一化?

这里我们引用sklearn中自带的数据,来进行操作
导入数据

from sklearn.datasets import load_iris
iris = load_iris()
iris.data

标准化

from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(iris.data)

归一化

from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(iris.data)

另外,我们要先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!

猜你喜欢

转载自blog.csdn.net/weixin_43172660/article/details/83826051