Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法入门(七)— 一文搞懂决策树(内附实战源码)

算法入门(七)— 一文搞懂决策树(内附实战源码)

作者头像
万事可爱^
发布于 2025-01-23 11:04:33
发布于 2025-01-23 11:04:33
48400
代码可运行
举报
运行总次数:0
代码可运行

引言

机器学习的世界里,决策树(Decision Tree)是一个非常重要且基础的算法。无论你是初学者还是老手,掌握决策树的基本概念与构建方法都是非常有帮助的。决策树不仅直观易懂,还因其较强的可解释性在许多应用场景中表现优异。

今天,我们将一起轻松搞懂决策树。内容不仅会覆盖决策树的基本理论,还会带你一步步搭建一个实际的决策树模型,并附带实战数据与详细代码示例。相信你看完后,能轻松上手。

1. 决策树的构建过程

1.1 什么是决策树?

决策树是一种分类与回归的模型,它通过一系列的决策规则(如“如果A > B,那么选择C”)将数据集划分为多个子集,直到满足某个停止条件为止。树的每个节点代表一个特征(或者属性),每个边代表特征值的划分,而叶子节点则表示最终的分类标签或回归值。

1.2 决策树的构建过程

构建决策树的核心目标是通过选择最优的特征进行划分,使得每个划分后的子集尽可能纯净(即同一类别的数据尽量集中)。决策树的构建通常遵循以下步骤:

1.选择特征:根据一定的准则选择最适合划分数据的特征。 2.划分数据集:根据选择的特征将数据划分成子集。 3.递归构建树:对每个子集继续递归地构建子树,直到满足停止条件(如树的深度达到预设值,或者所有数据点的标签一致)。

1.3 划分准则

决策树选择特征时需要判断哪个特征能最好地分割数据。常见的划分准则有:

  • 信息增益(ID3算法):选择可以最大化信息增益的特征。
  • 基尼指数(CART算法):选择基尼指数最小的特征。
  • 信息增益比(C4.5算法):对信息增益进行归一化处理,选择增益比最高的特征。
1.3.1 信息增益

信息增益基于信息论中的熵(Entropy)概念,熵越小表示数据的纯度越高。信息增益就是划分数据前后的熵差,信息增益越大,划分效果越好。具体计算公式如下:

  • 熵公式:
Entropy(S) = - \sum{i=1}^{n} Pi \log2 Pi

其中,

(P_i) 是类别 (i)

的概率。

  • 信息增益:
Information_Gain(D, A) = Entropy(D) - \sum{v \in Values(A)} \frac{|Dv|}{|D|} Entropy(Dv)

其中,

(Dv)

表示划分后的子集。

1.3.2 基尼指数

基尼指数是一种衡量数据不纯度的指标,越小表示纯度越高。计算公式为:

Gini(S) = 1 - \sum{i=1}^{n} Pi^2

在决策树的构建过程中,我们选择基尼指数最小的特征进行划分。

1.3.3 信息增益比

为了解决信息增益的偏向问题,C4.5算法提出了信息增益比的概念。信息增益比是在信息增益的基础上加入了一个正则化项,通常是对特征的“分裂值”进行调整。信息增益比的计算公式为:

\text{Gain Ratio}(D, A) = \frac{\text{Gain}(D, A)}{\text{Split Information}(D, A)}

其中,

Split Information

(分裂信息)是特征A对于数据集D的划分的信息熵,公式如下:

\text{Split Information}(D, A) = - \sum{v \in \text{Values}(A)} \frac{|Dv|}{|D|} \cdot \log2 \left( \frac{|Dv|}{|D|} \right)

信息增益比是C4.5算法用来选择特征的标准,它是信息增益的改进版,旨在减少偏向取值多的特征。通过引入分裂信息作为正则项,C4.5能够更合理地选择划分数据的特征,从而构建出更加精确和有效的决策树模型。

1.4 如何选择划分特征?

通过计算每个特征的信息增益或者基尼指数,我们可以选择最佳特征。然后,使用该特征对数据集进行划分。以下是伪代码:

1.计算每个特征的信息增益(或基尼指数)。 2.选择信息增益(或基尼指数)最大的特征。 3.使用选定的特征将数据集划分为不同的子集。 4.对每个子集递归执行上述步骤,直到满足停止条件(如节点纯度达到100%)。

