欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据标准化与归一化

程序员文章站 2022-07-16 18:23:58
...

特征归一化、标准化的理解

数据集如果标准化处理,对机器学习中的很多算法(包括梯度下降),会有很好的优化效果。如果数据未标准化(例如,数据集特征之间相差的数量级较大时),很多算法的表现性能不佳。

首先理解方差、标准差和均方根误差的区别

方差(variance)

衡量随机变量或一组数据的离散(偏离)程度

概率论中,方差是用来度量随机变量和其数学期望的(均值)之间的偏离程度。

统计学中,各数据分别与其平均数之差的平方和

假设一组随机变量或统计数据的期望(均值)用E(x)E(x)表示,则其方差表示为各数据与E(x)E(x)差的平方和[xE(x)]2\sum[x-E(x)]^2,然后再求其期望(均值)得D(x)=[xE(x)]2D(x)=\sum[x-E(x)]^2

为什么要使用标准差

根据上文我们知道方差是用来衡量随机变量或一组数据的离散(偏离)程度,标准差(也叫均方差)的公式为σ=D(x)\sigma = \sqrt {D(x)},方差和标准差有一个共有的性质:值越大分布曲线越扁也就是越分散。
由于数据是随机的,假设其同分布根据中心极限定理,该数据服从高斯(正太)分布(典型的例子就是误差),我们看下分布面积情况。
数据标准化与归一化
在使用标准差的时候我们可以清楚的看到数据属于某个值的概率。(我们处理特征的时候可以以此为依据筛选掉outlier)

横轴区间μσ,μ+σ(\mu -\sigma,\mu +\sigma)内的面积为68.268949%

横轴区间μ2σ,μ+2σ(\mu -2\sigma,\mu +2\sigma)内的面积为95.449974%

横轴区间μ3σ,μ+3σ(\mu -3\sigma,\mu +3\sigma)内的面积为99.730020%

根据切比雪夫不等式,xx偏离nn个标准差距离的概率小于1n2\frac{1}{n^2}

标准差(均方差)、均方误差的区别

标准差也叫均方差,而MSE(Mean Squared Error),平均平方误差,为所有样本误差(真实值与预测值之差)的平方和,然后取均值。MSE是回归分析中度量模型好坏的标准,此还有RMSE、MAE和R2R^2。均方差是数据序列与均值的关系,而均方误差是数据序列与真实值之间的关系。

MSE=1mi=1m(y(i)y^(i))2MSE = \frac{1}{m}\sum_{i=1}^{m}(y ^ {(i)} - \hat{y} ^ {(i)}) ^ {2}

数据标准化和归一化

数据标准化是将数据按比例进行缩放去除数据之间的限制,将其转化为无量纲的数据便于各指标数据进行加权和比较,归一化可以说作为标准化的一种(数据标准化和归一化一般用于连续值,离散值一般使用labelencoding 和onehot对数据进行转换)。
目前数据标准化的方法主要分为以下三种:

直线型方法(阈值法:极值法等、标准化、比重法)
折线形
曲线型

不同的标准化方法,对系统的评价结果会产生不同的影响,在机器学习训练时可以多次进行尝试。

归一化的目的

  • 提升模型的收敛速度
  • 提升模型的精度
  • 防止模型梯度爆炸

模型收敛速度的提升

在实际应用中,通过梯度下降法求解的模型一般都是需要归一化的,比如线性回归、logistic回归、KNN、SVM、神经网络等模型。
如果特征之间量纲差距较大的时候,模型的等高线呈现椭圆形,而在进行梯度下降时,梯度的方向为垂直等高线的方向,所以模型会走“之”字形路线,且此时学习率过大或过小将会导致梯度发散或不收敛的情况。
如果特征之间量纲差距较大的时候,模型的等高线呈现圆形,迭代速度会加快,此时只需调整学习率速度即可。如下图:
数据标准化与归一化

提升模型的精度

在涉及到距离计算的模型时,如果某一特征数值差别特别大,在计算的过程中会占据主导地位,对于值较小的特征则可能会导致信息的缺失(数值变化对最后计算结果几乎没有影响)。所以为使模型能够充分学习到各个特征的信息,我们在进行模型分析时应对数据进行标准化处理。数值标准化主要包括数据同趋化处理和数据量纲话处理。

数据同趋化主要是解决不同性质的问题,由于不同性质的指标不能直接加总进行处理,因而将其转化为同一种分布状态(标准正太分布),使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。

数据无量纲化主要是解决数据可比性的问题,及时数据处于同一种分布状态,如果不同特征之间没有进行数据归一化操作,较大特征会始终占据主导地位。

因此归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
数据标准化与归一化

深度学习中数据归一化可以防止梯度爆炸

常用的数据归一化方法及特点

(1) 最大最小标准化(min-max Normalization)

  1. 又称为离差标准化,将结果映射到[0,1]之间 x=xmin(x)max(x)min(x)x^* = \frac{x-min(x)}{max(x)-min(x)}
  2. 使用情况:本归一化方法适用于数据值比较集中的情况,在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法(不包括Z-score方法)。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围
  3. 缺陷: 该方法极易收到最大值和最小值的影响,使的归一化结果不稳定使得后续使用效果也不稳定。实际使用中可以用经验常量来替代max和min。

(2) Z-score标准化方法(zero-mean normalization)

  1. 通过Z-score标准化方法处理后的数据会服从标准正态分布,处理后的值区间不为[0,1],因此不能叫做归一化,其转换函数x=xμσx^* = \frac{x-\mu}{\sigma}
  2. Z-score标准化方法适用于属性的最大值和最小值未知的情况,此外Z-score方法可用于筛除outlier。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score标准化表现更好。
  3. 缺陷:要求原始数据的分布近似为高斯分布,否则效果会很差。

(3) loglog函数转换

  1. 通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:
    x=log10(x)log10(max(x))x^* = \frac{log_10(x)}{log_10(max(x))}

sklearn 标准化与归一化的方法

我们可以使用sklearn中提供的相关类对数据集进行标准化处理,可以将特征转换成相同的数量级,进而消除数量级不同对算法造成的影响。常用的两种方式:

  • StandardScaler
  • MinMaxScaler。

StandardScaler 将特征转换为标准正态分布的形式。(均值为0,标准差为1。)
MinMaxScaler 将特征转换(缩放)为指定区间的分布。默认(也是通常情况下),我们将特征缩放到[0, 1],我们也把这种缩放方式成为归一化。

# 进行尝试
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split

X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
lr = LinearRegression()
lr.fit(X_train, y_train)
# 数据集未标准化对线性回归类影响不大。
print(lr.score(X_train, y_train))
print(lr.score(X_test, y_test))

# 数据集未标准化对梯度下降算法影响极大。
sgd = SGDRegressor(eta0=0.01, max_iter=100)
sgd.fit(X_train, y_train)
print(sgd.score(X_train, y_train))
print(sgd.score(X_test, y_test))




相关标签: 特征工程