多输出决策树回归

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将引导你完成一个使用决策树的多输出回归示例。你将看到如何使用决策树根据单个基础特征同时预测圆的有噪声的 x 和 y 观测值。结果,它学习到近似圆的局部线性回归。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49322{{"多输出决策树回归"}} ml/sklearn -.-> lab-49322{{"多输出决策树回归"}} end

导入库

在这一步中,我们将导入必要的库,即 numpy、matplotlib.pyplot 以及来自 scikit-learn 库的 DecisionTreeRegressor。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

创建一个随机数据集

在这一步中,我们将创建一个随机数据集。我们将使用 numpy 库创建一个包含 100 个元素的有序数组,其随机值范围为 0 到 200,然后从每个元素中减去 100。然后,我们将使用 numpy 计算每个元素的正弦值和余弦值,并将这些数组合并成一个形状为 (100, 2) 的二维数组,以创建 y 数组。我们还将对每第五个元素添加随机噪声。

## 创建一个随机数据集
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)

拟合回归模型

在这一步中,我们将拟合回归模型。我们将使用来自 scikit-learn 库中 sklearn.tree 的DecisionTreeRegressor来拟合三个具有不同最大深度的不同模型。

## 拟合回归模型
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)

进行预测

在这一步中,我们将使用上一步创建的模型进行预测。我们将使用np.arange创建一个新的数组,其值从 -100 到 100,间隔为 0.01,然后使用我们模型的predict方法来预测输出。

## 进行预测
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)

绘制结果

在这一步中,我们将绘制结果。我们将使用matplotlib.pyplot来创建原始数据以及三个模型预测结果的散点图。我们还将为该图添加标签和标题。

## 绘制结果
plt.figure()
s = 25
plt.scatter(y[:, 0], y[:, 1], c="navy", s=s, edgecolor="black", label="data")
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("target 1")
plt.ylabel("target 2")
plt.title("Multi-output Decision Tree Regression")
plt.legend(loc="best")
plt.show()

总结

在这个实验中,我们学习了如何使用决策树进行多输出回归。我们创建了一个随机数据集,拟合了回归模型,进行了预测,并绘制了结果。决策树学习了近似圆形的局部线性回归。我们还看到,如果树的最大深度设置得太高,决策树会学习到训练数据中过于精细的细节并从噪声中学习,即它们会过拟合。