Python28-1 机器学习算法之决策树

news2024/10/6 19:15:14

决策树(Decision Tree)

决策树算法是一种常用的机器学习算法,属于监督学习范畴。它可以用于分类和回归任务,具有易于理解和解释的特点。决策树通过递归将数据分割成更小的子集,构建一个树形结构,其中每个节点代表一个特征的测试,分支代表测试结果,叶子节点代表最终的分类或回归结果。

1. 基本概念
  • 根节点(Root Node):树的最顶端节点,包含所有数据样本。

  • 内部节点(Internal Nodes):每个内部节点表示一个特征的测试,根据测试结果将数据分成两个或多个子集。

  • 叶子节点(Leaf Nodes):树的末端节点,表示最终的分类或回归结果。

  • 分支(Branches):从一个节点到下一个节点的路径,代表特征测试的结果。

2. 构建过程

构建决策树的过程涉及以下几个步骤:

  1. 选择最优特征:在每个节点选择一个特征来分割数据。选择的标准通常是信息增益、信息增益率或基尼指数等。

  2. 数据分割:根据选择的特征和阈值,将数据分割成子集。

  3. 递归分割:对每个子集重复上述步骤,直到满足停止条件,如所有数据属于同一类或达到最大树深度。

  4. 构建树形结构:将上述分割过程形成树形结构,根节点和内部节点代表特征测试,叶子节点代表最终预测。

3. 特征选择标准
  • 信息增益(Information Gain):衡量特征在分割数据后信息熵的减少量。选择信息增益最大的特征进行分割。

  • 基尼指数(Gini Index):用于衡量数据集的不纯度。选择基尼指数最小的特征进行分割。

  • 信息增益率(Gain Ratio):信息增益的一种改进,考虑了特征取值的不同数量,选择信息增益率最大的特征进行分割。

4. 优点和缺点

优点

  • 易于理解和解释,适合展示和解释复杂决策

  • 可以处理数值型和类别型数据

  • 不需要太多的数据预处理(如标准化、归一化)

缺点

  • 容易过拟合,特别是当树很深时

  • 对于有噪声的数据敏感,可能导致不稳定的树结构

  • 决策树可能偏向于那些具有较多类别的特征

5. 应用

决策树在很多领域都有广泛的应用,例如:

  • 医疗诊断:根据病人的症状和检查结果,预测疾病

  • 金融:信用评分、欺诈检测

  • 市场营销:客户分类、行为预测

  • 制造业:质量控制、故障诊断

6. 示例

一个简单的决策树分类问题示例是预测某个学生是否会通过考试,特征可以包括学习时间、上课出勤率、是否完成作业等。决策树会根据这些特征逐步分割数据,最终在叶子节点给出“通过”或“不通过”的预测。

                是否完成作业?
                /       \
             是          否
            /             \
        学习时间 > 2小时?    不通过
        /         \
      是           否
     /             \
通过          不通过

通过这个例子可以看到,决策树通过逐层分割特征,将数据分成不同的子集,最终在叶子节点给出预测结果。以下是一个简单的代码示例:

import matplotlib.pyplot as plt  # 用于绘图
from sklearn.datasets import load_iris  # 用于加载Iris数据集
from sklearn.tree import DecisionTreeClassifier, plot_tree  # 前者用于创建决策树分类器,后者用于可视化决策树
from sklearn.model_selection import train_test_split  # 用于将数据集分为训练集和测试集
from sklearn.metrics import accuracy_score  # 用于计算预测的准确率

# 加载Iris数据集
iris = load_iris()  # 调用load_iris函数加载Iris数据集,并将其存储在变量iris中
X = iris.data  # 将Iris数据集中的特征数据存储在变量X中
y = iris.target  # 将Iris数据集中的目标标签存储在变量y中

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  # 将数据集X和y分为训练集和测试集,test_size=0.3表示30%的数据用作测试集,random_state=42设置随机种子以保证结果可重复

# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)  # 创建一个DecisionTreeClassifier对象,random_state=42设置随机种子以保证结果可重复
clf.fit(X_train, y_train)  # 使用训练集数据X_train和y_train训练决策树分类器

# 预测测试集
y_pred = clf.predict(X_test)  # 使用训练好的决策树分类器对测试集X_test进行预测,并将预测结果存储在变量y_pred中

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)  #调用accuracy_score函数,计算预测结果y_pred与真实标签y_test的准确率,并将结果存储在变量accuracy中
print(f'Accuracy: {accuracy:.2f}')

# 可视化决策树
plt.figure(figsize=(20,10))  # 创建一个新的图形,并设置图形的尺寸为20x10英寸
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names.tolist(), rounded=True)  # 调用plot_tree函数绘制决策树,节点用颜色填充,颜色深浅表示样本数量,rounded=True:使用圆角矩形表示节点
plt.show()

可视化结果:

图片

在决策树的可视化结果中,每个节点包含了多个信息。这些信息帮助我们理解每个节点的决策过程。

