7. 使用矩阵计算岭回归系数#
7.1. 介绍#
前面的实验中,我们学习了岭回归和 LASSO 回归方法,并使用 scikit-learn 对两种方法进行了实战训练。本次挑战中,我们将尝试直接使用 Python 完成岭回归系数 \(w\) 计算,并与 scikit-learn 计算结果进行比较。
7.2. 知识点#
使用 Python 计算岭回归系数
使用 scikit-learn 计算岭回归系数
7.3. 使用 Python 计算岭回归系数#
前面的课程中,我们已经知道了岭回归的向量表达式:
以及该向量表达式的解析解:
挑战:参考公式 \((2)\) ,完成 Python 实现岭回归系数 \(w\) 的计算函数。
提示:使用
np.eye()
生成单位矩阵,并注意公式是矩阵乘法。
import numpy as np
def ridge_regression(X, Y, alpha):
"""
参数:
X -- 自变量数据矩阵
Y -- 因变量数据矩阵
alpha -- lamda 参数
返回:
W -- 岭回归系数
"""
### 代码开始 ### (≈ 3 行代码)
### 代码结束 ###
return W
参考答案 Exercise 7.1
import numpy as np
def ridge_regression(X, Y, alpha):
"""
参数:
X -- 自变量数据矩阵
Y -- 因变量数据矩阵
alpha -- lamda 参数
返回:
W -- 岭回归系数
"""
### 代码开始 ### (≈ 3 行代码)
XTX = X.T * X
reg = XTX + alpha * np.eye(np.shape(X)[1])
W = reg.I * (X.T * Y)
### 代码结束 ###
return W
下面,我们生成测试数据:
np.random.seed(10) # 设置随机数种子
X = np.matrix(np.random.randint(5, size=(10, 10)))
Y = np.matrix(np.random.randint(10, size=(10,1 )))
alpha = 0.5
运行测试
计算岭回归系数\(w\)的值:
ridge_regression(X, Y, alpha).T
期望输出
matrix([[ 1.42278923, 2.20583559, -0.6391644 , 0.64022529, -0.44014758,
1.66307858, -0.83879894, -0.25611354, -0.06951638, -2.56882017]])
7.4. 使用 scikit-learn 计算岭回归系数#
上面的挑战中,你已经学会了使用 Python 计算岭回归系数 \(w\)。下面,我们看一看结果是否与 scikit-learn 的计算结果一致。
挑战:使用 scikit-learn 计算岭回归系数 \(w\)。
提示:请向岭回归模型中增加
fit_intercept=False
参数取消截距。
from sklearn.linear_model import Ridge
def ridge_model(X, Y, alpha):
"""
参数:
X -- 自变量数据矩阵
Y -- 因变量数据矩阵
alpha -- lamda 参数
返回:
W -- 岭回归系数
"""
### 代码开始 ### (≈ 3 行代码)
### 代码结束 ###
return W
参考答案 Exercise 7.2
from sklearn.linear_model import Ridge
def ridge_model(X, Y, alpha):
"""
参数:
X -- 自变量数据矩阵
Y -- 因变量数据矩阵
alpha -- lamda 参数
返回:
W -- 岭回归系数
"""
### 代码开始 ### (≈ 3 行代码)
model = Ridge(alpha, fit_intercept=False)
model.fit(X,Y)
W = model.coef_
### 代码结束 ###
return W
运行测试
计算岭回归系数 \(w\) 的值:
ridge_model(X, Y, alpha)
期望输出
matrix([[ 1.42278923, 2.20583559, -0.6391644 , 0.64022529, -0.44014758,
1.66307858, -0.83879894, -0.25611354, -0.06951638, -2.56882017]])
我们可以看到,和预想的一致,两种方法计算出的 \(w\) 系数值是一模一样的。
○ 欢迎分享本文链接到你的社交账号、博客、论坛等。更多的外链会增加搜索引擎对本站收录的权重,从而让更多人看到这些内容。