news 2026/7/5 7:09:39

机器学习中的决策树算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习中的决策树算法

摘要:决策树是一种基于树形结构的分类和预测算法,通过递归拆分数据生成决策规则。它分为分类树(用于类别预测)和回归树(用于数值预测)两种类型,使用基尼指数或信息增益作为分割标准。算法通过计算基尼分数、拆分数据集和评估所有分割来构建树结构,最终形成由决策节点和终端节点组成的预测模型。Python实现中可利用scikit-learn库加载鸢尾花数据集,训练决策树分类器并评估准确率,还能可视化树结构。该算法简单直观,适合处理分类问题,但需注意过拟合风险。

目录

决策树算法的类型

决策树算法的实现

基尼指数

分裂创作

建树

第一部分:终端节点的创建

第二部分:递归拆分

预测

假设

Python 实现

完整实现示例


决策树算法是一种基于层次树的算法,用于根据一组规则对结果进行分类或预测。它的工作原理是根据输入特征的值将数据拆分为子集。该算法递归地拆分数据,直到达到一个点,使每个子集的数据属于同一类或目标变量的值相同。由此生成的树是一组决策规则,可用于进行预测或分类新数据。

决策树算法通过选择最佳特征来在每个节点分割数据。最好的特征是能带来最多信息增益或最多熵减少的特征。信息增益是通过在特定特征处拆分数据所获得的信息量,而熵则是数据随机性或无序性的度量。算法利用这些指标确定最佳特征 在每个节点分割数据。

以下给出的二叉树示例,用于预测一个人是否适合,提供年龄、饮食习惯和锻炼习惯等多种信息——

在上述决策树中,问题是决策节点,最终结果是叶子。

决策树算法的类型

决策树算法主要有两种类型 −

  • 分类树− 分类树用于将数据分类为不同的类别或类别。它的工作原理是根据输入特征的值将数据划分为子集,并将每个子集分配给不同的类别。

  • 回归树− 回归树用于预测数值或连续变量。它的工作原理是根据输入特征的值将数据划分为子集,并为每个子集分配一个数值。

决策树算法的实现

基尼指数

它是用于评估数据集中二元分裂的成本函数名称,并与类别目标变量成功或失败相关。

基尼指数越高,均匀性越高。完美的基尼指数值为0,最差值为0.5(对于2类问题)。分裂的基尼指数可以通过以下步骤计算 −

  • 首先,利用公式p^2+q^2计算子节点的基尼指数,这是成功与失败概率的平方和。

  • 接着,利用该分段中每个节点的加权基尼得分计算分裂的基尼指数。

分类与回归树(CART)算法使用基尼方法生成二元分割。

分裂创作

拆分基本上就是在数据集中包含一个属性和一个值。我们可以通过以下三个部分创建数据集分割 −

  • 第一部分:基尼得分计算 − 我们刚在上一节讨论过这一部分。

  • 第二部分:拆分数据集− 可以定义为将数据集分为两行列表,每个行的索引为属性,并有该属性的拆分值。在从数据集中获得右组和左组后,我们可以利用第一部分计算的基尼分数来计算分裂的值。拆分值将决定属性属于哪个组。

  • 第三部分:评估所有拆分− 在找到基尼分数并拆分数据集后,下一步是评估所有拆分。为此,首先我们必须将每个属性关联的每个值作为候选拆分进行检查。然后我们需要通过评估拆分成本来找到最佳的拆分方案。最佳分割将作为决策树中的节点使用。

建树

我们知道树有根节点和终端节点。创建根节点后,我们可以通过以下两部分 − 构建树

第一部分:终端节点的创建

在创建决策树的终端节点时,一个重要点是决定何时停止增长树或创建更多终端节点。它可以通过两个标准实现,即最大树深度和最小节点记录数,具体如下 −

  • 最大树深度− 顾名思义,是树中根节点之后节点的最大数量。一旦树达到最大深度,即树拥有最大终端节点数,我们必须停止添加终端节点。

  • 最小节点记录− 它可以定义为给定节点负责的最少训练模式数量。一旦树达到这些最小节点记录或以下,我们必须停止添加终端节点。

终端节点用于最终预测。

第二部分:递归拆分

当我们理解了何时创建终端节点后,现在可以开始构建我们的树了。递归拆分是一种构建树的方法。在这种方法中,一旦创建了节点,我们可以递归地在每个数据组上创建子节点(添加到现有节点上的节点),这些数据是通过拆分数据集生成的,通过反复调用同一个函数。

预测

构建决策树后,我们需要对其做出预测。基本上,预测涉及在决策树中导航,并使用特定的数据行。

我们可以像上面一样,借助递归函数做出预测。同样的预测例程会再次调用左节点或子节点。

假设

以下是我们在创建决策树时所做的一些假设 −

  • 在准备决策树时,训练集作为根节点。

  • 决策树分类器倾向于特征值为类别。如果你想使用连续值,那么在建模之前必须先进行离散化。

  • 基于属性值,记录被递归分布。

  • 统计方法将用于将属性放置在根节点 i.e.as 内部节点的任何节点位置。

Python 实现

