机器学习12-回归树

模型介绍

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

代码

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import  mean_squared_error, mean_absolute_error
from sklearn.tree import DecisionTreeRegressor


boston = load_boston()
# print(boston.DESCR)
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)

#分析回归目标值的差异
print("The max target value is ", np.max(boston.target))
print("The min target value is ", np.min(boston.target))
print("The average value is ", np.mean(boston.target))

#分别初始化对特征和目标值的标准化器
ss_X = StandardScaler()
ss_y = StandardScaler()

#标准化处理
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)

y_train = np.array(y_train).reshape(-1, 1)
y_test = y_test.reshape(-1, 1)
y_train = ss_y.fit_transform(y_train)
y_test = ss_y.transform(y_test)

#使用回归树对美国波士顿房价数据进行回归预测
dtr = DecisionTreeRegressor()
dtr.fit(X_train, y_train)
dtr_y_predict = dtr.predict(X_test)

#进行预测性能的评估
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(dtr_y_predict), ss_y.inverse_transform(y_test)))
print('The absolute error of DecisionTreeRegressor:', mean_absolute_error(ss_y.inverse_transform(dtr_y_predict),ss_y.inverse_transform(y_test)))

#out[]:
# The max target value is  50.0
# The min target value is  5.0
# The average value is  22.532806324110677
# R-squared value of DecisionTreeRegressor: 0.5226307868541527
# The mean squared error of DecisionTreeRegressor: 37.01582677165354
# The absolute error of DecisionTreeRegressor: 3.5614173228346453

特点分析

树模型的优点:
1. 树模型可以解决非线性特征的问题。
2. 树模型不要求对特征标准化和统一量化,即数值型和类别型特征都可以直接被应用在树模型的构建和预测过程中。
3. 树模型可以直观地输出决策过程,使得预测结果具有可解释性。
树模型的缺陷:
1. 容易因为模型搭建过于复杂而丧失对新数据预测的精度(泛化力)。
2. 树模型从上至下的预测流程会因为数据细微的更改而发生较大的结构变化,因此预测稳定性较差。
3. 依托训练数据构建最佳的树模型是NP难问题,即在有限时间内无法找到最优解的问题。因此我们所使用类似贪婪算法的解法,只能找到一些次优解,这也是为什么我们经常借助集成模型,在多个次优解中寻觅更高的模型性能。

猜你喜欢

转载自blog.csdn.net/qq_38195197/article/details/81234086