2. 剪枝方法:防止过拟合

决策树的缺点之一是容易过拟合,尤其是在数据复杂时。过拟合意味着模型在训练数据上表现很好,但在新数据上泛化能力差。为了防止过拟合,我们引入了剪枝(Pruning)方法。

2.1 预剪枝(Pre-pruning)

预剪枝是在树的构建过程中通过设置一些限制条件(如最大树深度、最小样本数等)提前停止树的生长。常见的预剪枝策略包括:

  • 限制树的最大深度(避免过深)。
  • 限制每个叶子节点的最小样本数(避免过小的叶子节点)。
  • 当某一特征的划分信息增益(或基尼指数)小于设定阈值时,停止划分。

2.2 后剪枝(Post-pruning)

后剪枝是在树完全构建后,再进行修剪。通过剪掉一些不必要的节点或子树来降低模型的复杂度。后剪枝常用的算法包括CART算法中的最小化错误率剪枝。

2.3 剪枝的作用

剪枝的核心目的是平衡模型复杂度与训练数据拟合度,防止决策树模型对训练数据的过拟合。通过剪枝,我们能够得到一个更为简洁、泛化能力更强的模型。

3. 决策树的可视化与解释性优势

决策树的最大优点之一是可解释性强。它通过树的结构能够清晰地展示如何根据特征做出分类决策,这对于分析模型决策过程非常有帮助。你可以通过可视化工具将决策树“画”出来,进一步理解其内部工作原理。

3.1 如何可视化决策树?

Python中,我们可以使用sklearn库中的DecisionTreeClassifier进行决策树的训练和可视化。下面是一个简单的例子,演示如何使用Kaggle的Titanic数据集来构建一个决策树模型,并可视化它。

4. 实战:Iris数据集中的决策树

接下来我们将以 “Iris 数据集” 为例,来展示如何使用决策树算法进行分类任务的实战。Iris 数据集是一个经典的机器学习数据集,通常用于演示分类问题,它包含了不同种类的鸢尾花(Iris flower)的特征数据,目标是预测每个花朵的种类。 接下来,我们会对以下内容进行修改:

1.以 Iris 数据集 为例,替换 Titanic 数据集。 2.更新实战代码示例,展示如何使用决策树进行分类。 3.包括数据预处理、模型训练和评估等步骤。

4.1 引入必要的库

首先,我们需要导入 Python 中的相关库,包括数据处理、模型训练和评估所需的工具。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn import tree

4.2 加载和查看数据

Iris 数据集可以通过 sklearn.datasets 直接加载。我们先加载数据,并查看它的基本结构。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 加载Iris数据集
iris = load_iris()

# 将数据转换为DataFrame格式
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# 添加目标标签
iris_df['species'] = iris.target

# 查看数据集的前几行
print(iris_df.head())

输出的前几行应该是类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  species
0                5.1               3.5                1.4               0.2        0
1                4.9               3.0                1.4               0.2        0
2                4.7               3.2                1.3               0.2        0
3                4.6               3.1                1.5               0.2        0
4                5.0               3.6                1.4               0.2        0

这里,species 列表示鸢尾花的种类(0、1、2分别代表三种鸢尾花),而其他列是各个花瓣和萼片的尺寸。

4.3 数据预处理和拆分

在训练模型之前,我们需要将数据拆分为训练集和测试集,常见的拆分比例为 80% 用于训练,20% 用于测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 特征和标签
X = iris.data
y = iris.target

# 拆分数据集:80% 用于训练,20% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print("训练集大小:", X_train.shape)
print("测试集大小:", X_test.shape)

4.4 训练决策树模型

接下来,我们将使用决策树模型来对数据进行训练。我们可以通过 DecisionTreeClassifier 来训练模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)

# 使用训练集数据训练模型
clf.fit(X_train, y_train)

4.5 模型评估 训练完模型后,我们可以通过测试集对模型进行评估,检查其预测精度以及其他相关的评估指标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用测试集数据进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.4f}")

# 打印分类报告
print("\n分类报告:")
print(classification_report(y_test, y_pred))

# 打印混淆矩阵
print("\n混淆矩阵:")
print(confusion_matrix(y_test, y_pred))

分类报告会显示每个类别的精确度、召回率和F1分数。混淆矩阵将展示预测结果与实际结果的对比,帮助我们分析模型的表现。