让我们用一个流行的分类任务数据集 Iris 数据集,在 Python 中实现决策树算法。其中包含150朵鸢尾花样本,每种花具有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。花朵分为三个纲:长花、绿花和维吉尼亚。

首先,我们导入必要的库并加载数据集 −

import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # Load the iris dataset iris = load_iris() # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

然后我们创建一个决策树分类器的实例,并用训练集 − 进行训练

# Create a Decision Tree classifier dtc = DecisionTreeClassifier() # Fit the classifier to the training data dtc.fit(X_train, y_train)

我们现在可以使用训练好的分类器对测试集 − 进行预测

# Make predictions on the testing data y_pred = dtc.predict(X_test)

我们可以通过计算分类器的准确性 − 来评估其性能

# Calculate the accuracy of the classifier accuracy = np.sum(y_pred == y_test) / len(y_test) print("Accuracy:", accuracy)

我们可以用 Matplotlib 库 − 可视化决策树

import matplotlib.pyplot as plt from sklearn.tree import plot_tree # Visualize the Decision Tree using Matplotlib plt.figure(figsize=(20,10)) plot_tree(dtc, filled=True, feature_names=iris.feature_names, class_names=iris.target_names) plt.show()

sklearn.tree模块中的plot_tree函数可用于绘制决策树。我们可以输入训练好的决策树分类器,填充参数填充节点颜色,feature_names参数标记特征,以及标记目标类的class_names参数。我们还指定了figsize参数 设置图形大小并调用显示函数以显示图表。

完整实现示例

以下是使用 iris 数据集 − 的完整示例,使用 Python 中

import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # Load the iris dataset iris = load_iris() # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # Create a Decision Tree classifier dtc = DecisionTreeClassifier() # Fit the classifier to the training data dtc.fit(X_train, y_train) # Make predictions on the testing data y_pred = dtc.predict(X_test) # Calculate the accuracy of the classifier accuracy = np.sum(y_pred == y_test) / len(y_test) print("Accuracy:", accuracy) # Visualize the Decision Tree using Matplotlib import matplotlib.pyplot as plt from sklearn.tree import plot_tree plt.figure(figsize=(20,10)) plot_tree(dtc, filled=True, feature_names=iris.feature_names, class_names=iris.target_names) plt.show()

输出

这将生成一个如下的决策树图——

Accuracy: 0.9777777777777777

如你所见,图中展示了决策树的结构,每个节点代表基于特征值的决策,每个叶节点代表一个类别或数值。每个节点的颜色表示该节点样本的多数类别或数值,底部的数字表示到达该节点的样本数量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 15:34:40

GLM-TTS能否用于核电站巡检?辐射区机器人语音反馈

GLM-TTS能否用于核电站巡检?辐射区机器人语音反馈 在核岛深处,温度传感器突然报警——三号冷却管道B区读数突破安全阈值。此时没有一名工作人员能进入现场,唯一能“说话”的,是正在附近执行例行巡检的防辐射机器人。它缓缓转向摄像…

作者头像 李华
网站建设 2026/7/2 16:23:11

揭秘PHP微服务配置中心设计难点:5大核心组件全解析

第一章:PHP微服务配置中心的核心价值在现代微服务架构中,配置管理成为保障系统灵活性与可维护性的关键环节。随着服务实例数量的增长,硬编码配置或分散式配置文件的方式已无法满足动态环境的需求。PHP微服务通过引入集中化的配置中心&#xf…

作者头像 李华
网站建设 2026/7/1 11:27:45

GLM-TTS能否接入MyBatisPlus后台管理系统实现日志播报?

GLM-TTS能否接入MyBatisPlus后台管理系统实现日志播报? 在现代企业级系统运维中,一个常见的痛点是:日志写得再详细,没人看就等于没发生。尤其是在高并发、多人员协作的环境下,关键告警信息很容易被淹没在成千上万条记…

作者头像 李华
网站建设 2026/7/1 11:27:46

语音合成与huggingface镜像网站结合:加速大模型权重下载

语音合成与Hugging Face镜像网站结合:加速大模型权重下载 在智能语音应用快速落地的今天,开发者常常面临一个看似简单却极其耗时的问题:如何高效地将一个动辄数GB的语音合成模型从云端拉到本地?尤其是在国内网络环境下&#xff0…

作者头像 李华
网站建设 2026/7/1 11:27:44

语音合成在智能家居中的应用:基于GLM-TTS的本地化语音提醒

语音合成在智能家居中的应用:基于GLM-TTS的本地化语音提醒 在现代家庭中,智能音箱每天清晨用机械的声音播报天气:“今天气温26度,晴。”听起来高效,却总少了点人情味。如果这个声音换成你母亲温柔的叮嘱——“宝贝&…

作者头像 李华
网站建设 2026/7/1 11:27:47

GLM-TTS能否用于会议纪要转语音?提升信息传达效率

GLM-TTS能否用于会议纪要转语音?提升信息传达效率 在远程协作日益频繁的今天,企业会议数量激增,而会后整理出的纪要却常常“沉睡”在邮箱或文档系统中。员工不愿读、没空看,导致关键决策和任务分配被遗漏——这几乎是每个团队都面…

作者头像 李华