机器学习2:单变量线性回归(波士顿房屋价格的拟合与预测)

机器学习2:单变量线性回归(波士顿房屋价格的拟合与预测)

源代码

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

发布了26 篇原创文章 · 获赞 39 · 访问量 1817

猜你喜欢

转载自blog.csdn.net/matafeiyanll/article/details/103115601