岭回归的模型可以写作
与一般的线性回归相比, 岭回归加入了回归项系数
的二范数, 其中
,
这样做是为了防止线性回归过程发生的过拟合现象. 直观点看, 其将的分量限制在了一个以圆点为中心的圆内. 而与Lasso回归相比, 该模型更具有稳定性.
岭回归的模型求解可以通过直接求梯度获得, 也就是
由此可求得:
如此便可得其代码(此代码只是为了更好的了解其求解过程)
import numpy as np
# 自动生成求解数据
from sklearn.datasets import make_regression
def ridge_recurrence(x_train, y_train, lam):
mattemp = np.dot(x_train.T, x_train) + lam * np.eye(x_train.shape[1])
# 判断矩阵是否可逆
if np.linalg.det(mattemp) == 0:
print("This matrix can not inverse!")
return
return np.dot(np.linalg.inv(mattemp), np.dot(x_train.T, y_train))
if __name__ == '__main__':
X, y = make_regression(200, 5, noise=1)
omega = ridge_recurrence(X, y, 1)
print(omega)
同样的可以通过调用sklearn.liner_model中的Ridge对其进行实现, 具体代码如下
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
if __name__ == '__main__':
X, y = make_regression(200, 5, noise=1)
model = Ridge(alpha=1)
model.fit(X, y)
print(model.coef_)
比较两个方式的结果有

如此完成对岭回归的整理. 本文参考b站岭回归的讲解
岭回归与Lasso回归算法——Python统计与数据分析实战系列(二)