机器学习之数学基础(四)~L1范数(Manhattan Distance)=Lasso Regression, L2范数(Euclidean distance)=Ridge Regression

目录

1. 正则化

1 L1范数 (Manhattan distance)

1.2 L1 正则化 = Lasso Regression 拉索回归

1.2 L2范数 (Euclidean distance)

1.2.1 L2正则化=Ridge Regression 岭回归 

1.3 Lasso and Ridge model comparison

2. 回归问题中的损失函数

2.1 平方损失函数:MSE- L2 Loss

2.2 绝对值损失函数:MAE - L1 Loss

MAE相比MSE的优点:

MAE的不足:

那么什么时候用MSE,什么时候用MAE呢?

MSE与MAE都不能很好解决的问题:

2.3 Huber损失函数

为什么使用Huber?

参考


1. 正则化

正则化(Regularization) 是机器学习中对原始损失函数引入额外信息--引入惩罚项以便防止过拟合和提高模型泛化性能的一类方法的统称

                                                           图1 欠拟合和过拟合

从图中可以看出,最右边的属于一种过拟合,过拟合的问题通常发生在变量(特征)过多的时候,这种情况下训练出的方程总是能很好的拟合训练数据,也就是损失函数可能非常接近于 0 或者就为 0 但是,这样的曲线会导致它无法泛化到新的数据样本中

在图1中,可以看出最右边的是过拟合的,但是不想抛弃\theta_{3}\theta_{4}变量自带的信息,因此加上惩罚项,使得\theta_{3}\theta_{4}足够小

优化目标为:

\min _{\theta} \frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}        ------------原有的loss 损失函数

在优化目标的基础上,添加一些项(惩罚项),如下:

\min _{\theta} \frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+1000 \theta_{3}^{2}+1000 \theta_{4}^{2}      -------------------新的损失函数,新的损失函数

1 L1范数 (Manhattan distance)

L1 范数(曼哈顿距离):计算路径长度之和,即各坐标轴上的绝对距离之和

曼哈顿距离,也称为 L1 范数,是指在一个坐标系中,从一点到另一点的路径长度之和。这种距离度量方法可以想象为在城市的街道网格上行走,因此得名曼哈顿距离。它的定义如下:

对于两个点 𝑥=(𝑥1,𝑥2,…,𝑥𝑛) 和 𝑦=(𝑦1,𝑦2,…,𝑦𝑛),它们之间的曼哈顿距离计算公式为:

d_{M\!an\!hattan}(x,y) = ||x-y||_1 = \sum_{i=1}^n|x_i - y_i|

假设有两个点 𝑥=(1,2)和 𝑦=(4,6),

  • L1 norm = 曼哈顿距离

d_{M\!an\!hattan}(x,y)=|1-4|+|2-6|=3+4=7

  • L2 norm = 欧几里得距离

d_{Euclidean} = \sqrt {(1-4)^2 + (2-6)^2} = \sqrt {9 + 16} = 5

1.2 L1 正则化 = Lasso Regression 拉索回归

  • L1正则化:权重向量Wij中各个元素的绝对值之和

\underset{w}{min}J(w;X,y) + \alpha ^{*}||w||_{1}

Lasso是Least Absolute Shrinkage and Selection Operator的简称,是一种采用了L1正则化(L1-regularization)的线性回归方法,采用了L1正则会使得部分学习到的特征权值为0,从而达到稀疏化和特征选择的目的。

Lasso(Least absolute shrinkage and selection operator)方法是以缩小变量集(降阶)为思想的压缩估计方法。它通过构造一个惩罚函数,可以将变量的系数进行压缩使某些回归系数变为0,进而达到变量选择的目的。

一般来说,回归问题是一个函数拟合的过程,那么我们希望模型不要太复杂,否则很容易发生过拟合现象,所以我加入正则化项,而不同的正则化项就产生了不同的回归方法,其中以Ridge Regression(岭回归)和Lasso最为经典,前者是加入了L2正则化项,后者加入的是L1正则化项。

1.2 L2范数 (Euclidean distance)

