波士顿房屋价格的拟合与预测
源代码
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib.font_manager as fm #导入matplotlib中的文字管理库
#from sklearn.model_selection import LeavePOut
from sklearn.linear_model import LinearRegression #最小二乘法求解线性回归包
from sklearn.model_selection import train_test_split #数据集划分包
from sklearn import metrics #导入评价模块
from sklearn.metrics import r2_score #导入计算r2_score的模块
1、导入数据并做相关转换
#导入数据并做相关转换
#从sklearn数据集库导入boston数据
from sklearn.datasets import load_boston
#将读取的房价存储在boston中
boston=load_boston()
print(boston.keys()) #打印boston包含内容
print(boston.feature_names) #打印data的变量名
bos=pd.DataFrame(boston.data) #将data转换为Dataframe格式
print(bos[5].head()) #data的第6列数据为RM
bos_target=pd.DataFrame(boston.target) #将target转换为Dataframe格式
print(bos_target.head())
#绘制房屋价格(MEDV)\每个房屋的房间数量(RM)散点图
x=bos.iloc[:,5:6] #选取data中的RM变量
y=bos_target
myfont=fm.FontProperties(fname='C:/windows/Fonts/msyh.ttc')
plt.scatter(x,y)
plt.xlabel(u'住宅平均房间数',fontproperties=myfont)
plt.ylabel(u'房屋价格',fontproperties=myfont)
plt.title(u'房屋价格(MEDV)&&每个房屋的房间数量(RM)的关系',fontproperties=myfont)
plt.show()
dict_keys([‘data’, ‘target’, ‘feature_names’, ‘DESCR’, ‘filename’])
[‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’
‘B’ ‘LSTAT’]
0 6.575
1 6.421
2 7.185
3 6.998
4 7.147
Name: 5, dtype: float64
0
0 24.0
1 21.6
2 34.7
3 33.4
4 36.2
2、数据集划分
#数据集划分
x=np.array(x.values) #把x,y转化为数组形式,便于计算
y=np.array(y.values)
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.25)
3、模型求解
#模型求解与预测
lr=LinearRegression() #设定回归算法
lr.fit(x_train,y_train) #使用训练集对参数求解
print("求解截距为:",lr.intercept_)
print("求解系数为:",lr.coef_)
y_hat=lr.predict(x_test) #对测试集的预测
print(y_hat[0:9]) #打印前10个预测值
求解截距为: [-35.87718694]
求解系数为: [[9.27602778]]
[[22.71020452]
[10.83688896]
[21.9031901 ]
[17.24662416]
[31.29053022]
[21.49504488]
[15.32648641]
[20.78079074]
[15.78101177]]
4、模型评价
#模型评价
#y_test与y_hat的可视化
plt.figure(figsize=(10,6)) #设置图片尺寸
t=np.arange(len(x_test))
plt.plot(t,y_test,'r',linewidth=2,label='y_test') #绘制y_test曲线
plt.plot(t,y_hat,'g',linewidth=2,label='y_train') #绘制y_hat曲线
plt.legend() #设置图例
plt.show()
#采用评估指标拟合优度R^2、MAE、MSE、RMSE对预测效果进行评价
print("r2:",lr.score(x_test,y_test)) #拟合度R2的输出方法之一
print("r2_score:",r2_score(x_test,y_hat)) #拟合度R2的输出方法之二
print("MAE",metrics.mean_absolute_error(y_test,y_hat)) #用sklearn计算MAE
print("MSE",metrics.mean_squared_error(y_test,y_hat)) #用sklearn计算MSE
print("RMSE",np.sqrt(metrics.mean_squared_error(y_test,y_hat))) #用sklearn计算RMSE
r2: 0.5979394309355369
r2_score: -523.5247359375425
MAE 4.498322761798314
MSE 37.96957411398843
RMSE 6.161945643543801