估算波士顿房屋价格—-带AdaBoost决策树回归模型
使用带AdaBoost算法的决策树回归器(descision tree regressor):
决策树模型: 树状模型,每个节点做决策,从而影响决策结果,叶子节点表示输出结果,分支表示根据输入做出中间决策
AdaBoost:利用其他系统增强模型准确型的技术
代码如下:
# -*- coding:utf-8 -*-
# encoding:utf-8
import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn import datasets
from sklearn.metrics import mean_absolute_error,explained_variance_score,mean_squared_error
from sklearn.utils import shuffle
import matplotlib.pyplot as plt
#加载房屋数据-波士顿房屋价格
housing_data = datasets.load_boston()
#housing_data.data代表输入价格,housing_data.target代表输出价格
x,y = shuffle(housing_data.data,housing_data.target,random_state=7)
#将数据分成80%用于训练,其他用于测试
num_training=int(0.8*len(x))
#训练数据
x_train,y_train = x[:num_training],y[:num_training]
#测试数据
x_test,y_test = x[num_training:],y[num_training:]
#建立决策树模型最大深度4限制决策树的深度
dt_regressor = DecisionTreeRegressor(max_depth=4)
dt_regressor.fit(x_train,y_train)
#使用带AdaBoost算法的决策树模型进行拟合fit代表拟合
ab_regressor = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),n_estimators=400,random_state=7)
ab_regressor.fit(x_train,y_train)
#查看决策树回归的训练结果
y_pred_dt=dt_regressor.predict(x_test)
mse = mean_squared_error(y_test,y_pred_dt)
evs = explained_variance_score(y_test,y_pred_dt)
print("###决策树学习效果###")
print(r"均方误差=",round(mse,2))
print(u"解释方差分=",round(evs,2))
#查看对AdaBoost进行改进之后的算法
y_pred_ab=ab_regressor.predict(x_test)
mse=mean_squared_error(y_test,y_pred_ab)
evs=explained_variance_score(y_test,y_pred_ab)
print('###AdaBoost###')
print(u"均方误差=",round(mse,2))
print(u"解释方差分=",round(evs,2))
def plot_feature_importances(feature_importances,title,feature_names):
#将重要性值标准化
feature_importances=100.0*(feature_importances/max(feature_importances))
#将得分从低到高进行排序flipub实现矩阵的翻转
index_sorted=np.flipud(np.argsort(feature_importances))
#让x坐标轴上的把标签居中shape用于读取矩阵的长度
pos=np.arange(index_sorted.shape[0])+0.5
#画出条形图
plt.figure()
#bar代表柱形图
plt.bar(pos,feature_importances[index_sorted],align='center')
#为x轴的主刻度设置值
plt.xticks(pos,feature_names[index_sorted])
plt.ylabel('Relative importances')
plt.title(title)
plt.show()
#特征重要性 图形表示feature_importances代表每个特征多样性
#plot_feature_importances(dt_regressor.feature_importances_,'Decision Tree Regressor',housing_data.feature_names)
plot_feature_importances(ab_regressor.feature_importances_,'Adaboost Regressor',housing_data.feature_names)
输出结果:
###决策树学习效果###
均方误差 = 14.79
解释方差分 = 0.82
###AdaBoost算法改善效果###
均方误差 = 7.64
解释方差分 = 0.91
绘制图形如下所示: