执行简单的岭回归

问题描述 投票:0回答:1

我试图找到最小化 w \in \mathbb{R}^n :

\min{w} |Aw-y|^2 + \lambda |w|^2

对于 A \in \mathbb{R}^{m imes n} 和 y \in \mathbb{R}^{m}

根据维基百科,显式解决方案由以下方式给出:

w = (X^TX + \lam 1)^{-1} X^T y

所以我用Python实现了这个:

w = np.linalg.solve(X.T@X+lam*np.eye(n), X.T@y)

但这在某种程度上给了我一个与专业实施截然不同的w:

from sklearn.linear_model import Ridge
clf = Ridge(alpha=lam)
clf.fit(X,y)
w = clf.coef_

有人可以快速发现我做错了什么吗,谢谢!

scikit-learn regression linear-regression
1个回答
0
投票

请注意,sklearn Ridge 类默认将 fit_intercept 设置为 True,这意味着它正在尝试拟合类型的模型:

w_1x_1 + ... + w_nx_n + b

如果您提供的数学解决方案在计算中缺少额外的 b 项,因此您将得到不同的结果。

为了修复它,有两种选择:

  1. 拟合模型时将 fit_intercept 设置为 false,即:
clf = Ridge(alpha=alpha, fit_intercept=False)

2.在特征矩阵中添加额外的 1 列,即:

X = np.concatenate([X, np.ones((m, 1))], axis=1)

尝试每一个都会导致数学公式和 sklearn 实现的岭回归得到相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.