我正在使用 sklearn 尝试一些正则化线性回归方法,并注意到 Ridge 不接受热启动。我发现这很奇怪,因为许多其他方法都可以接受,例如 Lasso、LogisticRegression 等。
这有更深层次的原因吗?Ridge 不会从热启动中受益吗?
我正在使用 sklearn 尝试一些正则化线性回归方法,并注意到 Ridge 不接受热启动。我发现这很奇怪,因为许多其他方法都可以接受,例如 Lasso、LogisticRegression 等。
这有更深层次的原因吗?Ridge 不会从热启动中受益吗?
岭回归可以作为线性方程组一次性求解:
所以岭回归通常用线性方程求解器来求解,就像线性回归一样。
例如 sklearn 使用矩阵的奇异值分解:
将该系统重新表达为
有关此等式的推导,请参阅通过谱分解使用岭回归证明收缩系数。
请注意,这个等式比看起来要好得多。这矩阵是对角的,所以反转它只是取条目的倒数。然后也是对角线,矩阵乘积只是对角线项的乘积。
这是sklearn 的源代码:
def _solve_svd(X, y, alpha):
U, s, Vt = linalg.svd(X, full_matrices=False)
idx = s > 1e-15 # same default value as scipy.linalg.pinv
s_nnz = s[idx][:, np.newaxis]
UTy = np.dot(U.T, y)
d = np.zeros((s.size, alpha.size), dtype=X.dtype)
d[idx] = s_nnz / (s_nnz ** 2 + alpha)
d_UT_y = d * UTy
return np.dot(Vt.T, d_UT_y).T
除了处理零奇异值的少量体操外,此代码与上面的等式完全一致。
另一方面,LASSO 在线性代数运算方面没有简单的表达。对于 LASSO,我们需要某种迭代求解器,因此在之前的解中重新开始迭代的概念是有意义的。