美文网首页
线性回归、岭回归

线性回归、岭回归

作者: 囧书 | 来源:发表于2018-11-27 19:53 被阅读26次

    sklearn内置的波士顿房屋数据集做一下房价预测,练习线性回归的API。

    • 正规方程法
    • 梯度下降法
    • 岭回归

    获取数据集

    加载sklearnboston数据集,返回训练集、测试集、以及目标值标准化模型。

    线性回归求目标值是对各特征加和,因此需要对数据做标准化处理。

    def preprocess():
        # 获取数据
        boston = load_boston()
        print("feature_names:")
        print(boston.feature_names)
        print("data:")
        print(boston.data[:5])
        print("target:")
        print(boston.target[:5])
    
        # 划分训练集测试集
        x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.25)
    
        # 线性回归需要对特征数据和目标数据进行标准化处理
        # 特征数据标准化
        std_x = StandardScaler()
        std_x.fit(x_train)
        x_train = std_x.transform(x_train)
        x_test = std_x.transform(x_test)
    
        # 目标数据标准化
        # StandardScaler的transform要求传入二维数据,故此处reshape
        y_train = y_train.reshape(-1, 1)
    
        std_y = StandardScaler()
        std_y.fit(y_train)
        y_train = std_y.transform(y_train)
    
        return x_train, x_test, y_train, y_test, std_y
    

    输出:

    ****************************** 数据集 ******************************
    feature_names:
    ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
     'B' 'LSTAT']
    data:
    [[6.3200e-03 1.8000e+01 2.3100e+00 0.0000e+00 5.3800e-01 6.5750e+00
      6.5200e+01 4.0900e+00 1.0000e+00 2.9600e+02 1.5300e+01 3.9690e+02
      4.9800e+00]
     [2.7310e-02 0.0000e+00 7.0700e+00 0.0000e+00 4.6900e-01 6.4210e+00
      7.8900e+01 4.9671e+00 2.0000e+00 2.4200e+02 1.7800e+01 3.9690e+02
      9.1400e+00]
     [2.7290e-02 0.0000e+00 7.0700e+00 0.0000e+00 4.6900e-01 7.1850e+00
      6.1100e+01 4.9671e+00 2.0000e+00 2.4200e+02 1.7800e+01 3.9283e+02
      4.0300e+00]
     [3.2370e-02 0.0000e+00 2.1800e+00 0.0000e+00 4.5800e-01 6.9980e+00
      4.5800e+01 6.0622e+00 3.0000e+00 2.2200e+02 1.8700e+01 3.9463e+02
      2.9400e+00]
     [6.9050e-02 0.0000e+00 2.1800e+00 0.0000e+00 4.5800e-01 7.1470e+00
      5.4200e+01 6.0622e+00 3.0000e+00 2.2200e+02 1.8700e+01 3.9690e+02
      5.3300e+00]]
    target:
    [24.  21.6 34.7 33.4 36.2]
    

    建模

    正规方程法:

    model = LinearRegression()
    model.fit(x_train, y_train)
    

    梯度下降法:

    # max_iter: 最大迭代次数
    model = SGDRegressor(max_iter=10)
    model.fit(x_train, y_train.ravel())
    

    岭回归:

    # alpha: 正则化力度
    model = Ridge(alpha=1.0)
    model.fit(x_train, y_train.ravel())
    

    预测

    def predict(model, x_test, y_test, std_y):
        # 回归系数
        print("回归系数:")
        print(model.coef_)
    
        # 预测结果
        print("真实值:")
        print(y_test[:10])
        y_predict = model.predict(x_test)
        y_predict = std_y.inverse_transform(y_predict)
        print("预测值:")
        print(np.around(y_predict[:10].flatten(), decimals=1))
    
        print("均方误差:")
        print(mean_squared_error(y_test, y_predict))
    

    输出:

    ****************************** 线性回归:正规方程法 ******************************
    回归系数:
    [[-0.06186526  0.13107583  0.04516768  0.05849482 -0.18127294  0.28983444
      -0.0302648  -0.32734363  0.28317058 -0.25426876 -0.24581878  0.0966923
      -0.41279297]]
    真实值:
    [34.9 20.6 24.1 37.2 12.8 25.  46.  14.5 21.5 22.9]
    预测值:
    [30.3 16.4 25.7 32.7 12.8 22.3 39.9 12.9 22.  20. ]
    均方误差:
    25.39621815792282
    ****************************** 线性回归:梯度下降法 ******************************
    回归系数:
    [-0.04176259  0.08606617 -0.01498182  0.06544983 -0.10239262  0.31993282
     -0.04230784 -0.25439308  0.1088705  -0.07597648 -0.22770765  0.09737765
     -0.37915806]
    真实值:
    [34.9 20.6 24.1 37.2 12.8 25.  46.  14.5 21.5 22.9]
    预测值:
    [31.  17.5 25.8 31.8 13.3 22.4 39.2 13.5 23.2 21.9]
    均方误差:
    25.956482620192624
    ****************************** 岭回归 ******************************
    回归系数:
    [-0.06091708  0.12885114  0.04121933  0.05930487 -0.17777864  0.2910496
     -0.03091966 -0.32345932  0.27206837 -0.24330282 -0.24454616  0.0965778
     -0.41066292]
    真实值:
    [34.9 20.6 24.1 37.2 12.8 25.  46.  14.5 21.5 22.9]
    预测值:
    [30.4 16.5 25.7 32.7 12.9 22.3 39.9 12.9 22.  20.1]
    均方误差:
    25.376589190071144
    

    正规方程法适用于小数据集,100万条样本以下。
    对于大数据集则建议使用梯度下降。
    而岭回归加入了正则化,稳定性更好。

    源码

    Github: LinearRegression

    相关文章

      网友评论

          本文标题:线性回归、岭回归

          本文链接:https://www.haomeiwen.com/subject/xrynqqtx.html