【机器学习】十大算法之一 “决策树”

简介: 传统的机器学习算法通常是根据数据来寻找模型、寻找关于数据的规律或者说是特征,是一种第一步是给定数据,然后在学习过程中发现一个模型用来描述这些数据的算法。与此不同的是,决策树则是一种将自主变量切分成不同数据集最优方法的算法,具有易于理解、易于解释、能够处理缺失数据、可处理不连续型数据、简单性、目标变量存在非线性关系的优点,因此被广泛应用于数据挖掘、机器学习等领域。在机器学习中,决策树算法是非常重要的一种算法。通过不断地分割数据集,决策树算法可以构建一棵分类或回归树,从而实现对数据的分类或回归。

决策树算法是机器学习中最常用的算法之一,是一种基于树结构的分类方法。

本文将详细讲解机器学习十大算法之一“决策树”


image.png
一、简介
传统的机器学习算法通常是根据数据来寻找模型、寻找关于数据的规律或者说是特征,是一种第一步是给定数据,然后在学习过程中发现一个模型用来描述这些数据的算法。与此不同的是,决策树则是一种将自主变量切分成不同数据集最优方法的算法,具有易于理解、易于解释、能够处理缺失数据、可处理不连续型数据、简单性、目标变量存在非线性关系的优点,因此被广泛应用于数据挖掘、机器学习等领域。

二、发展史
决策树算法的历史可以追溯到20世纪50年代,在早期的决策分析和运筹学领域中,决策树算法被广泛应用与研究。1960年代时,经过了卡方检验的热门统计学家卡尔泽瑞斯(C.T.C. Chou)开创了利用朴素贝叶斯和决策树理论解决分类问题的先河。

    到了1970年代,决策树算法开始被广泛地应用于数据挖掘领域。最早的决策树算法是ID3算法,由Ross Quinlan在1986年提出,用于自动学习从给定数据集中选择最佳特征以分类新对象的决策树。之后,在1993年,Quinlan又提出了C4.5算法,该算法相比ID3算法,对缺失数据的处理及连续属性的处理更加优秀,而且在分类准确率和树的规模之间平衡更好,是一款十分优秀的分类算法。

    在2000年之后,随着计算机性能的提高,以及机器学习领域的快速发展,决策树算法也得到了广泛的应用,并且出现了许多改进的算法,例如 CART算法,C5.0算法等。

三、算法原理
决策树算法的主要思想是通过不断地分割数据集来构建一棵分类或回归树。在每次分割时,决策树算法会选择特征值,将数据集划分成更小的子集。具体而言,算法会首先确定一个特征,并将数据集按照该特征的取值进行划分。这个过程会一直重复下去,直到每个数据子集都只包含一个类别或者回归值。这样,我们就得到了一棵以特征划分为结点的决策树。

    决策树算法的核心是特征选择,其目的是选择一个最好的特征来进行数据集的划分。常见的特征选择方法有信息增益、信息增益比、基尼指数等。

    1. 信息增益
    信息增益是指通过某个特征划分数据集所获得的信息增益。在ID3算法中,选择信息增益作为特征选择指标。信息增益越大,说明使用该特征划分数据集所获得的信息增益越大,因此该特征具有更好的分类能力。信息增益的公式如下:

image.png
其中,D是数据集,A是一个特征,V是特征A的取值数量,Dv是数据集中特征A取值为v的样本集合,Entropy(D)是数据集的熵,Entropy(Dv)是Dv的熵。总体来说,信息增益的计算是通过计算初始的数据集熵与利用特征A进行划分后的数据集熵之和的相减。

    2. 信息增益比
    信息增益比是解决了信息增益可能存在偏好选取分支较多的情况,不能明确体现子集信息纯度的问题。C4.5算法之前,大多使用信息增益来进行特征选择,但是信息增益有个缺点,在处理带有大量特征的数据集时,容易选择拥有更多取值的特征,即更具划分能力的特征。因此,需要使用信息增益比对特征进行评估。信息增益比的公式如下:

image.png

其中
image.png
是特征A的固有值。在属性划分的过程中,选择信息增益比高于平均水平的属性列,用于划分子序列。

    3. 基尼指数
    基尼(Gini)指数用于衡量随机抽取样本时分错类的概率,即某个样本被错误分类的概率,因此可以看成数据抽样后,数据集内部样本的不纯度度量,而信息熵是所有可能样本的不纯度。基尼指数的计算如下:

