正则化,归一化,标准化的区别与联系

首先,标准化的英文是Standardization,归一化的英文是Normalization,正则化的英文是Regularization。标准化是特征缩放的一种方式,需要注意的是标准化之后的数据分布并不一定是正态分布,因为标准化并不会改变原始数据的分布。归一化的目的是消除不同量纲及单位影响,提高数据间的可比性。正则化的目的是为了防止过拟合。文中涉及代码下载参考[5]。

一.标准化

1.标准化方程

最常用的标准化就是Z-Score标准化,简单理解就是减均值,并除以标准差。用方程表示如下:
x_{new}=(x-μ)/σ
其中,\mu是样本均值,σ是样本标准差。

2.标准化可视化

标准化的过程分为2个步骤,第1步是减均值,第2步是除以标准差。可视化分析如下:


上图中左图是原图可视化,中图是减均值后的可视化,右图是除以标准差后的可视化。

3.标准化实现

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

输出结果如下:

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

如果在做机器学习模型训练的时候,想把训练集的缩放标准应用到测试集上,那就要使用StandardScaler()这个类了,代码如下:

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))

输出结果如下:

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

二.归一化

归一化就是把数据压缩到一个区间内,比如[0,1]、[-1,1]。常用的2种方法如下:

1.Min-Max Normalization

用方程表示如下:
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_{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=\{\textbf{(x}_1,y_1),(\textbf{x}_2,y_2),...,(\textbf{x}_m,y_m)\},考虑最简单的线性回归模型,以平方误差作为损失函数,优化目标如下:
min_\omega\sum_{i = 1}^{N}{(y_{i} -\omega^{T} x_{i})^{2} }
引入L2范数正则化,称为岭回归[ridge regression],如下所示:
min_\omega\sum_{i = 1}^{N}{(y_{i} -\omega^{T} x_{i})^{2} } + C||\omega||_{2}^{2}
引入L1范数正则化,称为LASSO[Least Absolute Shrinkage and Selection Operator]回归,如下所示:
min_\omega\sum_{i = 1}^{N}{(y_{i} -\omega^{T} x_{i})^{2} } + C||\omega||_{1}
假设数据维度为2维,通过方程\sum_{j=1}^M|\omega_j|^q≤\frac1\lambda可以做出下图,其中左图即\omega_1^2+\omega_2^2≤\frac1\lambda,右图即\omega_1+\omega_2≤\frac1\lambda。可见随着\lambda增大,越来越多的参数会变为0:

目的是为了找到损失函数取最小值时对应的权重值,其中下图蓝色圆圈是平方误差项等值线,当取椭圆中心点时,损失函数(这里说的损失函数不包含正则化)值最小。总的损失函数(这里说的损失函数包含正则化)就是求蓝圈+红圈的和的最小值。
正则化方法是一个常量,它通过限制模型的复杂度,使得复杂的模型能够在有限大小的数据集上进行训练,而不会产生严重的过拟合。正则项越小,惩罚力度越小,极端情况正则项为0时,就会造成过拟合问题;正则化越大,惩罚力度越大,就会容易出现欠拟合问题。

通过上图可以直观的看到采用L1范数时平方误差项等值线与正则化项等值线的交点出现在坐标轴上,即\omega_1=0或者\omega_2=0。当采用L2范数时,两者的交叉点常出现在某个象限中,即\omega_1≠0\omega_2≠0。这样采用L1正则化比L2正则化更容易得到稀疏解。L2正则化优势是处处可导,L1正则化有拐点,不是处处可微,但可以得到更加稀疏的解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容