以下是对每个节点中数据的解释:

1.Feature and Threshold(特征和阈值)

  • 每个内部节点(非叶子节点)显示用于分割数据的特征和阈值。

  • 例如,如果节点显示 petal length (cm) <= 2.45,表示根据 petal length (cm) 特征,值小于等于 2.45 的样本被分到左子树,值大于 2.45 的样本被分到右子树。

2.Gini(基尼系数)

  • 基尼系数用于衡量数据集的不纯度。基尼系数越小,数据集越纯(即单一类别的样本比例越高)。计算公式为其中 ( pi ) 是第 ( i ) 类的样本比例。

3.Samples(样本数量)

  • 每个节点中样本的总数量。例如,如果节点显示 samples = 50,表示该节点包含50个样本。

4.Value(类别分布)

  • 每个节点中不同类别样本的数量。

  • 例如,如果节点显示 value = [10, 40],表示该节点包含10个属于第一类的样本和40个属于第二类的样本。

5.Class(类别)

  • 每个节点中占多数的类别(仅叶子节点)。例如,如果节点显示 class = versicolor,表示该节点的多数类别是 versicolor

假设我们有如下的决策树节点可视化结果:

petal length (cm) <= 2.45
gini = 0.5
samples = 100
value = [50, 50]
class = setosa

这个节点的信息解释如下:

  • petal length (cm) <= 2.45:使用花瓣长度作为特征,阈值是2.45。花瓣长度小于等于2.45的样本会被分到左子树,大于2.45的样本会被分到右子树。

  • gini = 0.5:基尼系数为0.5,表示数据集的不纯度较高(这通常是根节点或接近根节点的情况)。

  • samples = 100:该节点包含100个样本。

  • value = [50, 50]:这100个样本中,有50个属于第一类(例如,setosa),50个属于第二类。

  • class = setosa:在这个节点中,占多数的类别是 setosa(但在这种情况下,实际上类别是平分的)。

这些信息帮助我们理解模型如何基于特征一步步做出决策。以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KV260视觉AI套件--PYNQ-DPU-Resnet50

目录 1. 简介 2. 代码解析 3. 全部代码展示 4. 总结 1. 简介 本文以 Resnet50 为例&#xff0c;展示使用 PYNQ 调用 DPU 运行 Resnet50 网络的详细过程&#xff0c;并对其中关键代码做出解释。 PYNQ是一个针对Xilinx Zynq平台的Python开发框架&#xff0c;它允许开发者使…

学校教室NTP电子钟时间是如何同步北京时间的?-讯鹏时钟

在学校教室里&#xff0c;NTP 电子钟精准地显示着时间&#xff0c;与北京时间保持高度同步&#xff0c;为师生们提供了可靠的时间参考。那么&#xff0c;它是如何做到这一点的呢&#xff1f; NTP 电子钟能够与北京时间同步&#xff0c;主要依赖于网络时间协议&#xff08;NTP&a…

准化 | 水系统碳中和标准体系初见成效

2024年5月31日&#xff0c;中华环保联合会发布《团体标准公告 2024年第10号&#xff08;总第78号&#xff09;》&#xff0c;批准发布了由中华环保联合会提出并归口的《废水处理温室气体监测技术规程》(T/ACEF 142-2024)、《工业水系统碳排放核算方法与报告指南》(T/ACEF143-20…

数据驱动:Facebook的广告策略与商业模式

在现代数字经济中&#xff0c;数据已经成为新的石油&#xff0c;驱动着企业的增长和创新。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;充分利用其庞大的用户数据和先进的算法技术&#xff0c;建立了一个高度精确和高效的广告生态系统。这不仅推动了平台自…

qtreewidget 美化,htmlcss和qss 不是一个概念!已解决

这种样式的美化&#xff0c; 能气死个人&#xff0c;css 一个单词搞定&#xff0c;非要 在qss中。多少个单词不知道了。 m_tree_widget->setStyleSheet("QTreeView{background:transparent; selection-background-color:transparent;}""QTreeView::branch{b…

PyTorch之nn.Module与nn.functional用法区别

文章目录 1. nn.Module2. nn.functional2.1 基本用法2.2 常用函数 3. nn.Module 与 nn.functional3.1 主要区别3.2 具体样例&#xff1a;nn.ReLU() 与 F.relu() 参考资料 1. nn.Module 在PyTorch中&#xff0c;nn.Module 类扮演着核心角色&#xff0c;它是构建任何自定义神经网…

这次发现的开源版本我愿意称之为最具学习价值的商城系统|商城源码点击进入

这是一款我发现的强大、灵活、易用的商城系统&#xff0c;成为我的的首选商城框架&#xff0c;让我的商城开发事半功倍&#xff01;这款开源商城项目具有多元的商业模式满足了任何使用场景的需求。 有S2B2C供应链商城、B2B2C多商户商城、O2O外卖商城、B2C单商户商城、社区团购、…

