1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【Python】Sklearn线性回归模型预测波士顿房价并绘图

【Python】Sklearn线性回归模型预测波士顿房价并绘图

时间:2021-01-21 06:31:51

相关推荐

【Python】Sklearn线性回归模型预测波士顿房价并绘图

波士顿房价

这是 sklearn.datasets 里的一种 Toy Dataset ,包含503个美国波士顿房价的观测值,是内置的小数据集,也是研究回归算法的优秀数据集。

Python编程实现

import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport pandas as pdfrom sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn import metricsfrom sklearn.metrics import r2_score# 从读取的房价数据存储在boston变量中boston = load_boston()# 打印boston包含的内容print(boston.keys())# 打印data的变量名print(boston.feature_names)# 将data转换为DataFrame格式以方便显示bos = pd.DataFrame(boston.data)# data的第6列数据为RMprint(bos[5].head())# 将data转换为DataFrame格式以方便显示bos_target = pd.DataFrame(boston.target)print(bos_target.head())# 选取data中的RM变量x = bos.iloc[:, 5:6]# 设定target为yy = bos_target# 定义自定义字体,文件名是系统中文字体myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')plt.scatter(x, y)# x轴标签设定文字为中文msyh格式plt.xlabel(u'住宅平均房间数', fontproperties=myfont)# y轴标签设定文字为中文msyh格式plt.ylabel(u'房地产价格', fontproperties=myfont)# 标题plt.title(u'RM与MEDV的关系', fontproperties=myfont)plt.show()# 把x、y转化为数组形式,便于计算x = np.array(x.values)y = np.array(y.values)# 以25%的数据构建测试样本,剩余作为训练样本x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)# 设定回归算法lr = LinearRegression()# 使用训练数据进行参数求解lr.fit(x_train, y_train)# LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)print('求解系数为:', lr.intercept_)print('求解系数为:', lr.coef_)# 对测试集的预测y_hat = lr.predict(x_test)# 打印前10个预测值y_hat[0:9]# y_test与y_hat的可视化# 设置图片尺寸plt.figure(figsize=(10, 6))# 创建t变量t = np.arange(len(x_test))# 绘制y_test曲线plt.plot(t, y_test, 'r', linewidth=2, label='y_test')# 绘制y_hat曲线plt.plot(t, y_hat, 'g', linewidth=2, label='y_train')# 设置图例plt.legend()plt.show()# 拟合优度R2的输出方法1print("r2:", lr.score(x_test, y_test))# 拟合优度R2的输出方法2print("r2_score:", r2_score(x_test, y_hat))# 用Scikit_learn计算MAEprint("MAE:", metrics.mean_absolute_error(y_test, y_hat))# 用Scikit_learn计算MSEprint("MSE:", metrics.mean_squared_error(y_test, y_hat))# 用Scikit_learn计算RMSEprint("RMSE:", np.sqrt(metrics.mean_squared_error(y_test, y_hat)))

绘图

输出

dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO''B' 'LSTAT']0 6.5751 6.4212 7.1853 6.9984 7.147Name: 5, dtype: float6400 24.01 21.62 34.73 33.44 36.2(379, 1) (127, 1) (379, 1) (127, 1)求解系数为: [-35.59828349]求解系数为: [[9.23195448]]r2: 0.3944946886803493r2_score: -660.1580577546584MAE: 4.733243417768924MSE: 48.43066789457248RMSE: 6.959214603284805

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。