1 线性回归模型的原理与 scikit-learn 实现

设有数据集 《1 线性回归模型的原理与 scikit-learn 实现》,对于每一个样本 《1 线性回归模型的原理与 scikit-learn 实现》,令

《1 线性回归模型的原理与 scikit-learn 实现》

《1 线性回归模型的原理与 scikit-learn 实现》 为数据集 《1 线性回归模型的原理与 scikit-learn 实现》设计矩阵。其中,《1 线性回归模型的原理与 scikit-learn 实现》《1 线性回归模型的原理与 scikit-learn 实现》 对应的标签。

注意

  • 对于回归任务,《1 线性回归模型的原理与 scikit-learn 实现》
  • 对于分类任务,《1 线性回归模型的原理与 scikit-learn 实现》,其中 《1 线性回归模型的原理与 scikit-learn 实现》 为该数据集拥有的类别个数。

线性回归模型

我们先考虑一个样本 《1 线性回归模型的原理与 scikit-learn 实现》,且 《1 线性回归模型的原理与 scikit-learn 实现》,有

《1 线性回归模型的原理与 scikit-learn 实现》

再考虑所有样本,有

《1 线性回归模型的原理与 scikit-learn 实现》

下面我们来看看如何更新参数的?(最小化 《1 线性回归模型的原理与 scikit-learn 实现》

1. 梯度下降

我们先求下梯度:

《1 线性回归模型的原理与 scikit-learn 实现》

再更新参数:

《1 线性回归模型的原理与 scikit-learn 实现》

其中,《1 线性回归模型的原理与 scikit-learn 实现》 被称为学习率步长

scikit-learn 的实现方式不是梯度下降法,而是最小二乘法。

2 最小二乘法

《1 线性回归模型的原理与 scikit-learn 实现》《1 线性回归模型的原理与 scikit-learn 实现》,则

《1 线性回归模型的原理与 scikit-learn 实现》

《1 线性回归模型的原理与 scikit-learn 实现》 可得最小二乘解

《1 线性回归模型的原理与 scikit-learn 实现》

sklearn 实现

本文,利用 Kaggle 上数据集 USA_Housing 做线性回归任务来预测房价。

import pandas as pd
import numpy as np
name = '../dataset/USA_Housing.csv'
dataset = pd.read_csv(name)

train = dataset.iloc[:3000,:]
test = dataset.iloc[3000:,:]

print(train.shape)
print(test.shape)
(3000, 7)
(2000, 7)

查看有无缺失值:

print(np.unique(train.isnull().any()))
print(np.unique(test.isnull().any()))
[False]
[False]
dataset.columns  # 查看所有特征名称
Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
       'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'],
      dtype='object')

我们不考虑 'Address' 特征。通过特征 'Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms', 'Avg. Area Number of Bedrooms', 'Area Population' 来预测 'Price'

features_column = [
    name for name in dataset.columns if name not in ['Price', 'Address']
]
label_column = ['Price']

x_train = train[features_column]
y_train = train[label_column]
x_test = test[features_column]
y_test = test[label_column]

训练线性模型

from sklearn import linear_model

regr = linear_model.LinearRegression()
regr.fit(x_train,y_train) 
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
         normalize=False)

预测:

pred_test = regr.predict(x_test)
print('预测:\n', pred_test)
预测:
 [[1448272.69412661]
 [1301968.70364148]
 [1355317.66349181]
 ...
 [1026886.81679043]
 [1261208.34730572]
 [1301748.28071761]]

计算损失:

from sklearn.metrics import mean_squared_error,r2_score
print('mean square error:', mean_squared_error(y_test,pred_test))
mean square error: 10305125663.199516

计算 r2_score:

print(r2_score(y_test,pred_test))
0.9174114106593986

关于如何使用梯度下降法实现,具体参考:线性回归模型的 MXNet 与 TensorFlow 实现

    原文作者:水之心
    原文地址: https://www.jianshu.com/p/a65c3965e290
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