一.描述
二.注意事项
- 基于决策树的回归模型不能外推,不能对训练数据外的样本进行预测
- 和分类树一样,决策树深度也是回归树的重要参数,决策树深度的增加虽然可以增强训练集的拟合能力,但这也可能导致其泛化能力的下降
三.实例
-
使用不同的决策树深度对已知曲面上的样本做回归分析 import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
# 生成50*50的网格
x, y = np.mgrid[-2:2:50j, -2:2:50j]
# 计算网格上每一个点的高度值
z = x*np.exp(-x**2-y**2)
# 随机生成区间[-2, 2)内的100个x
_x = np.random.random(100) * 4 - 2
# 随机生成区间[-2, 2]内的100个y
_y = np.random.random(100) * 4 - 2
_z = _x*np.exp(-_x**2-_y**2) + (np.random.random(100)-0.5) * 0.1
# 训练样本集
X_train = np.stack((_x, _y), axis=1)
# 训练标签集
y_train = _z
# 测试样本集
X_test = np.stack((x.ravel(), y.ravel()), axis=1)
# 测试标签集
y_test = z.ravel()
# 实例化模型,决策树深度为5
dtr_1 = DecisionTreeRegressor(max_depth=5)
# 实例化模型,决策树深度为10
dtr_2 = DecisionTreeRegressor(max_depth=10)
# 模型训练
dtr_1.fit(X_train, y_train)
# 模型训练
dtr_2.fit(X_train, y_train)
# 模型预测
z_1 = dtr_1.predict(X_test)
z_2 = dtr_2.predict(X_test)
# 模型评估
score_1 = dtr_1.score(X_test, y_test)
score_2 = dtr_2.score(X_test, y_test)
score_1
score_2
ax = plt.subplot(121, projection='3d')
ax.scatter3D(_x, _y, _z, c='r')
ax.plot_surface(x, y, z_1.reshape(x.shape), cmap=plt.cm.hsv, alpha=0.5)
plt.title('score:%0.3f@max_depth=5' % score_1)
ax = plt.subplot(122, projection='3d')
ax.scatter3D(_x, _y, _z, c='r')
ax.plot_surface(x, y, z_2.reshape(x.shape), cmap=plt.cm.hsv, alpha=0.5)
plt.title('score:%0.3f@max_depth=10' % score_2)
plt.show()
|