在机器学习线性回归原理介绍和功能实现 中介绍了线性回归的原理和编码实现,本文用代码展示一下用机器学习框架sklearn实现线性回归。
导入库文件,参考注释
#使用sklearn估计器 构建 >线性回归模型
#加载所需函数
import numpy as np
import pandas as pd
#从sklearn框架导入线性回归模型
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
#模型评价相关的库
from sklearn.metrics import explained_variance_score,mean_absolute_error,mean_squared_error,median_absolute_error,r2_score
#导入绘图库
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.sans-serif']='SimHei'
#加载boston数据 ,sklearn库datasets里自带的函数数据集
boston=load_boston()
x=boston['data']
y=boston['target']
names=boston['feature_names']
####(506, 13) (506,)表示波士顿房价预测的数据集有13个特征,506个样本
print(x.shape, y.shape)
####查看某一列的数据与样本标签的关系
# X[行,列] X[:,[2,3,4]]
def drawScatter(x, y, xlabel):
plt.scatter(x, y)
plt.xlabel(xlabel)
plt.ylabel('房价')
plt.title(f'{xlabel}与房价的散点图')
plt.grid()
plt.show()
drawScatter(x[:, 5], y, "房间数")
drawScatter(x[:, 4], y, "环保指标")
#将数据划分为训练集、测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=125)
#建立线性回归模型
lr=LinearRegression().fit(x_train,y_train)
print('建立的LinarRegression 模型为: \n',lr)
# 训练的本质就是获取权重(13项w)与偏置(b)
print(lr.coef_,lr.intercept_)
##输出权重和偏置信息
# [-1.14077285e-01 4.87165173e-02 -1.20875379e-02 1.59355488e+00
# -1.89792822e+01 3.47313008e+00 3.03276293e-03 -1.60090878e+00
# 2.90563127e-01 -1.27238844e-02 -9.76743908e-01 8.48566379e-03
# -4.87508387e-01] 40.44599864104647
# 训练完毕获取权重和偏置,然后采用测试集的数据获取预测值
y_predict = lr.predict(x_test) # y_predict 就是测试集的预测值
print("预测前20个结果为:",'\n',y_predict[:20])
# #预测前20个结果为:
# [21.16289134 19.67630366 22.02458756 24.61877465 14.44016461 23.32107187
# 16.64386997 14.97085403 33.58043891 17.49079058 25.50429987 36.60653092
# 25.95062329 28.49744469 19.35133847 20.17145783 25.97572083 18.26842082
# 16.52840639 17.08939063]
#回归结果可视化
fig=plt.figure(figsize=(10,6))
plt.plot(range(y_test.shape[0]),y_test,color="blue",linewidth=1.5,linestyle="-")
plt.plot(range(y_test.shape[0]),y_predict,color="red",linewidth=1.5,linestyle="-.")
plt.xlim((0,102))
plt.ylim((0,55))
plt.legend(['真实值','预测值'])
plt.show()
#Boston数据线性回归模型的评价,直接调用sklearn框架中的模型评价相关的API函数,直接用现成的,避免手动编码实现。但前提是需要对相关的库函数有所了解。
# 平均绝对误差为: 3.3775517360082032
print("平均绝对误差为:",mean_absolute_error(y_test,y_predict))
# 均方误差为: 31.150517390315635
print("均方误差为:",mean_squared_error(y_test,y_predict))
# 中值绝对误差为: 1.7788996425420756
print("中值绝对误差为:",median_absolute_error(y_test,y_predict))
# 可解释方差值为: 0.7105475650096659
print("可解释方差值为:",explained_variance_score(y_test,y_predict))
# R2为: 0.7068961686076838
print("R2为:",r2_score(y_test,y_predict))
mae = mean_absolute_error(y_test,y_predict)
print('绝对值平均误差为', mae)# 绝对值平均误差为 3.3775517360082032
# 显示模型的正确率 # 模型预测正确率 0.7068961686076838
print('模型预测正确率',lr.score(x_test,y_test))
回归结果可视化参考下图,
总结
本文通过代码的方式展示了一下使用机器学习框架sklearn 实现线性回归模型的方法和过程,重点不在代码,而是sklearn框架提供的API函数。我们以前通过手动编码完成的复杂功能其实在sklearn中都有已经封装好的接口,只需要学会使用即可。另外在深度学习框架Tensorflow(2.0)的Keras 针对线性回归问题也有封装好的API函数,感兴趣的可以去了解一下。~感谢阅读。