独家 | 使用Python了解分类决策树(附代码)

640?wx_fmt=png

作者:Michael Galarnyk

翻译:李润嘉

校对:和中华

本文约3600字,建议阅读15分钟。

本教程介绍了用于分类的决策树,即分类树,包括分类树的结构,分类树如何进行预测,使用scikit-learn构造分类树,以及超参数的调整。

640?wx_fmt=png

本教程详细介绍了决策树的工作原理

由于各种原因,决策树一种流行的监督学习方法。决策树的优点包括,它既可以用于回归,也可用于分类,易于解释并且不需要特征缩放。它也有一些缺点,比如容易过拟合。本教程介绍了用于分类的决策树,也被称为分类树。

除此之外,本教程还将涵盖:
  • 分类树的结构(树的深度,根节点,决策节点,叶节点/终端节点)

  • 分类树如何进行预测

  • 如何通过Python中的scikit-learn构造决策树

  • 超参数调整


与往常一样,本教程中用到的代码可以在我的github(结构,预测)中找到,我们开始吧!
 
什么是分类树?
 
分类和回归树(CART)是由Leo Breiman引入的,用一种于解决分类或回归预测建模问题的决策树算法。本文只介绍分类树。
 
分类树
 
从本质上讲,分类树将分类转化为一系列问题。下图是在IRIS数据集(花卉种类)上训练的一个分类树。根节点(棕色)和决策节点(蓝色)中包含了用于分裂子节点的问题。根节点即为最顶端的决策节点。换句话说,它就是你遍历分类树的起点。叶子节点(绿色),也叫做终端节点,它们不再分裂成更多节点。在叶节点处,通过多数投票决定分类。
 

640?wx_fmt=png

将三个花卉品种(IRIS数据集)一一进行分类的分类树

 
如何使用分类树
 
使用分类树,要从根节点(棕色)开始,逐层遍历整棵树,直到到达叶节点(终端节点)。如下图所示的分类树,假设你有一朵花瓣长度为4.5cm的花,想对它进行分类。首先从根节点开始,先回答“花瓣长度(单位:cm)≤ 2.45吗?”因为宽度大于2.45,所以回答否。然后进入下一个决策节点,回答“花瓣长度(单位:cm)≤ 4.95吗?”。答案为是,所以你可以预测这朵花的品种为变色鸢尾(versicolor)。这就是一个简单的例子。
 

640?wx_fmt=png

 
分类树如何生长(非数学版)
 
分类树从数据中学到了一系列“如果…那么…”的问题,其中每个问题都涉及到一个特征和一个分割节点。从下图的局部树(A)可看出,问题“花瓣长度(单位:cm)≤ 2.45”将数据基于某个值(本例中为2.45)分成两个部分。这个数值叫做分割点。对分割点而言,一个好的值(使得信息增益最大)可将类与类之间分离开。观察下图中的B部分可知,位于分割点左侧的所有点都被归为山鸢尾类(setosa),右侧的所有点则被归为变色鸢尾类(versicolor)。
 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python实现分类回归决策树(CART)的代码示例: 首先,我们需要导入必要的库: ```python from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor from sklearn.datasets import load_iris, load_boston from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, mean_squared_error ``` 接下来,我们可以使用`load_iris`和`load_boston`函数分别加载鸢尾花数据集和波士顿房价数据集: ```python # 加载鸢尾花数据集 iris = load_iris() X, y = iris.data, iris.target # 加载波士顿房价数据集 boston = load_boston() X_reg, y_reg = boston.data, boston.target ``` 然后,我们可以将数据集划分为训练集和测试集: ```python # 分割鸢尾花数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 分割波士顿房价数据集为训练集和测试集 X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42) ``` 接下来,我们可以使用`DecisionTreeClassifier`和`DecisionTreeRegressor`类来构建分类回归决策树: ```python # 构建分类决策树模型并拟合训练集 clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train) # 构建回归决策树模型并拟合训练集 reg = DecisionTreeRegressor(random_state=42) reg.fit(X_train_reg, y_train_reg) ``` 然后,我们可以使用测试集来评估模型的性能: ```python # 计算分类决策树模型在测试集上的准确率 y_pred = clf.predict(X_test) acc = accuracy_score(y_test, y_pred) print(f"Accuracy: {acc:.2f}") # 计算回归决策树模型在测试集上的均方误差 y_pred_reg = reg.predict(X_test_reg) mse = mean_squared_error(y_test_reg, y_pred_reg) print(f"MSE: {mse:.2f}") ``` 最后,我们可以绘制决策树的图形以可视化模型的决策过程: ```python from sklearn.tree import plot_tree import matplotlib.pyplot as plt # 绘制分类决策树模型的图形 plt.figure(figsize=(12, 6)) plot_tree(clf, filled=True) plt.show() # 绘制回归决策树模型的图形 plt.figure(figsize=(12, 6)) plot_tree(reg, filled=True) plt.show() ``` 以上就是使用Python实现分类回归决策树(CART)的代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值