L2 范数(欧式距离):计算直线距离,即各坐标轴上的差值的平方和的平方根 

欧式距离是我们通常所指的距离度量方式,它代表两个点之间的直线距离。对于两个点 𝑥=(𝑥1,𝑥2,…,𝑥𝑛) 和 𝑦=(𝑦1,𝑦2,…,𝑦𝑛),它们之间的欧式距离计算公式为: 

d_{Euclidean}(x,y) = ||x-y||_2 = \sqrt{ \sum_{i=1}^n (x_i - y_i)^2 }

1.2.1 L2正则化=Ridge Regression 岭回归 

  • L2正则化是指权重向量W中各个元素的平方和然后再求平方根.

\underset{w}{min}J(w;X,y) + \alpha ^{*}||w||_{2}^{2}

正则化(Regularization)是机器学习中一种常用的技术,其主要目的是控制模型复杂度减小过拟合。--->应先看Lasso 回归Regression

最基本的正则化方法是在原目标(代价)函数添加惩罚项,对复杂度高的模型进行“惩罚”。其数学表达形式为:

\tilde{J}(w; X, y) = J(w; X, y) + \alpha \Omega (w)

式中X、y 为训练样本和相应标签,w为权重系数向量;J()为目标函数,\Omega(w)即为惩罚项,可理解为模型“规模”的某种度量;参数\alpha控制正则化强弱。不同的\Omega函数对权重w的最优解有不同的偏好,因而会产生不同的正则化效果。最常用的\Omega函数有两种,即l_{1}范数和l_{2}范数,相应称之为l_{1}正则化(绝对值)和l_{2}正则化(平方)。此时有:

==>NP问题:

P:算起来很快的问题
NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案对不对
NP-hard:比所有的NP问题都难的问题
NP-complete:满足两点:
1. 是NP hard的问题
2. 是NP问题

