机器学习(4)--估算波士顿房屋价格----带AdaBoost的决策树回归模型

估算波士顿房屋价格—-带AdaBoost决策树回归模型

使用带AdaBoost算法的决策树回归器(descision tree regressor)

  • 决策树模型: 树状模型,每个节点做决策,从而影响决策结果,叶子节点表示输出结果,分支表示根据输入做出中间决策

  • AdaBoost:利用其他系统增强模型准确型的技术

代码如下:

#-*- coding: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_squared_error,explained_variance_score
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 "\n ###决策树学习效果###"
print "均方误差 = ",round(mse,2)
print "解释方差分 = ",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 "\n ###AdaBoost算法改善效果###"
print "均方误差 = ",round(mse,2)
print "解释方差分 = ",round(evs,2)

def plot_feature_importances(feature_importances,title,feature_names):
    #将重要性值标准化
    feature_importances=100.0*(feature_importances/max(feature_importances))
    #将得分从低到高进行排序 flipud 实现矩阵的翻转
    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 importance')
    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

绘制图形如下所示:

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值