一.描述
二.注意事项
- 基于决策树的回归模型不能外推,不能对训练数据外的样本进行预测
- 和分类树一样,决策树深度也是回归树的重要参数,决策树深度的增加虽然可以增强训练集的拟合能力,但这也可能导致其泛化能力的下降
三.实例
-
使用不同的决策树深度对已知曲面上的样本做回归分析
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()