sklearn岭回归

文章目录

基本原理

最小二乘法的判定条件是

min ⁡ w ∥ X w − y ∥ 2 2 \min_w\Vert Xw-y\Vert_2^2 wmin∥Xw−y∥22

其中, min ⁡ w F ( w ) \min_w F(w) minwF(w)表示 F ( w ) F(w) F(w)最小时的 w w w; w w w是拟合参数, x , y x,y x,y是变量。

对于线性问题,可通过对 w w w求导,得到 F ( w ) F(w) F(w)极值处的 w w w,具体表达式为

w = ( X T X ) − 1 X T y w=(X^TX)^{-1}X^Ty w=(XTX)−1XTy

但这里面有一个问题,若 X X X各分量的实际值相去甚远,会导致不同分量的权重不同,尽管 X T X X^TX XTX满秩,却存在一些接近0的特征值,使得问题陷入病态,引入较大误差。

这时可以引入一个参数 α \alpha α,令

min ⁡ w ∥ X w − y ∥ 2 2 + α ∥ w ∥ 2 2 \min_w\Vert Xw-y\Vert_2^2+\alpha\Vert w\Vert^2_2 wmin∥Xw−y∥22+α∥w∥22

从其表达式可以看出,岭回归中,要求拟合参数 w w w的值尽可能地靠近0,这种方案可以不局限于线性拟合,也可以应用在非线性拟合中。例如,对于 y = ∣ sin ⁡ x ∣ y=\vert\sin x\vert y=∣sinx∣这样的函数,其最小值显然在 x = 0 x=0 x=0处,但若没有一个 α \alpha α这一项作为惩罚因子,那么关于 y = ∣ sin ⁡ x ∣ y=\vert\sin x\vert y=∣sinx∣的优化注定是发散的,因为 sin ⁡ x \sin x sinx是周期函数。

sklearn实现

下面构造一个病态的优化问题,令 X X X为 10 × 10 10\times10 10×10的矩阵,且 x i j = 1 i + j + 1 x_{ij}=\frac{1}{i+j+1} xij=i+j+11。 Y Y Y为所有元素都为1的向量。由于 X X X并不满秩,所以这个线性优化问题要么无解,要么多解,是普通最小二乘法无法解决的问题

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model as lm
X = 1.0 / (np.arange(1, 11) + np.arange(0, 10).reshape(-1,1))
y = np.ones(10)

lso = lm.LinearRegression()
lso.fit(X,y)
print(lso.coef_)
# [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]

但在岭回归中,加入了惩罚因子,使得所有参数在拟合过程中都尽可能地小,具体实现如下

python 复制代码
alphas = np.logspace(-10, -2, 200)
coefs = []
for a in alphas:
    ridge = lm.Ridge(alpha=a, fit_intercept=False)
    ridge.fit(X, y)
    coefs.append(ridge.coef_)

ax = plt.subplot()

ax.plot(alphas, coefs)
ax.set_xscale("log")
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel("alpha")
plt.ylabel("weights")
plt.show()

结果如图所示

随着 α \alpha α逐渐变小,拟合参数之间的差异也逐渐增大,当 α = 0.01 \alpha=0.01 α=0.01时,拟合参数为

python 复制代码
>>> print(coefs[-1])
[-1.15365551 -0.06380733  0.82265094  1.33384561  1.62104261  
1.77805326 1.85752347  1.88963634  1.89230434  1.87650476]

而当 α = 0.1 \alpha=0.1 α=0.1时,其拟合参数为

python 复制代码
>>> print(coefs[0])
[2.64506216  -27.60371349    7.99290855  133.67544639   18.04324721
-123.85503932 -175.62007046 -113.78633324   45.15379398  274.0230348 ]
相关推荐
Terry Cao 漕河泾37 分钟前
SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World
人工智能·计算机视觉·3d·目标跟踪
多猫家庭42 分钟前
宠物毛发对人体有什么危害?宠物空气净化器小米、希喂、352对比实测
人工智能·宠物
AI完全体1 小时前
AI小项目4-用Pytorch从头实现Transformer(详细注解)
人工智能·pytorch·深度学习·机器学习·语言模型·transformer·注意力机制
AI知识分享官1 小时前
智能绘画Midjourney AIGC在设计领域中的应用
人工智能·深度学习·语言模型·chatgpt·aigc·midjourney·llama
憨憨小白1 小时前
函数的高级应用
开发语言·python·青少年编程·少儿编程
程序小旭1 小时前
Objects as Points基于中心点的目标检测方法CenterNet—CVPR2019
人工智能·目标检测·计算机视觉
阿利同学1 小时前
yolov8多任务模型-目标检测+车道线检测+可行驶区域检测-yolo多检测头代码+教程
人工智能·yolo·目标检测·计算机视觉·联系 qq1309399183·yolo多任务检测·多检测头检测
CV-King1 小时前
计算机视觉硬件知识点整理(三):镜头
图像处理·人工智能·python·opencv·计算机视觉
惟长堤一痕1 小时前
医学数据分析实训 项目三 关联规则分析作业--在线购物车分析--痹症方剂用药规律分析
python·数据分析
Alluxio官方1 小时前
Alluxio Enterprise AI on K8s FIO 测试教程
人工智能·机器学习