在之前的集成模型(分类)中,探讨过集成模型的大致类型和优势。本篇除了继续使用普通随机森林和提升树模型的回归器版本外,还要补充介绍随机森林模型的另一个变种:极端随机森林。与普通的随机森林模型不同的是,极端随机森林在每当构建一棵树的分裂节点的时候,不会任意地选取特征;而是先随机收集一部分特征,然后利用信息熵和基尼不纯性等指标调休最佳的节点特征。
本篇使用sklearn中三种集成回归模型,即RandomForestRegressor,ExtraTreeRegressor以及GradientBoostingRegressor对“美国波士顿房价”数据进行回归预测,如下述代码所示:
# 从sklearn.ensemble中导入RandomForestRegressor、ExtraTreesGressor以及GradientBoostingRegressor。
from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor, GradientBoostingRegressor
# 使用RandomForestRegressor训练模型,并对测试数据做出预测,结果存储在变量rfr_y_predict中。
rfr = RandomForestRegressor()
rfr.fit(X_train, y_train)
rfr_y_predict = rfr.predict(X_test)
# 使用ExtraTreesRegressor训练模型,并对测试数据做出预测,结果存储在变量etr_y_predict中。
etr = ExtraTreesRegressor()
etr.fit(X_train, y_train)
etr_y_predict = etr.predict(X_test)
# 使用GradientBoostingRegressor训练模型,并对测试数据做出预测,结果存储在变量gbr_y_predict中。
gbr = GradientBoostingRegressor()
gbr.fit(X_train, y_train)
gbr_y_predict = gbr.predict(X_test)
同时,使用下述代码对上述三种集成回归模型在数据的预测能力上进行评估,比较它们性能上的差异。
# 使用R-squared、MSE以及MAE指标对默认配置的随机回归森林在测试集上进行性能评估。
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 absoluate 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.802399786277
The mean squared error of RandomForestRegressor: 15.322176378
The mean absoluate error of RandomForestRegressor: 2.37417322835
# 使用R-squared、MSE以及MAE指标对默认配置的极端回归森林在测试集上进行性能评估。
print 'R-squared value of ExtraTreesRegessor:', etr.score(X_test, y_test)
print 'The mean squared error of ExtraTreesRegessor:', mean_squared_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(etr_y_predict))
print 'The mean absoluate error of ExtraTreesRegessor:', mean_absolute_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(etr_y_predict))
# 利用训练好的极端回归森林模型,输出每种特征对预测目标的贡献度。
print np.sort(zip(etr.feature_importances_, boston.feature_names), axis=0)
R-squared value of ExtraTreesRegessor: 0.81953245067
The mean squared error of ExtraTreesRegessor: 13.9936874016
The mean absoluate error of ExtraTreesRegessor: 2.35881889764
[['0.00197153649824' 'AGE']
['0.0121265798375' 'B']
['0.0166147338152' 'CHAS']
['0.0181685042979' 'CRIM']
['0.0216752406979' 'DIS']
['0.0230936940337' 'INDUS']
['0.0244030043403' 'LSTAT']
['0.0281224515813' 'NOX']
['0.0315825286843' 'PTRATIO']
['0.0455441477115' 'RAD']
['0.0509648681724' 'RM']
['0.355492216395' 'TAX']
['0.370240493935' 'ZN']]
# 使用R-squared、MSE以及MAE指标对默认配置的梯度提升回归树在测试集上进行性能评估。
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 absoluate 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.842602871434
The mean squared error of GradientBoostingRegressor: 12.2047771094
The mean absoluate error of GradientBoostingRegressor: 2.28597618665
特点分析:许多在业界从事商业分析系统开发和搭建的工作者更加青睐集成模型,并且经常以这些模型的性能表现为基准,与新设计的其他模型性能进行比较。虽然这些集成模型在训练过程中要耗费更多的时间,但是往往可以提供更高的表现性能和更高的稳定性。