L1范数与L2范数的区别与联系
Posted ZhangJiQun.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1范数与L2范数的区别与联系相关的知识,希望对你有一定的参考价值。
目录
np.linalg.norm(求范数)
1、linalg=linear(线性)+algebra(代数),norm则表示范数。
2、函数参数
x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)
参数意义
①x: 表示矩阵(也可以是一维)
②ord:范数类型
一范数:求和 二范数:距离
③axis:处理类型
axis=1表示按行向量处理,求多个行向量的范数
axis=0表示按列向量处理,求多个列向量的范数
axis=None表示矩阵范数。
④keepding:是否保持矩阵的二维特性
True表示保持矩阵的二维特性,False相反
代码展示
import numpy as np
x = np.array([
[0, 3, 4],
[1, 6, 4]])
# 默认参数ord=None,axis=None,keepdims=False
print("默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性):", np.linalg.norm(x))
print("矩阵整体元素平方和开根号,保留矩阵二维特性:", np.linalg.norm(x, keepdims=True))
print("矩阵每个行向量求向量的2范数:", np.linalg.norm(x, axis=1, keepdims=True))
print("矩阵每个列向量求向量的2范数:", np.linalg.norm(x, axis=0, keepdims=True))
print("矩阵1范数:", np.linalg.norm(x, ord=1, keepdims=True))
print("矩阵2范数:", np.linalg.norm(x, ord=2, keepdims=True))
print("矩阵∞范数:", np.linalg.norm(x, ord=np.inf, keepdims=True))
print("矩阵每个行向量求向量的1范数:", np.linalg.norm(x, ord=1, axis=1, keepdims=True))
L1范数与L2范数的区别与联系
范数理论的一个推论:>=>=
一、过拟合与正则化
过拟合指的就是在机器学习模型训练过程中把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样会导致在测试的时候不能够很好地识别数据,即不能正确的分类,模型测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力较差,也就是高方差(variance),低偏差(bias)。例如:中间的较好
正则化就是用来解决过拟合问题的,防止我们的模型过分拟合我们的参数。监督机器学习问题无非就是“minimize your error while regularizing your parameters”,也就是在规则化参数的同时最小化误差,最小化误差是为了让我们的模型拟合我们的训练数据。正则化参数我理解就是寻找在模型拟合我们的数据以及过拟合之间寻找平衡点。参数太多,会导致我们的模型复杂度上升,容易过拟合,正则化可以约束参数,降低模型复杂度,同时规则项的使用可以约束我们模型的特性,使模型稀疏、低秩、平滑等。机器学习中几乎都可以看到损失函数后面会添加一个额外项,称作L1正则化和L2正则化,或者L1范数和L2范数。
其中,第一项L(yi,f(xi;w)) 就是误差平方和;第二项则为惩罚项,对参数w的正则化函数Ω(w)去约束我们的模型尽量的简单。机器学习的大部分带参模型都和这个不但形似,而且神似。是的,其实大部分无非就是变换这两项而已。
第一项-Loss函数
还有等等。不同的loss函数,具有不同的拟合特性,这个也得就具体问题具体分析的。但这里,我们先不究loss函数的问题,我们把目光转向“规则项Ω(w)”
第二项-正则化参数
常见的有L1范数、L2范数等
线性回归的中的正则化项举例:
二、L1范数与L2范数
-
L1范数 -- (Lasso Regression)
L1范数表示向量中每个元素绝对值的和:
L1范数的解通常是稀疏性的,倾向于选择数目较少的一些非常大的值或者数目较多的insignificant的小值。
参数稀疏的好处
1)特征选择(Feature Selection):
大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
2)可解释性(Interpretability):
另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1*x1+w2*x2+…+w1000*x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w*就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。
-
L2范数 -- (Ridge Regression)
L2范数即欧氏距离:
L2范数越小,可以使得w的每个元素都很小,接近于0,
L1范数不同的是他不会让它等于0而是接近于0.
L2的作用=参数变小=模型变简单≈模型参数信息变少
L1范数与L2范数的区别与联系 - Allegro - 博客园
三、从几何角度直观理解L1范数、L2范数
假设有如下带L1正则化的损失函数:
其中J0是原始的损失函数,加号后面的一项是L1正则化项,α是正则化系数。注意到L1正则化是权值的绝对值之和,J是带有绝对值符号的函数,因此J是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数J0后添加L1正则化项时,相当于对J0做了一个约束。令L=α∑w|w|,则J=J0+L,此时我们的任务变成在L约束下求出J0取最小值的解。考虑二维的情况,即只有两个权值w1和w2,此时L=|w1|+|w2|对于梯度下降法,求解J0的过程可以画出等值线,同时L1正则化的函数L也可以在w1w2的二维平面上画出来。如下图:
图中等值线是J0的等值线,黑色方形是L函数的图形。在图中,当J0等值线与L图形首次相交的地方就是最优解。上图中J0与L在L的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是(w1,w2)=(0,w)。可以直观想象,因为L函数有很多『突出的角』(二维情况下四个,多维情况下更多),J0与这些角接触的机率会远大于与L其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。而正则化前面的系数α,可以控制L图形的大小。α越小,L的图形越大(上图中的黑色方框);α越大,L的图形就越小,可以小到黑色方框只超出原点范围一点点,这是最优点的值(w1,w2)=(0,w)中的w可以取到很小的值。类似,假设有如下带L2正则化的损失函数:
同样可以画出他们在二维平面上的图形,如下:
二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此J0与L相交时使得w1或w2等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。
总结
一句话简单总结L1、L2范数的区别
- L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。具有截断性
- L2正则化可以让参数衰减,防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。具有缩放性
以上是关于L1范数与L2范数的区别与联系的主要内容,如果未能解决你的问题,请参考以下文章