Python机器学习及实践——基础篇11(回归树)

Posted Lenskit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python机器学习及实践——基础篇11(回归树)相关的知识,希望对你有一定的参考价值。

回归树在选择不同特征作为分裂节点的策略上,与基础篇6的决策树的思路类似。不同之处在于,回归树叶节点的数据类型不是离散型,而是连续型。决策树每个叶节点依照训练数据表现的概率倾向决定了其最终的预测类;而回归树的叶节点确实一个个具体的值,从预测值连续这个意义上严格地讲,回归树不能成为“回归算法”。因为回归树的叶节点返回的是“一团”训练数据的均值,而不是具体的,连续的预测值。

下面使用回归树对美国波士顿房训练数据进行学习,并对测试数据进行预测:

# 从sklearn.tree中导入DecisionTreeRegressor。
from sklearn.tree import DecisionTreeRegressor
# 使用默认配置初始化DecisionTreeRegressor。
dtr = DecisionTreeRegressor()
# 用波士顿房价的训练数据构建回归树。
dtr.fit(X_train, y_train)
# 使用默认配置的单一回归树对测试数据进行预测,并将预测值存储在变量dtr_y_predict中。
dtr_y_predict = dtr.predict(X_test)

使用如下代码,对默认配置的回归树在测试集上的性能做出评估。并且,该代码的输出结果优于基础篇8中的LR与SGDR的性能表现。因此,可以初步推断,“美国波士顿房价预测”问题的特征值与目标值之间存在一定的非线性关系。

# 使用R-squared、MSE以及MAE指标对默认配置的回归树在测试集上进行性能评估。
print 'R-squared value of DecisionTreeRegressor:', dtr.score(X_test, y_test)
print 'The mean squared error of DecisionTreeRegressor:', mean_squared_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(dtr_y_predict))
print 'The mean absoluate error of DecisionTreeRegressor:', mean_absolute_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(dtr_y_predict))

R-squared value of DecisionTreeRegressor: 0.694084261863

The mean squared error of DecisionTreeRegressor: 23.7211023622

The mean absoluate error of DecisionTreeRegressor: 3.14173228346

特点分析:在系统地介绍了决策(分类)树与回归树之后,可以总结这类树模型的优点:1、树模型可以解决非线性特征的问题;2、树模型不要求对特征标准化和统一量化,即数值型和类别型特征都可以直接被应用在树模型的构建和预测过程中;3、因为上述原因,树模型也可以直观地输出决策过程,使得预测结果具有可解释性。

同时,树模型也有一些显著的缺陷:1、正是因为树模型可以解决辅复杂的非线性拟合问题,所以更加容易因为模型搭建过于复杂而丧失对新数据预测的精度(泛化力);2、树模型从上之下的预测流程会因为数据细微的更改而发生较大的结构变化,因此预测稳定性较差;3、依托训练数据构建最佳的树模型是NP难问题,即在有限时间内无法找到最优解的问题,因此我们所使用类似贪婪算法的解法只能找到一些次优解,这也是为什么我们经常借助集成模型,再多个次优解中寻觅更高的模型性能。

以上是关于Python机器学习及实践——基础篇11(回归树)的主要内容,如果未能解决你的问题,请参考以下文章

Python机器学习及实践——基础篇10(K近邻回归)

Python机器学习及实践——基础篇12(集成模型)

Python机器学习及实践——基础篇9(SVM回归)

Python机器学习及实践——基础篇8(LinerR和SGD)

Python机器学习及实践 课后小题

Python机器学习及实践——进阶篇4(模型正则化之L1正则&L2正则)