2.1.2.4回归树
模型介绍:回归树在选择不同特征作为分裂节点的策略上,与2.1.1.5决策树的思路相似。不同之处在于,回归树叶节点的数据类型不是离散型,而是连续型。决策树每个叶节点依照训练数据表现的概率倾向决定了其最终的预测类别;而回归树的叶节点却是一个个具体的值,从预测值连续这个意义上严格地讲,回归树不能称为“回归算法”。因为回归树的叶节点返回的是“一团”训练数据的均值,而不是具体的、连续的预测值。
初始
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.tree import DecisionTreeRegressor
dtr=DecisionTreeRegressor()
dtr.fit(X_train,y_train)
dtr_y_predict=dtr.predict(X_test)
对单一回归树模型在美国波士顿房价测试数据上的预测性能进行评估
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
print('R-squared value of uniform_weighted KNeighborsRegression:',dtr.score(X_test,y_test))
print('The mean squared error of distance-weighted KNeighborsRegression:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))
print('The mean absolute error of distance-weighted KNeighborsRegression:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))
R-squared value of uniform_weighted KNeighborsRegression: 0.58987701986
The mean squared error of distance-weighted KNeighborsRegression: 31.8014668099
The mean absolute error of distance-weighted KNeighborsRegression: 3.77676872056
该代码的输出结果优于2.1.2.1线性回归器一节LinearRegression与SGDRegressor的性能表现。因此,可以初步判断,“美国波士顿房价预测”问题的特征与目标值之间存在一定的线性关系。
特点分析
在系统地介绍了决策(分类)树与回归树之后,可以总结这类树模型的优点:(1)树模型可以解决非线性特征的问题;(2)树模型不要求对特征标准化和统一量化,即数值型和类别型特征都可以直接被应用在树模型的构建和预测过程中;(3)因为上述原因,树模型也可以直观地输出决策过程,使得预测结果具有可解释性。
同时,树模型也有一些显著的缺陷:(1)正是因为树模型可以解决复杂的非线性拟合问题,所以更加容易因为模型搭建过于复杂而丧失对新数据预测的精度(泛化力);(2)树模型从上至下的预测流程会因为数据细微的更改而发生较大的结构变化,因此预测稳定性较差;(3)依托训练数据构建最佳的树模型是NP难问题,即在有限时间内无法找到最优解的问题,因此我们所使用类似贪婪算法的解法只能找到一些次优解,这也是为什么我们经常借助集成模型,在多个次优解中寻觅更高的模型性能。