文章目录
任务 6.4 构建并评价回归模型
任务描述
回归算法的实现过程与分类算法相似,原理相差不大.分类和回归的主要区别在于,分类算法的标签是离散的,但是回归算法的标签是连续的.回归算法在交通,物流,社交,网络和金融领域都能发挥巨大作用.
任务描述
(1) 使用sklearn 估计器构建线性回归(Linear Regression)模型
(2) 根据回归模型评价指标评价线性回归模型
6.4.1 使用sklearn估计器构建线性回归模型
从19世纪初高斯提出最小二乘估计算起,回归分析的历史已有200多年。从经典的回归分析方法到近代的回归分析方法。按照研究方法划分,回归分析研究的范围大致下图所示
代码6-24 使用sklearn 估计器构建线性回归模型
%%html
<img style="float: left;" src="./image/6-24.png" width=300 height=400>
%%html
<img style="float: left;" src="./image/6-24-2.png" width=700 height=400>
%%html
<img style="float: left;" src="./image/6-24-3.png" width=700 height=400>
# 加载所需函数
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
# 加载boston数据
boston = load_boston()
X = boston['data']
y = boston['target']
names = boston['feature_names']
# 将数据划分为训练集测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=125)
# 建立线性回归模型
clf = LinearRegression().fit(X_train,y_train)
print('建立的LinearRegression模型为:','\n',clf)
# 预测训练集结果
y_pred = clf.predict(X_test)
print('预测前20个结果为:','\n',y_pred[:20])
建立的LinearRegression模型为:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
预测前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]
利用预测结果和真实结果划出折线图,能较为直观地观看出线性回归模型效果,如代码6-25 所示
代码6-25 回归结果可视化
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.sans-serif'] = 'SimHei' #设置字体
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_pred,color="red", linewidth=1.5, linestyle="-.")
plt.legend(['真实值','预测值'])
plt.savefig('../tmp/聚类结果.png')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJ2oWTkF-1608712508956)(output_11_0.png)]
6.4.2 评价回归模型
回归模型的性能评估不同于分类模型,虽然都是对照真实值进行评估,但由于回归模型的预测结果和真实值都是连续的,所以不能够求取Precision、Recall和F1值等评价指标。回归模型拥有一套独立的评价指标。
平均绝对误差、均方误差和中值绝对误差的值越靠近0,模型性能越好。可解释方差值和R方值则越靠近1,模型性能越好。
%%html
<img style="float: left;" src="./image/6-26-2.png" width=700 height=400>
代码6-26 回归模型的评价
from sklearn.metrics import explained_variance_score,\
mean_absolute_error,\
mean_squared_error,\
median_absolute_error,r2_score
print('Boston数据线性回归模型的平均绝对误差为:',
mean_absolute_error(y_test,y_pred))
print('Boston数据线性回归模型的均方误差为:',
mean_squared_error(y_test,y_pred))
print('Boston数据线性回归模型的中值绝对误差为:',
median_absolute_error(y_test,y_pred))
print('Boston数据线性回归模型的可解释方差值为:',
explained_variance_score(y_test,y_pred))
print('Boston数据线性回归模型的R方值为:',
r2_score(y_test,y_pred))
Boston数据线性回归模型的平均绝对误差为: 3.3775517360082032
Boston数据线性回归模型的均方误差为: 31.150517390315635
Boston数据线性回归模型的中值绝对误差为: 1.7788996425420756
Boston数据线性回归模型的可解释方差值为: 0.7105475650096659
Boston数据线性回归模型的R方值为: 0.7068961686076838
6.4.3 任务实现
房子的估值是一件相对烦琐的事情,使用加利福尼亚住房数据集,可以通过房子的8个外在条件来评估房子的平均价值
1. 构建线性回归模型
代码6-27 使用sklearn估计器构建线性回归模型
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
house = pd.read_csv('../data/cal_housing.data',sep=',')
house_data = house.iloc[:,:-1]
house_target = house.iloc[:,-1]
house_names = ['longitude','latitude',
'housingMedianAge', 'totalRooms',
'totalBedrooms','population',
'households', 'medianIncome']
house_train,house_test,house_target_train,house_target_test = \
train_test_split(house_data,house_target,
test_size = 0.2,random_state = 42)
GBR_house = GradientBoostingRegressor().fit(house_train,house_target_train)
print('建立的梯度提升回归模型为:','\n',GBR_house)
建立的梯度提升回归模型为:
GradientBoostingRegressor(alpha=0.9, ccp_alpha=0.0, criterion='friedman_mse',
init=None, learning_rate=0.1, loss='ls', max_depth=3,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=100,
n_iter_no_change=None, presort='deprecated',
random_state=None, subsample=1.0, tol=0.0001,
validation_fraction=0.1, verbose=0, warm_start=False)
2. 评价构建的线性回归模型
代码6-28 评价构建线性回归模型
house_target_pred = GBR_house.predict(house_test)
from sklearn.metrics import explained_variance_score,\
mean_absolute_error,\
mean_squared_error,\
median_absolute_error,r2_score
print('california_housing数据梯度提升回归树模型的平均绝对误差为:',
mean_absolute_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的均方误差为:',
mean_squared_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的中值绝对误差为:',
median_absolute_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的可解释方差值为:',
explained_variance_score(house_target_test,
house_target_pred))
print('california_housing数据梯度提升回归树模型的R方值为:',
r2_score(house_target_test,house_target_pred))
california_housing数据梯度提升回归树模型的平均绝对误差为: 38055.93823652784
california_housing数据梯度提升回归树模型的均方误差为: 3103219873.747233
california_housing数据梯度提升回归树模型的中值绝对误差为: 26179.478445698245
california_housing数据梯度提升回归树模型的可解释方差值为: 0.7618957368088867
california_housing数据梯度提升回归树模型的R方值为: 0.7618483669912332
小结
本章主要根据数据分析的应用分类,重点介绍了对应的数据分析建模方法及实现过程。
sklearn数据分析技术的基本任务主要体现在聚类、分类和回归三类。
每一类又有对应的多种评估方法,能够评价所构建模型的性能优劣。
通过这一章的学习,读者基本能够掌握常用的模型构建与评估方法,可在以后的数据分析过程中采用适当的算法并按所介绍的步骤实现综合应用。
%%html
<img style="float: left;" src="./image/666.png" width=300 height=400>