数据集如果标准化处理,对机器学习中的很多算法(包括梯度下降),会有很好的优化效果。如果数据未标准化(例如,数据集特征之间相差的数量级较大时),很多算法的表现性能不佳。
衡量随机变量或一组数据的离散(偏离)程度
概率论中,方差是用来度量随机变量和其数学期望的(均值)之间的偏离程度。
统计学中,各数据分别与其平均数之差的平方和
假设一组随机变量或统计数据的期望(均值)用 E ( x ) E(x) E(x)表示,则其方差表示为各数据与 E ( x ) E(x) E(x)差的平方和 ∑ [ x − E ( x ) ] 2 \sum[x-E(x)]^2 ∑[x−E(x)]2,然后再求其期望(均值)得 D ( x ) = ∑ [ x − E ( x ) ] 2 D(x)=\sum[x-E(x)]^2 D(x)=∑[x−E(x)]2
根据上文我们知道方差是用来衡量随机变量或一组数据的离散(偏离)程度,标准差(也叫均方差)的公式为 σ = D ( x ) \sigma = \sqrt {D(x)} σ=D(x),方差和标准差有一个共有的性质:值越大分布曲线越扁也就是越分散。
由于数据是随机的,假设其同分布根据中心极限定理,该数据服从高斯(正太)分布(典型的例子就是误差),我们看下分布面积情况。
在使用标准差的时候我们可以清楚的看到数据属于某个值的概率。(我们处理特征的时候可以以此为依据筛选掉outlier)
横轴区间 ( μ − σ , μ + σ ) (\mu -\sigma,\mu +\sigma) (μ−σ,μ+σ)内的面积为68.268949%
横轴区间 ( μ − 2 σ , μ + 2 σ ) (\mu -2\sigma,\mu +2\sigma) (μ−2σ,μ+2σ)内的面积为95.449974%
横轴区间 ( μ − 3 σ , μ + 3 σ ) (\mu -3\sigma,\mu +3\sigma) (μ−3σ,μ+3σ)内的面积为99.730020%
根据切比雪夫不等式, x x x偏离 n n n个标准差距离的概率小于 1 n 2 \frac{1}{n^2} n21
标准差也叫均方差,而MSE(Mean Squared Error),平均平方误差,为所有样本误差(真实值与预测值之差)的平方和,然后取均值。MSE是回归分析中度量模型好坏的标准,此还有RMSE(误差的 σ \sigma σ)、MAE和 R 2 R^2 R2。均方差是数据序列与均值的关系,而均方误差是数据序列与真实值之间的关系。
M S E = 1 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 MSE = \frac{1}{m}\sum_{i=1}^{m}(y ^ {(i)} - \hat{y} ^ {(i)}) ^ {2} MSE=m1∑i=1m(y(i)−y^(i))2
数据标准化是将数据按比例进行缩放去除数据之间的限制,将其转化为无量纲的数据便于各指标数据进行加权和比较,归一化可以说作为标准化的一种(数据标准化和归一化一般用于连续值,离散值一般使用labelencoding 和onehot对数据进行转换)。
目前数据标准化的方法主要分为以下三种:
直线型方法(阈值法:极值法等、标准化、比重法)
折线形
曲线型
不同的标准化方法,对系统的评价结果会产生不同的影响,在机器学习训练时可以多次进行尝试。
在实际应用中,通过梯度下降法求解的模型一般都是需要归一化的,比如线性回归、logistic回归、KNN、SVM、神经网络等模型。
如果特征之间量纲差距较大的时候,模型的等高线呈现椭圆形,而在进行梯度下降时,梯度的方向为垂直等高线的方向,所以模型会走“之”字形路线,且此时学习率过大或过小将会导致梯度发散或不收敛的情况。
如果特征之间量纲差距较大的时候,模型的等高线呈现圆形,迭代速度会加快,此时只需调整学习率速度即可。如下图:
在涉及到距离计算的模型时,如果某一特征数值差别特别大,在计算的过程中会占据主导地位,对于值较小的特征则可能会导致信息的缺失(数值变化对最后计算结果几乎没有影响)。所以为使模型能够充分学习到各个特征的信息,我们在进行模型分析时应对数据进行标准化处理。数值标准化主要包括数据同趋化处理和数据量纲话处理。
数据同趋化主要是解决不同性质的问题,由于不同性质的指标不能直接加总进行处理,因而将其转化为同一种分布状态(标准正太分布),使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。
数据无量纲化主要是解决数据可比性的问题,及时数据处于同一种分布状态,如果不同特征之间没有进行数据归一化操作,较大特征会始终占据主导地位。
因此归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
(1) 最大最小标准化(min-max Normalization)
(2) Z-score标准化方法(zero-mean normalization)
(3) l o g log log函数转换
我们可以使用sklearn中提供的相关类对数据集进行标准化处理,可以将特征转换成相同的数量级,进而消除数量级不同对算法造成的影响。常用的两种方式:
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))