4.6 可视化决策树

为了进一步理解模型的决策过程,我们可以将训练好的决策树可视化。这可以帮助我们了解决策树的分裂方式及其分类标准。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 可视化决策树
plt.figure(figsize=(15, 10))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show()

这将输出一张决策树的图像,展示每一层的分裂特征和阈值,以及各个叶节点的类别预测。可视化后的决策树清晰地展示了模型根据哪些特征做出决策,哪个特征的划分最重要。

在这里插入图片描述
在这里插入图片描述

4.7 总结

通过上面的步骤,我们完成了一个简单的决策树分类任务:

  • 我们使用 Iris 数据集 来训练和评估决策树模型。
  • 我们查看了模型的准确率、分类报告以及混淆矩阵。
  • 最后,我们通过可视化决策树的结构,帮助我们理解模型的决策过程。

此案例展示了如何在实际中应用决策树算法进行分类任务,尽管数据集较小,但仍能帮助我们快速理解决策树的基本操作与性能评估。

4.8 代码总结

最终,完整的代码流程如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn import tree

# 加载Iris数据集
iris = load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['species'] = iris.target

# 查看数据集
print(iris_df.head())

# 特征和标签
X = iris.data
y = iris.target

# 拆分数据集:80% 用于训练,20% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("训练集大小:", X_train.shape)
print("测试集大小:", X_test.shape)

# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 模型评估
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.4f}")
print("\n分类报告:")
print(classification_report(y_test, y_pred))
print("\n混淆矩阵:")
print(confusion_matrix(y_test, y_pred))

# 可视化决策树
plt.figure(figsize=(15, 10))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show()

