多输出决策树回归示例

决策树回归是一种监督学习算法,它可以用来预测连续的数值。在多输出回归问题中,目标是同时预测多个相关的输出变量。本文将通过一个例子来展示如何使用决策树来进行多输出回归,并探讨树的最大深度参数如何影响模型的性能。

在这个例子中,将使用决策树来预测一个圆的噪声x和y观测值,给定一个单一的基础特征。通过这种方式,模型学习到的是局部线性回归,这些回归近似于圆的形状。可以通过调整决策树的最大深度(由max_depth参数控制)来控制模型的复杂度。如果树的最大深度设置得太高,决策树可能会学习到训练数据中过于精细的细节,从而学习到噪声,即发生过拟合。

为了创建这个示例,首先导入了必要的库,包括matplotlib用于绘图,numpy用于数学运算,以及scikit-learn中的DecisionTreeRegressor用于构建决策树回归模型。然后,生成了一个随机数据集,其中包含了100个样本点,每个样本点都有一个特征X,以及对应的两个目标变量y1和y2。为了模拟现实世界中的噪声,在数据中添加了一些随机噪声。

import matplotlib.pyplot as plt import numpy as np from sklearn.tree import DecisionTreeRegressor # 创建一个随机数据集 rng = np.random.RandomState(1) X = np.sort(200 * rng.rand(100, 1) - 100, axis=0) y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T y[::5, :] += 0.5 - rng.rand(20, 2) # 拟合回归模型 regr_1 = DecisionTreeRegressor(max_depth=2) regr_2 = DecisionTreeRegressor(max_depth=5) regr_3 = DecisionTreeRegressor(max_depth=8) regr_1.fit(X, y) regr_2.fit(X, y) regr_3.fit(X, y) # 预测 X_test = np.arange(-100.0, 100.0, 0.01)[:, np.newaxis] y_1 = regr_1.predict(X_test) y_2 = regr_2.predict(X_test) y_3 = regr_3.predict(X_test) # 绘制结果 plt.figure() s = 25 plt.scatter(y[:, 0], y[:, 1], c="navy", s=s, edgecolor="black", label="数据") plt.scatter(y_1[:, 0], y_1[:, 1], c="cornflowerblue", s=s, edgecolor="black", label="max_depth=2") plt.scatter(y_2[:, 0], y_2[:, 1], c="red", s=s, edgecolor="black", label="max_depth=5") plt.scatter(y_3[:, 0], y_3[:, 1], c="orange", s=s, edgecolor="black", label="max_depth=8") plt.xlim([-6, 6]) plt.ylim([-6, 6]) plt.xlabel("目标1") plt.ylabel("目标2") plt.title("多输出决策树回归") plt.legend(loc="best") plt.show()

在上述代码中,首先创建了三个不同最大深度的决策树回归模型,分别为max_depth=2、max_depth=5和max_depth=8。然后,使用这些模型对测试数据集进行预测,并绘制了预测结果。从图中可以看出,当树的最大深度较小时(例如max_depth=2),模型的预测结果较为平滑,但可能会丢失一些细节;而当树的最大深度较大时(例如max_depth=8),模型的预测结果更加复杂,能够捕捉到更多的细节,但也更容易受到噪声的影响,导致过拟合。

通过这个示例,可以看到决策树回归在处理多输出问题时的有效性,以及如何通过调整模型参数来控制模型的复杂度。在实际应用中,可以根据问题的特点和数据的特性来选择合适的模型参数,以达到最佳的预测效果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485