Python scikit-learn 做线性回归

2018-02-28 14:59:57 浏览数 (1)

线性回归是简单易用的机器学习算法,scikit-learn是python强大的机器学习库。

本篇文章利用线性回归算法预测波士顿的房价。波士顿房价数据集包含波士顿郊区住房价值的信息。

第一步:Python库导入

代码语言:javascript复制
%matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport sklearn

第二步:数据获取和理解

波士顿数据集是scikit-learn的内置数据集,可以直接拿来使用。

代码语言:javascript复制
from sklearn.datasets import load_bostonboston = load_boston()
代码语言:javascript复制
print(boston.keys())

dict_keys([‘data’, ‘target’, ‘feature_names’, ‘DESCR’])

代码语言:javascript复制
print(boston.data.shape)

(506, 13)

代码语言:javascript复制
print(boston.feature_names)

[‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’’B’ ‘LSTAT’]

结论:波士顿数据集506个样本,14个特征。

代码语言:javascript复制
print(boston.DESCR)
代码语言:javascript复制
bos = pd.DataFrame(boston.data)print(bos.head())
代码语言:javascript复制
        0     1     2    3      4      5     6       7    8      9     10    0.00632  18.0  2.31  0.0  0.538  6.575  65.2  4.0900  1.0  296.0  15.3   1  0.02731   0.0  7.07  0.0  0.469  6.421  78.9  4.9671  2.0  242.0  17.8   2  0.02729   0.0  7.07  0.0  0.469  7.185  61.1  4.9671  2.0  242.0  17.8   3  0.03237   0.0  2.18  0.0  0.458  6.998  45.8  6.0622  3.0  222.0  18.7   4  0.06905   0.0  2.18  0.0  0.458  7.147  54.2  6.0622  3.0  222.0  18.7          11    12  0  396.90  4.98  1  396.90  9.14  2  392.83  4.03  3  394.63  2.94  4  396.90  5.33  
代码语言:javascript复制
bos.columns = boston.feature_namesprint(bos.head())
代码语言:javascript复制
print(boston.target[:5])
代码语言:javascript复制
bos['PRICE'] = boston.target
代码语言:javascript复制
bos.head()

第三步:数据模型构建——线性回归

代码语言:javascript复制
from sklearn.linear_model import LinearRegressionX = bos.drop('PRICE', axis=1)lm = LinearRegression()lm
代码语言:javascript复制
lm.fit(X, bos.PRICE)
代码语言:javascript复制
print('线性回归算法w值:', lm.coef_)print('线性回归算法b值: ', lm.intercept_)
代码语言:javascript复制
import matplotlib.font_manager as fmmyfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')plt.scatter(bos.RM, bos.PRICE)plt.xlabel(u'住宅平均房间数', fontproperties=myfont)plt.ylabel(u'房屋价格', fontproperties=myfont)plt.title(u'RM与PRICE的关系', fontproperties=myfont)plt.show()

第四步:数据模型应用——预测房价

代码语言:javascript复制
lm.predict(X)[0:5]

array([ 30.00821269, 25.0298606 , 30.5702317 , 28.60814055, 27.94288232])

代码语言:javascript复制
mse = np.mean((bos.PRICE - lm.predict(X)) ** 2)print(mse)
代码语言:javascript复制
21.897779217687486

总结

1 使用.DESCR探索波士顿数据集,业务目标是预测波士顿郊区住房的房价;

2 使用scikit-learn针对整个数据集拟合线性回归模型,并计算均方误差。

思考环节

1 对数据集分割成训练数据集和测试数据集

2 训练数据集训练线性回归模型,利用线性回归模型对测试数据集进行预测

3 计算训练模型的MSE和测试数据集预测结果的MSE

4 绘制测试数据集的残差图

0 人点赞