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

决策树(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(但在这种情况下,实际上类别是平分的)。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

侯捷C++面向对象高级编程(上)-2-构造函数

1.inline函数 2.访问级别 3.构造函数 4.重载

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

大模型知识库的使用

大模型知识库的使用通常涉及以下几个方面&#xff0c;使用大模型知识库可以提高信息检索的准确性和效率&#xff0c;促进知识的传播和应用。同时&#xff0c;也需要关注知识库的质量和更新&#xff0c;以确保提供的知识是准确和可靠的。北京木奇移动技术有限公司&#xff0c;专…

苏东坡传-读书笔记四

长江三峡&#xff0c;无人不知其风光壮丽&#xff0c;但对旅客而言&#xff0c;则是险象环生。此段江流全长二百二十余里&#xff0c;急流旋涡在悬崖峭壁之间滚转出入&#xff0c;水下暗石隐伏&#xff0c;无由得见&#xff0c;船夫要极其敏捷熟练&#xff0c;才可通行。三峡之…

使用shell脚本编写监控系统资源(CPU,内存,磁盘)使用情况

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月20日16点30分 &#x1f004;️文章质量&#xff1a;95分 目录 ————前言———— 1.本章目标 2.编写脚本 1.获取内…

关于vs code中Live Server插件安装后无法打开的问题

一、问题情况 安装好Live Server插件之后&#xff0c;点击open with live server只会出现界面右下角落的提示&#xff0c;但是不会跳转到浏览器的页面&#xff1a;如下所示&#xff1a; 二&#xff1a;解决步骤 1、首先进行扩展设置&#xff0c;默认将浏览器的设置为chrome浏览…

The difference between Manhattan distance and Cosine Distance

题意&#xff1a;为什么即使返回了相同的文本块&#xff0c;曼哈顿距离&#xff08;Manhattan Distance&#xff09;和余弦距离&#xff08;Cosine Distance&#xff09;之间还是存在差异&#xff1f; 问题背景&#xff1a; I am using the qdrant DB and client for embeddin…

Pytorch实战(二)

文章目录 前言一、LeNet5原理1.1LeNet5网络结构1.2LeNet网络参数1.3LeNet5网络总结 二、AlexNext2.1AlexNet网络结构2.2AlexNet网络参数2.3Dropout操作2.4PCA图像增强 前言 参考原视频&#xff1a;哔哩哔哩。 一、LeNet5原理 1.1LeNet5网络结构 LeNet-5&#xff0c;其中&…

如何安装和卸载软件?

如何安装和卸载软件&#xff1f; &#x1f4bb; 如何安装和卸载软件&#xff1f;——默语的详细教程摘要引言正文内容&#x1f5a5;️ 在Windows上安装和卸载软件安装软件卸载软件 &#x1f34f; 在Mac上安装和卸载软件安装软件卸载软件 &#x1f914; QA环节&#x1f4dd; 表格…

访客(UV)、点击量(PV)、IP、访问量(VV)概念

1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html

智慧校园-档案管理系统总体概述

智慧校园档案管理系统&#xff0c;作为教育信息化进程中的重要一环&#xff0c;它运用现代信息技术的力量&#xff0c;彻底改变了传统档案管理的面貌&#xff0c;为学校档案资源的收集、整理、存储、检索与利用开辟了全新的途径。这一系统全面覆盖学生、教职工、教学科研及行政…

今天天气正好,开锐界L去追风

早就想开着它来个惬意的自驾游&#xff0c;结果因为工作原因一直在忙东忙西&#xff0c;锐界L这车都是上下班代步使用&#xff0c;今天终于空闲下来了&#xff0c;带着它来郊区转一圈&#xff0c;顺便交一篇极其不正式的游记吧&#xff0c;写的不好。 本来打算去的远一点&…

mybatis的高级映射

mybatis的高级映射(重点) 表与表之间的关系&#xff1a; 一对一关系&#xff1a; 栗子&#xff1a;一个人对应一个身份证号 一对多关系&#xff1a; 栗子&#xff1a;一个用户可以有多个订单 1. 分析需求&…

第三届广东大学生网络安全线上晋级赛WirteUp

解题思路 Web Mypdf https://r0.haxors.org/posts?id15 消失的flag 开局一个Access Denied&#xff0c;先不慌 不知道啥原因&#xff0c;放进去随波逐流梭一下 用本地XFF查看网页的时候&#xff0c;发现了页面内容有变化了 那就抓包&#xff0c;然后在BurpSuite中进行修…

如何用Go语言进行Web应用的开发?附4个常用框架对比总结!

互联网诞生后的几十年里&#xff0c;互联网发生了爆炸性的发展&#xff0c;如今已席卷全球。因此&#xff0c;Web编程日益流行&#xff0c;Web编程的兴起不可忽视。 Go 是一门正在快速增长的编程语言&#xff0c;专为构建简单、快速且可靠的软件而设计。golang提供的net/http库…

CSS Flex弹性布局

一、传统布局与flex布局 1、传统布局 2、flex布局 二、flex布局原理 1、布局原理 2、flex布局体验 三、flex布局父项常见属性 1、常见的父项属性 2、flex-direction设置主轴的方向 3、justify-content 设置主轴上的子元素排列方式 4、flex-wrap 设置子元素是否换行 …

三英战吕布 | 第5集 | 温酒斩华雄 | 竖子不足与谋 | 三国演义 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第5️⃣集《三英战吕布》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台…

从0到1搭建Java开发环境(内涵超详细教程、软件、提供网盘链接直接一步到位!!!!)

软件部分 需要的软件为下面两个&#xff1a; IDEANavicat 需要的可以自行拿&#xff08;安装教程和软件&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1y3RoMt0ZapyJsj3P0DPaVA?pwdxr4p 提取码&#xff1a;xr4p 环境部分 需要的环境为以下几个&…

【QT】按钮类控件 显示类控件

目录 按钮类控件 Push Button 设置按钮图标 按钮设置快捷键 设置鼠标点击按钮重复触发 Radio Button 单选框分组 Check Box 显示类控件 Label 常用属性 设置文本格式 给Label设置图片 Label标签设置边框 设置文本对齐方式 设置文本自动换行 设置文本缩进 设置…

综合评价类模型——突变级数法

含义 首先&#xff1a;对评价目标进行多层次矛盾分解其次&#xff1a;利用突变理论和模糊数学相结合产生突变模糊隶属函数再次&#xff1a;由归一公式进行综合量化运算最终&#xff1a;归一为一个参数&#xff0c;即求出总的隶属函数&#xff0c;从而对评价目标进行排序分析特点…