全网最详细,零基础学会AI绘画Stable Diffusion,学不会来打我!

前言 什么是Stable Diffusion 自从去年10月份Stable Diffusion开源以来&#xff0c;仅过了半年的时间&#xff0c;如今它已经能够创作出精美细致的二次元插画&#xff0c;媲美真人的赛博Coser&#xff0c;以及具有独特风格的AI动画。 无论你只是感兴趣&#xff0c;还是想了解…

旅游管理系统-计算机毕业设计源码16021

摘 要 本文旨在设计和实现一个基于Spring Boot框架的旅游管理系统。该系统通过利用Spring Boot的快速开发特性和丰富的生态系统&#xff0c;提供了一个高效、可靠和灵活的解决方案。系统将实现旅游景点信息的管理、线路规划、跟团游玩、旅游攻略、酒店信息管理、订单管理和用户…

有哪些手持小风扇品牌推荐?五大手持小风扇诚意推荐!

在炎炎夏日&#xff0c;一款便携且高效的手持小风扇无疑是消暑的必备神器。为了帮助大家轻松应对酷暑&#xff0c;我们精心挑选了五大手持小风扇品牌进行诚意推荐。这些品牌不仅拥有出色的降温效果&#xff0c;更在外观设计、便携性、续航能力及操作便捷性上表现卓越。接下来&a…

第三方软件测试公司分享:软件渗透测试的测试内容和注意事项

软件渗透测试是一种通过模拟攻击的方式来评估软件系统的安全性和漏洞&#xff0c;以发现并修复系统中的安全弱点。保护用户的数据和信息不被恶意攻击者利用&#xff0c;也是软件产品开发流程中重要的环节&#xff0c;可以帮助开发团队完善产品质量&#xff0c;提高用户满意度。…

代码随想录-二叉搜索树①

目录 二叉搜索树的定义 700. 二叉搜索树中的搜索 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 98. 验证二叉搜索树 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 530. 二叉搜索树的最小绝对差 题目描述&#x…

03:Spring MVC

文章目录 一&#xff1a;Spring MVC简介1&#xff1a;说说自己对于Spring MVC的了解&#xff1f;1.1&#xff1a;流程说明&#xff1a; 一&#xff1a;Spring MVC简介 Spring MVC就是一个MVC框架&#xff0c;Spring MVC annotation式的开发比Struts2方便&#xff0c;可以直接代…

c/c++语言的一种日志的编写办法

今日分享一下&#xff0c;从某源码中看到这种日志编写方式&#xff0c;很强。可以借鉴。 这个函数调用的日志函数是不一样的&#xff0c;仔细观看&#xff1a; 这几种日志输出函数&#xff0c;背后都调用了相同的调用。 与之对应的区别就是&#xff0c;函数名称的差异取决于…

【云原生监控】Prometheus 普罗米修斯从搭建到使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…

【Python基础篇】一篇文章入门Python,进入Python的世界

文章目录 0.前言1.打印&#xff08;Hello&#xff0c;World&#xff09;2.创建变量3.打印升级3.1 打印一句话中间加变量3.2 sep设置分隔符3.3 end和换行 4. 注释 0.前言 大家好&#xff0c;我是小辰&#xff0c;前几天做了个重大的决定&#xff0c;学习python。 首先&#xff0…

wine烧录stm32教程

前言 使用环境 ubuntu22.04 因为stlnk的线太短了并且容易扯断开&#xff0c;想使用串口进行烧录&#xff0c;但是又不想每次烧录代码都拔下短接帽(暂时不知道stm32flash怎么支持ISP一键下载)&#xff0c;故写下此教程步骤一:安装wine 首选我们要下载wine&#xff0c;由于国内下…

跨国企业与IP地址定位的商业策略

随着经济全球化的发展&#xff0c;许多企业都选择拓宽国际市场&#xff0c;而跨国企业需要在全球范围内进行高效的市场运营和管理&#xff0c;以应对不同市场的需求和竞争。IP地址定位技术能够通过识别用户的地理位置&#xff0c;为企业提供重要的数据支持&#xff0c;帮助他们…

记录搭建一台可域名访问的HTTPS服务器

一、背景 近期公司业务涉及到微信小程序&#xff0c;即将开发完成需要按照微信小程序平台的要求提供带证书的域名请求服务器。 资源背景介绍如下&#xff1a; 1、域名 公司已有一个二级域名&#xff0c;再次申请新的二级域名并且实现ICP备案不仅需要花重金重新购买&#xff0c;…

深入浅出:进程管理的艺术

目录 进程的定义 进程的特征 进程的状态 进程与程序的区别 进程的控制和管理 进程的特点 1. 虚拟内存空间的分配 2. 时间片轮转调度 图解&#xff1a; 进程段 数据段&#xff08;Data Segment&#xff09; 正文段&#xff08;Text Segment&#xff09; 堆栈段&…