Normalisation, normalisation et régularisation

  Tout d'abord, l'anglais normalisé est la normalisation, l'anglais normalisé est la normalisation et l'anglais régularisé est la régularisation. La standardisation est un moyen de mise à l'échelle des caractéristiques. Il convient de noter que la distribution des données après la standardisation n'est pas nécessairement une distribution normale, car la standardisation ne modifie pas la distribution des données d'origine. Le but de la normalisation est d'éliminer l'influence des différentes dimensions et unités et d'améliorer la comparabilité entre les données. Le but de la régularisation est d'éviter le surajustement. L'article implique une référence de téléchargement de code [5].

1. Normalisation

1. Équations standardisées

La normalisation la plus couramment utilisée est la normalisation Z-Score, qui consiste simplement à soustraire la moyenne et à diviser par l'écart type. Exprimé en équations comme suit :

x n e w = x μ σ {x_{nouveau}} = \frac{{x - \mu }}{\sigma }

dans, μ \ mu est la moyenne de l'échantillon, σ \sigma est l'écart type de l'échantillon.

2. Visualisation standardisée

Le processus de normalisation est divisé en 2 étapes, la première étape consiste à soustraire la moyenne et la deuxième étape consiste à diviser par l'écart type. L'analyse de la visualisation est la suivante : l' image de gauche dans la figure ci-dessus est la visualisation de l'image d'origine, l'image du milieu est la visualisation après soustraction de la moyenne et l'image de droite est la visualisation après division par l'écart type.

3. Mise en œuvre de la normalisation

from sklearn import preprocessing
import numpy as np

X_train = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
X_train_result = preprocessing.scale(X_train, axis=0) #axis=0表示按列进行标准化
print(X_train_result)
print(X_train_result.mean(axis=0)) #均值为0
print(X_train_result.std(axis=0))  #标准差为1

La sortie est la suivante :

[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
[0. 0. 0.]
[1. 1. 1.]

Si vous souhaitez appliquer les critères de mise à l'échelle de l'ensemble d'entraînement à l'ensemble de test lors de l'entraînement du modèle d'apprentissage automatique, vous utiliserez la classe StandardScaler(). code afficher comme ci-dessous:

from sklearn import preprocessing
import numpy as np

X_train = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
scaler = preprocessing.StandardScaler().fit(X_train)
X_scaled = scaler.transform(X_train)
print(X_scaled.mean(axis=0)) #均值为0
print(X_scaled.std(axis=0))  #标准差为1
X_test = [[-1., 1., 0.]]     #使用训练集的缩放标准来标准化测试集,这里的缩放标准指的就是训练集的列的均值和标准差
print(scaler.transform(X_test))

La sortie est la suivante :

[0. 0. 0.]
[1. 1. 1.]
[[-2.44948974  1.22474487 -0.26726124]]

2. Normalisation

La normalisation consiste à compresser les données dans un intervalle, tel que [0,1], [-1,1]. Deux méthodes couramment utilisées sont les suivantes :

1. Normalisation Min-Max

Exprimé en équations comme suit :

x n e w = x x min x max x min {x_{new}} = \frac{{x - {x_{\min }}}}{{{x_{\max }} - {x_{\min }}}}

归一化的区间范围是[0,1]。代码实现如下:

import numpy as np
from sklearn import preprocessing as pp
X_train = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
scaler = pp.MinMaxScaler().fit(X_train) #默认数据压缩范围为[0,1]
print(scaler.transform(X_train))

输出结果如下:

[[0.5   0.    1.   ]
 [1.    0.5   0.   ]
 [0.    1.    0.125]]

2.Mean Normalization

用方程表示如下:

x n e w = x x m e a n x max x min {x_{new}} = \frac{{x - {x_{mean }}}}{{{x_{\max }} - {x_{\min }}}}

归一化的区间范围是[-1,1]。

import numpy as np
from sklearn import preprocessing as pp
X_train = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
scaler = pp.MinMaxScaler(feature_range=(-1, 1)) #设置数据压缩范围为[-1,1]
scaler = scaler.fit(X_train)
print(scaler.transform(X_train))

输出结果如下:

[[ 0.   -1.    1.  ]
 [ 1.    0.   -1.  ]
 [-1.    1.   -0.75]]

上述代码主要使用scikit-learn的预处理子模块preprocessing提供MinMaxScaler类来实现归一化功能。MinMaxScaler类有一个重要参数feature_range,该参数用于设置数据压缩的范围,默认值是[0,1]。

三.正则化

  简单理解使用正则化的目的就是为了防止过拟合,当然还有其它防止过拟合的方法,比如降低特征维度。先举个例子说下为什么降低特征维度也可以防止过拟合,然后再说明正则化是如何防止过拟合的。首先要搞明白过拟合的本质是什么?就是把噪音也当做事物的特征进行了建模。假如一只小鸟受伤了,暂时不会飞翔,在构建鸟类分类器的时候,把能否飞翔这个噪音也学习成模型的特征了,这样正常的能够飞翔的小鸟就判断为不是鸟类了,当然这是一个过拟合的很牵强的例子,但是也可说明一定的问题。正则化是如何防止过拟合的呢?
对于给定的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , , ( x m , y m ) } D = \left\{ {\left( {{x_1},{y_1}} \right),\left( {{x_2},{y_2}} \right), \cdots ,\left( {{x_m},{y_m}} \right)} \right\} ,考虑最简单的线性回归模型,以平方误差作为损失函数,优化目标如下:

min w i = 1 m ( y i w T x i ) 2 \mathop {\min }\limits_w \sum\limits_{i = 1}^m {{{\left( {{y_i} - {{\bf{w}}^T}{{\bf{x}}_i}} \right)}^2}}

引入L2范数正则化,称为岭回归[ridge regression],如下所示:

min w i = 1 m ( y i w T x i ) 2 + λ w 2 2 \mathop {\min }\limits_w \sum\limits_{i = 1}^m {{{\left( {{y_i} - {{\bf{w}}^T}{{\bf{x}}_i}} \right)}^2}} + \lambda \left\| {\bf{w}} \right\|_2^2

引入L1范数正则化,称为LASSO[Least Absolute Shrinkage and Selection Operator]回归,如下所示:

min w i = 1 m ( y i w T x i ) 2 + λ w 1 \mathop {\min }\limits_w \sum\limits_{i = 1}^m {{{\left( {{y_i} - {{\bf{w}}^T}{{\bf{x}}_i}} \right)}^2}} + \lambda {\left\| {\bf{w}} \right\|_1}

假设数据维度为2维,通过方程 j = 1 M w j q 1 λ \sum\limits_{j = 1}^M {{{\left| {{w_j}} \right|}^q}} \le \frac{1}{\lambda } (这里没有展开推导,若感兴趣可参考[3])可以做出下图,其中左图即 w 1 2 + w 2 2 1 λ w_1^2 + w_2^2 \le \frac{1}{\lambda } ,右图即 w 1 + w 2 1 λ \left| {{w_1}} \right| + \left| {{w_2}} \right| \le \frac{1}{\lambda } 。可见随着 λ {\lambda } 增大,越来越多的参数会变为0:   目的是为了找到损失函数取最小值时对应的权重值,其中下图蓝色圆圈是平方误差项等值线,当取椭圆中心点时,损失函数(这里说的损失函数不包含正则化)值最小。总的损失函数(这里说的损失函数包含正则化)就是求蓝圈+红圈的和的最小值。
正则化方法是一个常量,它通过限制模型的复杂度,使得复杂的模型能够在有限大小的数据集上进行训练,而不会产生严重的过拟合。正则项越小,惩罚力度越小,极端情况正则项为0时,就会造成过拟合问题;正则化越大,惩罚力度越大,就会容易出现欠拟合问题。
  通过上图可以直观的看到采用L1范数时平方误差项等值线与正则化项等值线的交点出现在坐标轴上,即 w 1 = 0 {w_1} = 0 或者 w 2 = 0 {w_2} = 0 。当采用L2范数时,两者的交叉点常出现在某个象限中,即 w 1 0 {w_1} \ne 0 w 2 0 {w_2} \ne 0 。这样采用L1正则化比L2正则化更容易得到稀疏解。L2正则化优势是处处可导,L1正则化有拐点,不是处处可微,但可以得到更加稀疏的解。

参考文献:
[1]Preprocessing data:scikit-learn.org/stable/modu…
[2]机器学习中常常提到的正则化到底是什么意思:www.zhihu.com/question/20…
[3]模式识别和机器学习[中文版]:url39.ctfile.com/f/2501739-6… (访问密码: 2096)
[4]模式识别与机器学习[英文版]:url39.ctfile.com/f/2501739-6… (访问密码: 2096)
[5]标准化、归一化和正则化的关系.py:url39.ctfile.com/f/2501739-6… (访问密码: 2096)

本文由mdnice多平台发布

Guess you like

Origin juejin.im/post/7121136739103539207