模型介绍:在“2.1.1.6集成模型(分类)”节中,曾经探讨过集成模型的大致类型和优势。这一节除了继续使用普通随机森林和提升树模型的回归器版本之外,还要补充介绍随机森林模型的另一个变种:极端随机森林(Extremely Randomized Trees)。与普通的随机森林(Random Forests)模型不同的是,极端随机森林在每当构建一棵树的分裂节点的时候,不会任意地选取特征;而是先随机收集一部分特征,然后利用信息熵和基尼不纯性等指标挑选最佳的节点特征。
初始
from sklearn.datasets import load_boston
#从读取房价数据存储在变量boston中。
boston=load_boston()
#输出数据描述
print(boston.DESCR)
from sklearn.cross_validation import train_test_split
import numpy as np
X=boston.data
y=boston.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)
from sklearn.preprocessing import StandardScaler
#分别初始化对特征和目标值的标准化器
ss_X=StandardScaler()
ss_y=StandardScaler()
#分别对训练和测试数据的特征以及目标值进行标准化处理
X_train=ss_X.fit_transform(X_train)
X_test=ss_X.fit_transform(X_test)
y_train=ss_y.fit_transform(y_train)
y_test=ss_y.fit_transform(y_test)
使用三种集成回归模型对美国波士顿房价训练数据进行学习,并对测试数据进行预测
from sklearn.ensemble import RandomForestRegressor,ExtraTreesRegressor,GradientBoostingRegressor
rfr=RandomForestRegressor()
rfr.fit(X_train,y_train)
rfr_y_predict=rfr.predict(X_test)
etr=ExtraTreesRegressor()
etr.fit(X_train,y_train)
etr_y_predict=etr.predict(X_test)
gbr=GradientBoostingRegressor()
gbr.fit(X_train,y_train)
gbr_y_predict=gbr.predict(X_test)
使用三种集成回归模型对美国波士顿房价测试数据上的回归预测性能进行评估
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
print('R-squared value of RandomForestRegressor:',rfr.score(X_test,y_test))
print('The mean squared error of RandomForestRegressor:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rfr_y_predict)))
print('The mean absolute error of RandomForestRegressor:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rfr_y_predict)))
R-squared value of RandomForestRegressor: 0.684410600132
The mean squared error of RandomForestRegressor: 24.471210616
The mean absolute error of RandomForestRegressor: 3.20946957422
print('R-squared value of ExtraTreesRegressor:',etr.score(X_test,y_test))
print('The mean squared error of ExtraTreesRegressor:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(etr_y_predict)))
print('The mean absolute error of ExtraTreesRegressor:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(etr_y_predict)))
R-squared value of ExtraTreesRegressor: 0.754540974486
The mean squared error of ExtraTreesRegressor: 19.0332106004
The mean absolute error of ExtraTreesRegressor: 3.01439924608
#利用训练好的极端回归森林模型,输出每种特征对预测目标的贡献度
print (np.sort(zip(etr.feature_importances_,boston.feature_names),axis=0))
ValueError: axis(=0) out of bounds(待解决)
print('R-squared value of GradientBoostingRegressor:',gbr.score(X_test,y_test))
print('The mean squared error of GradientBoostingRegressor:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(gbr_y_predict)))
print('The mean absolute error of GradientBoostingRegressor:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(gbr_y_predict)))
R-squared value of GradientBoostingRegressor: 0.711319266042
The mean squared error of GradientBoostingRegressor: 22.3846778264
The mean absolute error of GradientBoostingRegressor: 2.9415078588
特点分析
许多在业界从事商业分析系统开发和搭建的工作者更加青睐集成模型,并且经常以这些模型的性能表现为基准,与新设计的其他模型性能进行比对。虽然这些集成模型在训练过程中要耗费更多的时间,但是往往可以提供更高的表现性能和更好的稳定性。
总结
若是对我们在“2.1.2回归预测”节所有介绍过的模型在“美国波士顿房价预测”问题上的性能排序比较,也可以发现使用非线性回归树模型,特别是集成模型,能够取得更高的性能表现。