image.png
其中,D是数据集,pk​表示属于类别k的样本在数据集D中出现的概率。

    在计算基尼指数后,我们可以根据最大基尼指数来选择最好的特征进行数据集的划分。

四、算法功能
决策树算法的功能非常强大,主要表现在以下几个方面:

    1. 分类功能
    决策树算法可以根据样本数据将查明的数据进行分类,从而对问题进行分析及解决。例如,在给定红蓝两种颜色的花朵图片数据时,我们可以很容易地使用决策树算法对数据进行分类,从而得出该花属于哪种颜色。

    2. 可视化功能
    决策树算法可以将数据分类的过程图像化展示出来。这样便于用户直观地观察数据的分类过程及结果。

    3. 性能稳定性
    在大量数据的情况下,决策树算法可以快速、准确地分类数据,并且几乎不受数据规模的影响。

    4. 可解释性
    决策树算法可以提供分析数据和进行决策的见解,同时还能够给出可用于定量分析的方法。

    决策树算法的输出结果是一棵决策树,其中包含一个根节点和多棵子树。如果一个数据点从根节点出发一直到达一片叶子,那么这个叶子的类别就是数据点所属的类别。 

五、示例代码及运行结果
接下来,我将介绍一个使用决策树算法的分类示例。在这个示例中,我们将使用sklearn库提供的iris数据集进行分类。该数据集包含150个样本,每个样本包含四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。样本被划分成三个类别:山鸢尾、变色鸢尾和维吉尼亚鸢尾。

    示例代码:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
import matplotlib.pyplot as plt

# load data
iris = load_iris()
X = iris.data
y = iris.target

# split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# train decision tree classifier
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)

# plot decision tree
fig, ax = plt.subplots(figsize=(10, 8))
plot_tree(dtc, filled=True, ax=ax, class_names=iris.target_names)
plt.show()

# predict test set and evaluate accuracy
y_pred = dtc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
print('Confusion matrix:\n', cm)
print('Accuracy:', accuracy)

运行结果:
Confusion matrix:
[[16 0 0]
[ 0 17 1]
[ 0 0 11]]
Accuracy: 0.9777777777777777
通过使用决策树算法,我们可以得到一个基于iris数据集的分类器,并获得了97%的准确率。我们还可以使用plot_tree函数来绘制决策树,从而更好地理解算法的工作原理。
image.png
六、总结
在机器学习中,决策树算法是非常重要的一种算法。通过不断地分割数据集,决策树算法可以构建一棵分类或回归树,从而实现对数据的分类或回归。决策树算法有很多种不同的实现方式,包括ID3、C4.5、CART和CHAID等算法。选择哪种算法主要取决于数据集的属性,以及需要解决的问题。此外,特征选择也是决策树算法的一个重要环节,常用的方法有信息增益、信息增益比和基尼指数等。最后,我们还演示了如何使用Python和sklearn库来实现一个基于决策树算法的分类器,并解释了如何使用plot_tree来可视化决策树。
image.png

目录
相关文章
|
7月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
7月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
326 4
|
12月前
|
存储 机器学习/深度学习 算法
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty  敏感词
|
10月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
252 2
|
12月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
291 17
|
12月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
843 8
|
12月前
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
252 7
|
人工智能 算法 语音技术
Video-T1:视频生成实时手术刀!清华腾讯「帧树算法」终结闪烁抖动
清华大学与腾讯联合推出的Video-T1技术,通过测试时扩展(TTS)和Tree-of-Frames方法,显著提升视频生成的连贯性与文本匹配度,为影视制作、游戏开发等领域带来突破性解决方案。
457 4
Video-T1:视频生成实时手术刀!清华腾讯「帧树算法」终结闪烁抖动
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
416 3
 算法系列之数据结构-Huffman树
|
11月前
|
机器学习/深度学习 算法 搜索推荐
决策树算法如何读懂你的购物心理?一文看懂背后的科学
"你为什么总能收到刚好符合需求的商品推荐?你有没有好奇过,为什么刚浏览过的商品就出现了折扣通知?
322 0

热门文章

最新文章