通过这些步骤,您可以快速使用决策树算法来解决分类问题并评估模型的效果。希望这个案例对您理解决策树的应用有所帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入了解决策树---机器学习中的经典算法
决策树(Decision Tree)是一种重要的机器学习模型,以直观的分层决策方式和简单高效的特点成为分类和回归任务中广泛应用的工具。作为解释性和透明性强的算法,决策树不仅适用于小规模数据,也可作为复杂模型的基石(例如随机森林、梯度提升树)。本文深入探讨决策树的数学原理、构建方法及高级应用,并通过Python示例展示如何优化决策树的性能。
用户11292525
2024/11/27
3480
【机器学习】--- 决策树与随机森林
决策树和随机森林是机器学习中的经典算法,因其易于理解和使用广泛而备受关注。尽管如此,随着数据集规模和复杂性增加,这些算法的性能可能会遇到瓶颈。因此,研究决策树与随机森林的改进成为了机器学习领域的一个热点话题。本博客将详细探讨决策树与随机森林的基本原理、其存在的问题以及如何通过多种改进方法提升其性能。
凯子坚持C
2024/09/23
1510
【白话机器学习】算法理论+实战之决策树
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法:
Datawhale
2020/03/04
7130
【白话机器学习】算法理论+实战之决策树
机器学习 - 决策树:技术全解与案例实战
决策树算法是机器学习领域的基石之一,其强大的数据分割能力让它在各种预测和分类问题中扮演着重要的角色。从它的名字便能窥见其工作原理的直观性:就像一棵树一样,从根到叶子的每一分叉都是一个决策节点,指引数据点最终归类到相应的叶节点,或者说是最终的决策结果。
TechLead
2023/11/08
1.6K0
机器学习 - 决策树:技术全解与案例实战
【机器学习】二、决策树
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。
Twcat_tree
2023/11/01
2650
【机器学习】二、决策树
1、决策树理论知识详解与sklearn实践
首先看决策树的相关理论,在我看过的一些资料中,李航老师的《统计机器学习》这部分写得最全面,因此下面的内容主要参考了这本书,但顺序我做了一些更改,改成了决策树理论建立的顺序,以便读者能够更容易看懂。
zstar
2022/06/13
4190
1、决策树理论知识详解与sklearn实践
决策树(Decision Tree,DT)
Quinlan在1986年提出的ID3算法、1993年提出的C4.5算法 Breiman等人在1984年提出的CART算法
Michael阿明
2020/07/13
1.7K0
决策树(Decision Tree,DT)
Python基础算法解析:决策树
决策树是一种常用的机器学习算法,既可以用于分类问题,也可以用于回归问题。它的工作原理类似于人类的决策过程,通过对特征的问询逐步进行分类或者预测。本文将详细介绍决策树的原理、实现步骤以及如何使用Python进行编程实践。
Echo_Wish
2024/03/20
3350
Python人工智能:基于sklearn的决策树分类算法实现总结
本文使用sklearn的sklearn.tree.export_graphviz类函数实现分类决策树的可视化。需要注意的的是我们需要首先配置graphviz软件,具体配置方法可以自行百度,我前面写了一篇文章可供参考Python人工智能:Ubuntu系统中网络结构绘图工具库Graphviz的使用方法简介。
用户1143655
2023/03/21
2K0
Python人工智能:基于sklearn的决策树分类算法实现总结
AI - 决策树模型
决策树的思想来源可以追溯到古希腊时期,当时的哲学家们就已经开始使用类似于决策树的图形来表示逻辑推理过程。然而,决策树作为一种科学的决策分析工具,其发展主要发生在20世纪。
@小森
2024/03/24
1450
AI - 决策树模型
【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
决策树由节点和边组成,其中每个节点表示数据集的某个特征,每条边表示特征的某个值所对应的分支。决策树的最顶端称为根节点,叶节点代表决策结果。以下是一个简单的决策树示例图:
哈__
2024/06/23
3260
【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
sklearn调包侠之决策树算法
决策树原理 之前我们详细讲解过决策树的原理,详细内容可以参考该链接(https://www.jianshu.com/p/0dd283516cbe)。 改进算法 但使用信息增益作为特征选择指标(ID3算法)容易造成过拟合。举一个简单例子,每个类别如果都有一个唯一ID,通过ID这个特征就可以简单分类,但这并不是有效的。为了解决这个问题,有了C4.5和CART算法,其区别如下所示: ID3 是信息增益划分 C4.5 是信息增益率划分 CART 做分类工作时,采用 GINI 值作为节点分裂的依据 实战——泰坦尼克号
罗罗攀
2018/07/03
6090
独家 | 使用Python了解分类决策树(附代码)
本教程介绍了用于分类的决策树,即分类树,包括分类树的结构,分类树如何进行预测,使用scikit-learn构造分类树,以及超参数的调整。
数据派THU
2019/10/10
2.7K0
独家 | 使用Python了解分类决策树(附代码)
《解锁决策树算法:机器学习领域的实用利器及其多面应用》
在当今数据驱动的时代,机器学习正深刻改变着我们生活与工作的方方面面,而决策树算法作为其中的经典算法,凭借直观易懂、高效实用的优势,在众多领域都占据着重要地位。本文将带领大家全方位深入探究决策树算法,从基础原理出发,贯穿构建过程、各类算法介绍、优缺点剖析、应用场景展示以及可视化方法等内容,助力读者全面掌握这一有力工具,为后续的数据分析与机器学习实践筑牢根基。
用户11292525
2025/01/13
1400
【机器学习】决策树代码练习
1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if-then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。
算法进阶
2022/06/02
4000
【机器学习】决策树代码练习
机器学习算法决策树
决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先询问男方是否有房产,如果有房产再了解是否有车产,如果有车产再看是否有稳定工作……最后得出是否要深入了解的判断。
@小森
2024/03/15
1170
机器学习算法决策树
分类和回归-决策树算法(ID3、C4.5和CART)
决策树(Decision Tree)是⼀种树形结构,每个节点表示⼀个属性上的判断,每个分⽀代表⼀个判断结果的输出,最后每个叶节点代表⼀种分类结果,本质是⼀颗由多个判断节点组成的树。
唔仄lo咚锵
2022/10/31
9940
分类和回归-决策树算法(ID3、C4.5和CART)
CART决策树
CART全称为Classification and Regression Tree。
程序员一一涤生
2020/01/07
7690
CART决策树
数据分析入门系列教程-决策树实战
在学习了上一节决策树的原理之后,你有没有想动手实践下的冲动呢,今天我们就来用决策树进行项目实战。
周萝卜
2020/10/30
9180
数据分析入门系列教程-决策树实战
基于sklearn的决策树实现
本文中讲解的是使用sklearn实现决策树及其建模过程,包含 数据的清洗和数据分离train_test_split 采用不同的指标,基尼系数或者信息熵进行建模,使用的是X_train和y_train
皮大大
2021/03/02
4320
相关推荐
深入了解决策树---机器学习中的经典算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验