8. 使用矩阵计算岭回归系数#

8.1. 介绍#

前面的实验中,我们学习了岭回归和 LASSO 回归方法,并使用 scikit-learn 对两种方法进行了实战训练。本次挑战中,我们将尝试直接使用 Python 完成岭回归系数 \(w\) 计算,并与 scikit-learn 计算结果进行比较。

8.2. 知识点#

  • 使用 Python 计算岭回归系数

  • 使用 scikit-learn 计算岭回归系数

8.3. 使用 Python 计算岭回归系数#

前面的课程中,我们已经知道了岭回归的向量表达式:

\[ F_{R i d g e}=\|y-X w\|_{2}^{2}+\lambda\|w\|_{2}^{2} \tag{1} \]

以及该向量表达式的解析解:

\[\hat w_{Ridge} = (X^TX + \lambda I)^{-1} X^TY \tag{2}\]

Exercise 8.1

挑战:参考公式 \((2)\) ,完成 Python 实现岭回归系数 \(w\) 的计算函数。

提示:使用 np.eye() 生成单位矩阵,并注意公式是矩阵乘法。

import numpy as np

def ridge_regression(X, Y, alpha):
    """
    参数:
    X -- 自变量数据矩阵
    Y -- 因变量数据矩阵
    alpha -- lamda 参数

    返回:
    W -- 岭回归系数
    """
    
    ### 代码开始 ### (≈ 3 行代码)

    ### 代码结束 ###
    
    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]])

8.4. 使用 scikit-learn 计算岭回归系数#

上面的挑战中,你已经学会了使用 Python 计算岭回归系数 \(w\)。下面,我们看一看结果是否与 scikit-learn 的计算结果一致。

Exercise 8.2

挑战:使用 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

运行测试

计算岭回归系数 \(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\) 系数值是一模一样的。