目录
老饼讲解:一步一步上手学习

【模型】一篇入门之-ridge岭回归模型

作者 : 老饼 发表日期 : 2025-12-16 23:45:45 更新日期 : 2026-05-10 19:34:20
老饼讲解-简单易懂,干货满满,爽过嗦螺!


岭回归(Ridge Regression)也是一种线性模型,它与线性回归、Lasso回归很像,只是在损失函数上加入了二范正则项,来惩罚过大的系数,并且它可以通过岭迹图来分析变量的有效性。下面我们来讲讲岭回归模型,包括模型的原理、损失函数、求解公式、代码实现、以及如何通过岭迹图来确定alpha和判断变量的有效性。

一、岭回归模型

1.1. 岭回归模型

岭回归模型和线性回归模型一样,它的模型表达式为:

                                        

也就是:                         

但是呢,岭回归模型的损失函数在MSE的基础上,加入了二范正则项,如下:

其中,:样本个数             

 :系数个数       

 :y的预测值      

 :y的真实值      

                   :惩罚系数,用于调节系数W的惩罚力度

  越大时,惩罚力度越大, 岭回归求出的各个系数的绝对值就会越小。

岭回归与线性回归、Lasso回归是类似的,只是线性回归的损失函数没有正则项,而Lasso回归加入了一范正则项,岭回归则是加入二范正则项。

1.2. 岭回归的求解公式

 岭回归的模型求解公式如下:

  

它与线性回归的求解公式相似,只是部分需要在对角元素上加上

1.3. 岭回归的阈值

可以注意到,岭回归模型本身是不带阈值的,其实很容易理解,因为岭回归要对各个w进行惩罚,而阈值b是不需要惩罚的,所以也就没有阈值。

但现实中,我们的关系往往是需要阈值的,那怎么办呢,一般会先对数据中心化,这样数据就不需要阈值了,再用岭回归模型来建模。不过如果使用软件来构建岭回归,一般不用管这个,因为它会帮我们做这样的处理,并把中心化所做的仿射合并到岭回归模型中,最后也就得到了有阈值的线性模型。

二、岭迹图

我们知道,岭回归中  越大时,惩罚力度越大, 岭回归求出的各个系数的绝对值就会越小。那么,取什么值最好呢?一般通过岭迹图来确定。

2.1. 什么是岭迹图

岭迹图是指,以作为轴,各个作为轴,所画出来的图,如下:

岭迹图

如图所示,就可以看到,随着的增大,而逐步减小,这就是岭迹图了

2.2. 如何用岭迹图确定alpha

根据岭迹图确定alpha,一般紧扣如下两点思想:

1. 不要过大:过大往往不合理,所以所取的要令整体w都不要偏大。

2. 尽量小:在保障w不太大的前提下,尽量取更小的,因为过大会使损失函数过于倾向正则项,忽视误差项。

岭迹图往往是如下图所示,然后在喇叭口前取alpha的值:

岭回归-alpha的取值

如图所示,在喇叭口前,系数会随着alpha而迅速减小,而在喇叭口之后,系数对alpha并不敏感,所以在喇叭口前取alpha值,比较划算,也就是"保障w不要太大的同时,alpha尽量的小"。

2.2. 用岭迹图来分析变量

岭迹图除了用来确定,还可以用来分析变量,不过这是一个比较灵活的事情,并没有统一的方法,所以我们就随便举两个例子,大家借鉴着来理解就好了。

案例一:alpha为0时很w大,在alpha稍微变大时,w迅速趋0

图中的这种情况,一般可以认为这个变量没有什么用,先看alpha为0时,w很大,我们自然不想要过大的w,所以这个变量也就没什么用。再看alpha不为0时,w已经趋0,所以变量也没有贡献,那总的来说,这个变量不管什么情况下都没什么用。

案例二:w随着alpha的增大,在正负之间反复跳动

岭迹图分析变量-案例一

如图所示,w在正负之间反复跳动,说明变量对y一会是正贡献,一会是负贡献,非常不稳定,只要alpha稍微变动一下,正负贡献就相反了,而一个好的、稳定的变量,它对y的贡献应该也是稳定的,所以这种变量我们也不想要。

三、岭回归-代码例子

好了,说了这么多岭回归,是时候拎点数据出来玩一玩了。

3.1. 岭回归-数据

例如,我们的数据如下:

样本数据

事实上,上面的数据是我用 生成的,接下来构建一个岭回归模型,顺便看看它的岭迹图。

3.2. 岭回归-代码

在python的sklearn中,只需要调用linear_model.Ridge()函数就可以构建岭回归模型了,具体代码如下:

"""
本代码展示如何用sklearn实现岭回归
本代码来自《老饼讲解-机器学习》 www.bbblearn.com
"""
from sklearn import linear_model
import numpy as np
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]])  # 输入x
y = np.array([8,7,15,14,25,18])                          # 输出y
ridge = linear_model.Ridge(alpha=1,fit_intercept=True)   # 初始化岭回归模型
ridge.fit(x,y)                                           # 模型训练
print("当前alpha:"+str(ridge.alpha))                     # 模型系数和阈值
print("模型参数:"+str(ridge.coef_))                     # 模型的系数
print("模型阈值:"+str(ridge.intercept_))                # 模型的阈值

代码运行结果如下:

模型系数

这样我们就得到了我们的模型:

                                

可以看到,它与真实关系   是有所偏差的,这是我们对权重进行了惩罚。

3.3. 岭迹图-代码

好了,下面我们来说一下岭迹图怎么画,因为alpha的设定需要参考岭迹图,而且借助岭迹图,还可以对变量作一些简单的分析。岭迹图的具体实现代码如下:

"""
本代码展示如何画岭迹图
本代码来自《老饼讲解-机器学习》 www.bbblearn.com
"""
from sklearn import linear_model
import matplotlib.pyplot as plt
import numpy as np                                                      
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]])                 # 输入x
y = np.array([8,7,15,14,25,18])                                         # 输出y

# 画出岭迹图
alpha_list = np.linspace(0,5,20)                                        # 设置要尝试的alpha
w_arr      = np.empty((len(alpha_list),x.shape[1]))                     # 不同alpha下的权重参数
for i in range(len(alpha_list)):                                        # 逐个alpha训练模型
    ridge = linear_model.Ridge(alpha=alpha_list[i],fit_intercept=True)  # 初始化模型
    ridge.fit(x,y)                                                      # 训练模型
    w_arr[i] = ridge.coef_                                              # 记录当前的权重参数

for i in range(w_arr.shape[1]):                                         # 逐个参数画图
    plt.scatter(alpha_list, w_arr[:,i], facecolors='none'               # 画出当前参数的变化
     ,edgecolors= np.random.rand(1,1,3),marker='o',label='w'+str(i+1))  
plt.legend()                                                            # 显示图例 
plt.show()                                                              # 显示画布

运行结果如下:

岭迹图的结果

从图中可以看到,变量1与变量2的权重参数w1与w2随着alpha增大而减小,如果单从本案例的岭迹图来看,alpha设为0就可以了,因为系数在alpha=0时本身就不太大,同时也可以看到两个变量都不会因为alpha的改变而大幅度变动,说明两个变量都比较稳定。

总结

总的来说,岭回归模型,就是加入了二范正则项的线性回归,它可以通过设置alpha惩罚系数来预防系数过大。另外,需要了解岭迹图怎么看,一方面是用它来确定alpha,另一方面可以用它来简单分析一下变量。岭回归差不多就是这么多内容了。



图标 评论
添加评论