• Python 实现Ridge Regression教程


    一般多重线性回归,使用p个预测变量和一个响应变量拟合模型,形式如下:

    Y = β 0 + β 1 X 1 + β 2 X 2 + … + β p X p + ε {β_0 + β_1X_1 + β_2X_2 + … + β_pX_p + ε} β0+β1X1+β2X2++βpXp+ε

    参数解释如下:

    • Y: 响应变量
    • X j {X_j} Xj: 第j个预测变量
    • β j {β_j} βj: 在保持所有其他预测不变的情况下, X j {X_j} Xj增加一个单位对Y的平均影响
    • ε: 误差项

    最小二乘法选择 β 0 、 β 1 、 B 2 、 … 、 β p {β_0、β_1、B_2、…、β_p} β0β1B2βp的值,以最小化残差平方和(RSS):

    RSS = Σ ( y i – y ^ i ) 2 {Σ(y_i – ŷ_i)^2} Σ(yiy^i)2

    解释参数如下:

    • Σ: 求和符号
    • y i {y_i} yi: 第i个观测记录的响应值
    • y ^ i {ŷ_i} y^i: 使用多重线性回归模型基于第i个观测记录的预测值

    但是当预测变量高度相关,则会产生多重共线问题,可能导致模型系数估计不可靠、方差较高。

    在不删除预测变量的情况下,解决这类问题的一种方法是使用岭回归,它试图使得下面误差最小:

    RSS + λ Σ β j 2 {λΣβ_j^2} λΣβj2

    当j范围从1到p,并且λ ≥ 0; 其中第二项被称为收缩惩罚。当λ = 0时惩罚项没有影响,岭回归与最小二乘法效果一样。然而当λ 变大,收缩惩罚影响加大和岭回归系数估计接近零,使得模型中影响最小的预测变量会以最快的速度趋近于零。

    示例

    首先导入执行岭回归需要的包:

    import pandas as pd
    from numpy import arange
    from sklearn.linear_model import Ridge
    from sklearn.linear_model import RidgeCV
    from sklearn.model_selection import RepeatedKFold
    
    • 1
    • 2
    • 3
    • 4
    • 5

    加载数据

    我们示例数据mtcars,包括33个不同品牌汽车信息,我们使用下面预测变量,hp作为响应变量:

    • mpg
    • wt
    • drat
    • qsec

    下面代码加载数据:

    
    # read in data
    data_full = pd.read_csv("data/mtcars.csv")
    
    # select subset of data
    data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
    
    # view first six rows of data
    data[0:6]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    拟合模型

    下面使用sklearn包中 RidgeCV() 拟合岭回归模型,并使用 RepeatedKFold() 执行k折交叉验证,发现最佳惩罚项中的λ值。

    示例中使用k=10,重复交叉验证3次。RidgeCV() 中定义λ值范围:0~1,每次增加0.01:

    # define predictor and response variables
    X = data[["mpg", "wt", "drat", "qsec"]]
    y = data["hp"]
    
    # define cross-validation method to evaluate model
    cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
    
    # define model
    model = RidgeCV(alphas=arange(0, 1, 0.01), cv=cv, scoring='neg_mean_absolute_error')
    
    # fit model
    model.fit(X, y)
    
    # display lambda that produced the lowest test MSE
    print(model.alpha_)
    
    ## 输出0.99
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试MSE的最小化值是0.99

    使用模型进行预测

    最后使用上面的模型进行预测,预测数据如下:

    • mpg: 24
    • wt: 2.5
    • drat: 3.5
    • qsec: 18.5

    下面代码使用岭回归模型预测hp的值:

    # define new observation
    new = [24, 2.5, 3.5, 18.5]
    
    # predict hp value using ridge regression model
    model.predict([new])
    
    # array([104.16398018])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    根据输入值,模型预测这辆车的HP值为104.16398018。

  • 相关阅读:
    关于pycharm怎么设置中文、背景图、快捷键的一些小Tips
    nodejs--开发自己的项目——1--路由模块、路由处理函数模块、服务器的创建
    云服务--漏洞修复
    Linux学习-46-LVM逻辑卷管理机制
    利尔达5G模组NE16U-CN通过华为OpenLab基于R16标准的认证测试
    微服务(六)——Ribbon负载均衡服务调用
    51单片机应用从零开始(四)
    Git常用命令介绍
    前端面试题 10 个「有用」JavaScript 代码片段
    【已解决】springboot整合swagger2文档
  • 原文地址:https://blog.csdn.net/neweastsun/article/details/126522926