[什么是NP完全问题 https://www.jianshu.com/p/dcb0b52f4935], [什么是NP问题, 什么是NP问题_非np问题-CSDN博客]

为了达到近似效果,我们不严格要求某些权重w为0,而是要求权重w应接近于0,即尽量小。从而可用 l_{1} 、l_{2}范数来近似l_{0}范数,即:

1.3 Lasso and Ridge model comparison

为什么Lasso Regression可以做降维?

                                              图2

以二维数据空间为例,说明Lasso和Ridge两种方法的差异,左图对应于Lasso方法,右图对应于Ridge方法。 

如上图所示,两个图是对应于两种方法的等高线与约束域。红色的椭圆代表的是随着λ的变化所得到的残差平方和,βˆ为椭圆的中心点,为对应普通线性模型的最小二乘估计

2. 回归问题中的损失函数

2.1 平方损失函数:MSE- L2 Loss

MSE = \sum _{i=1}^{n} (y_{i} - \hat{y_{i}}) ^{2}  , Square

平方损失函数是光滑函数,能够用梯度下降法进行优化。然而,预测值距离真实值越远,平方损失的惩罚力度越大因此,它对异常点比较敏感为了解决该问题,可以采用绝对损失函数。

2.2 绝对值损失函数:MAE - L1 Loss

MAE = \sum _{i=1}^{n} |y_{i} - \hat{y_{i}}|    , Average

MAE相比MSE的优点

MAE相当于在做中值回归,相比做均值回归的MSE,MAE对异常点的鲁棒性更好。(中值回归与均值回归的介绍详见“补充信息”)

MAE的不足

1. MAE在 y=\hat{y}处无法求导数。针对这种情况,平衡MSE的可导性和MAE的鲁棒性,可以采用Huber损失函数(在第3部分介绍)。

2. MAE更新的梯度始终相同,那么在接近最优值处可能仍维持着较大的梯度而错过最优值。

针对这种情况,可以使用变化的学习率,在接近最优值时降低学习率

而MSE在这种情况下表现较好,即使使用固定的的学习率也可以有效收敛。MSE损失的梯度随损失增大而增大,在损失趋于0时则减小,这使得在训练结束时,MSE模型的结果往往会更精确。 

那么什么时候用MSE,什么时候用MAE呢?

MSE:如果异常点代表在商业中很重要的异常情况,并且需要被检测出来,则应选用MSE损失函数。

MAE:相反,如果只把异常值当作受损数据,则应选用MAE损失函数。

总而言之,处理异常点时,MAE更稳定,但它的导数不连续,因此求解效率较低。MSE对异常点更敏感,但通过令其导数为0,可以得到更稳定的封闭解。 

MSE与MAE都不能很好解决的问题:

二者兼有的问题是:在某些情况下,上述两种损失函数都不能满足需求。例如,若数据中90%的样本对应的目标值为150,剩下10%在0到30之间。

那么使用MAE作为损失函数的模型可能会忽视10%的异常点,而对所有样本的预测值都为150。 这是因为模型会按中位数来预测。

而使用MSE的模型会给出很多介于0到30的预测值,因为模型会向异常点偏移均值回归

上述两种结果在许多商业场景中都是不可取的。

这些情况下应该怎么办呢?最简单的办法是对目标变量进行变换

而另一种办法则是换一个损失函数,这就引出了下面要讲的第三种损失函数,即Huber损失函数。

补充信息:

1. 中值回归就是我们优化的目标是使目标值趋于样本点值的中位数,直观理解就是大于 与 小于 目标值的样本点数尽量相等。

2. 均值回归的目标则是使目标值趋于样本点值的均值。

3. 为什么MSE是均值回归,而MAE是中值回归呢?

我在StackExchange找到一条很好的解释。

2.3 Huber损失函数

Huber损失函数在|y - f(x)|较小时为平方损失,在 |y - f(x)| 较大时为线性损失。并且处处可导。

这里超参数δ的选择非常重要,因为这决定了你对与异常点的定义。当残差大于δ,应当采用L1(对较大的异常值不那么敏感)来最小化,而残差小于超参数,则用L2来最小化。

由上图可知,超参数δ 越大,对异常点越敏感,因为δ 越大,huber损失函数接近于MSE。

为什么使用Huber?

在离最优值较远时,即|y - f(x)|较大时,Huber损失相当于MAE,对异常点有更好的鲁棒性;

当离最优值较近时,即|y - f(x)|较小时,Huber损失相当于MSE,随着损失的减小梯度也在逐渐减小,可以更好的逼近最优值,可以避免MAE中始终维持大梯度而错过最优值的问题。

使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。

而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。

在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。

参考

https://www.cnblogs.com/zingp/p/10375691.html#:~:text=L1%E6%AD%A3%E5%88%99%E5%8C%96%E5%92%8CL2%E6%AD%A3%E5%88%99%E5%8C%96%E7%9A%84%E8%AF%B4%E6%98%8E%E5%A6%82%E4%B8%8B,2%20%E2%80%96%20w%20%E2%80%96%202%202%20%E3%80%82

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
L2正则化和L1正则化都是为了防止模型的过拟合,但是它们的实现方式不同。L2正则化(Ridge回归)通过在损失函数中添加L2范数的平方来惩罚模型的复杂度,而L1正则化(Lasso回归)则是通过在损失函数中添加L1范数来惩罚模型的复杂度。相比于L1正则化,L2正则化有以下好处: 1. L2正则化对异常值不敏感,而L1正则化对异常值非常敏感。这是因为L2正则化是平方项,而L1正则化是绝对值,所以L1正则化会将某些系数压缩到0,从而使得模型更加稀疏,而L2正则化则不会。 2. L2正则化可以解决特征之间相关的问题,而L1正则化不能。这是因为L2正则化是平方项,可以将权重分散到所有特征上,而L1正则化是绝对值,只能将权重分散到部分特征上。 下面是一个使用Ridge回归L2正则化的例子: ```python from sklearn.linear_model import Ridge from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 加载数据集 boston = load_boston() X, y = boston.data, boston.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 ridge = Ridge(alpha=1.0) ridge.fit(X_train, y_train) # 预测并计算均方误差 y_pred = ridge.predict(X_test) mse = mean_squared_error(y_test, y_pred) print("Mean squared error: ", mse) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼啸月1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值