机器学习实验二:决策树模型

系列文章目录

  1. 机器学习实验一:线性回归
  2. 机器学习实验二:决策树模型
  3. 机器学习实验三:支持向量机模型
  4. 机器学习实验四:贝叶斯分类器
  5. 机器学习实验五:集成学习
  6. 机器学习实验六:聚类

文章目录

  • 系列文章目录
  • 一、实验目的
  • 二、实验原理
  • 三、实验内容
  • 四、实验步骤
    • 1.数据集引入及分割
    • 2. 训练决策树
    • 3. 利用 CCP 进行后剪枝
  • 总结


一、实验目的

(1)了解 pandas 和 sklearn 数据科学库功能;
(2)掌握决策树原理,包括划分选择中三种经典指标信息增益、增益率和基尼
指数的优缺点;
(3)掌握剪枝处理方法及作用;
(4)学会通过精确率、召回率和 F1 值度量模型性能。

二、实验原理

决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过
程,由节点和有向边组成,结点有 2 种结构:内部节点表示一个特征或属性,叶
节点表示一个类别。它可以认为是 if-then 规则的集合,也可以认为是定义在特
征空间与类空间上的条件概率分布。
学习时,利用训练数据根据损失函数最小化的原则建立决策树模型。预测时,
对新的数据,利用决策树模型进行分类。决策树学习通常包括 3 个步骤:特征选
择、决策树的生成和决策树的修剪。

三、实验内容

使用 Python 读取数据集信息并利用 sklearn 训练决策树模型,随后使用生
成的决策树实现分类预测,调整决策树划分方法及剪枝方法,并根据精确率、召
回率和 F1 值度量模型性能。
(1)实验数据介绍
实验数据为来自 UCI 的鸢尾花三分类数据集 Iris Plants Database。
数据集共包含 150 组数据,分为 3 类,每类 50 组数据。每组数据包括 4 个
参数和 1 个分类标签,4 个参数分别为:萼片长度 sepal length、萼片宽度 sepal
width、花瓣长度 petal length、花瓣宽度 petal width,单位均为厘米。分类
标签共有三种,分别为 Iris Setosa、Iris Versicolour 和 Iris Virginica。
数据集格式如下图所示:在这里插入图片描述
为方便使用,也可以直接调用 sklearn.datasets 库中提供的 load_iris()
方法加载处理过的鸢尾花分类数据集。
(2)评价指标介绍
评价指标选择精确率 P、召回率 R、F1 度量值 F1。
具体代码实现时,可以直接调用 sklearn 库中的相应方法进行计算。

四、实验步骤

1.数据集引入及分割

将数据集按 2/3 训练集,1/3 测试集的比例进行随机分割。代码如下:

X = iris.data
y = iris.target
X_train,X_test,y_train,y_test = 
train_test_split(X,y,test_size=1/3,random_state=0)
print(' 数 据 集 样 本 数 : {}, 训 练 样 本 数 : {}, 测 试 集 样 本 数 :
{}'.format(len(X),len(X_train),len(X_test)))

2. 训练决策树

利 用 sklearn 提供的 DecisionTreeClassifier() 方 法 构 造 决 策 树 ,
DecisionTreeClassifier()方法的常用参数如下:
划分准则 criterion,可选:基尼指数 gini、信息增益 entropy、对数损失
log_loss,默认 gini;
最大树深度 max_depth,整数型,默认为不限制;
最大叶节点数 max_leaf_nodes,整数型,默认为不限制;
最大代价复杂度 ccp_alphat,非负浮点型,默认为 0.0。
我们这里分别利用三种不同的划分准则,以 4 为最大深度对树进行前剪枝。
以使用基尼指数的决策树为例,训练并查看树结构,代码如下:

gini_model = 
DecisionTreeClassifier(criterion='gini',max_depth=4,splitter='best')
gini_model.fit(X_train,y_train)
gini_y_pred = gini_model.predict(X_test)
tree.plot_tree(gini_model)
plt.show()

可以得到对应的树结构。可以看到,排除根节点,这棵决策树为 4 层的二叉
树,这也符合基尼指数划分方法的特点。计算该树的精确率、召回率和 F1 度量
值。
继续训练其他两种划分方式,在同等预剪枝条件下,对于信息增益 Entropy
方式划分,可以得到对应的决策树。
对于对数损失 log_loss 方式划分,能得到对应的决策树和性能结果。

3. 利用 CCP 进行后剪枝

CCP(Cost Complexity Pruning)为代价复杂度剪枝法,核心思想为在树构
建完成后,对树进行剪枝简化,使以下损失函数最小化:在这里插入图片描述

其中,T 为叶子节点个数,N 为所有样本个数,N_i 为第 i 个叶子节点上的
样本数,L_i 为第 i 个叶子节点的损失函数,α为待定系数,用于确定惩罚节点
个数,引导模型用更少的节点。
具体操作中,首先使用 cost_complexity_pruning_path()方法需要计算树
的 CCP 路径,得到 alpha 与树纯度的关系,具体代码如下:

pruning_path = gini_model.cost_complexity_pruning_path(X_train, y_train)
print("ccp_alphas:",pruning_path['ccp_alphas'])
print("impurities:",pruning_path['impurities'])

总结

以上就是今天要讲的内容,机器学习实验二:决策树模型

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

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

相关文章

linux管道_tee_xargs

5.2 管道 管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。 语法: command1 | command2 | command3...例: 查看passwd中最后3行内容。 cat /etc/passwd | tail -3 查看passwd中包含root所在行的第一条信息。 cat /etc/p…

FPGA串口接收解帧、并逐帧发送有效数据——1

FPGA串口接收解帧、并逐帧发送有效数据 工程实现的功能:FPGA串口接收到串口调试助手发来的数据,将其数据解帧。判断到正确的帧头和帧尾之后,将有效数据存入rx_data中;另一方面发送端将有效数据逐帧发送出去。 参考:正…

RAG落地实践、AI游戏开发、上海·深圳·广州线下工坊启动!星河社区重磅周

飞桨星河社区在成立的5年以来,已汇集660万AI开发者,覆盖深度学习初学者、在职开发者、企业开发者、高校教师、创业者等,已成为AI领域最具影响力的社区之一,无论是AI爱好者还是AI开发者,都能在这里探索AI的无限可能。飞…

城市分站建站系统源码 全新版本SEO推广优化排名高 附带完整的搭建教程

在过去的几年中,许多企业在建立网站时面临一些共同的问题:缺乏技术支持、不懂SEO、预算有限等。这些问题导致他们的网站无法充分发挥作用,无法在搜索引擎中获得良好的排名,进而影响到企业的业务发展。小编来给大家分享一款城市分站…

编译原理词法分析:NFA转DFA(原理+完整代码+可视化实现)

NFA转换为DFA 【本文内容摘要】 什么是DFA通过子集构造法将NFA转换为DFA生成DFA的dot文件并且形成可视化。 如果本文对各位看官有用的话,请记得给一个免费的赞哦(收藏也不错)! 文章目录 NFA转换为DFA一、什么是DFA二、NFA转换为…

k8s引用环境变量

一 定义环境变量 ① 如何在k8s中定义环境变量 env、configmap、secret补充: k8s 创建Service自带的环境变量 ② 从pod属性中获取 kubectl explain deploy.spec.template.spec.containers.env.valueFrom关注: configMapKeyRef、fieldRef 和 resour…

初探Maven

文章目录 一、Maven概述二、安装配置Maven(一)下载Maven(二)安装Maven(三)配置Maven 三、IDEA里配置Maven(一)版本情况说明(二)配置构建工具Maven 一、Maven概…

如何批量修改ppt中的字体?

ppt制作已经属于是复杂的操作了,当我们想要更换ppt中的字体,有没有什么快捷的方法呢?今天分享两个方法,一键修改ppt文件字体。 方法一: 找到功能栏中的编辑选项卡,点击替换 – 替换字体,在里面…

python加速方法:纯CPU多进程加速(joblib库)

我写C 代码喜欢用OpenMP进行加速,在不更改源代码情况下只做稍稍修改即可实现CPU利用率最大化,跨平台移植也没有问题。 python是个好东西,苦恼于密级计算的时候只能使用单核,使用多线程不奏效,因为毕竟它受限于语言本身…

【Go】Go语言基础内容

变量声明: 变量声明:在Go中,变量必须先声明然后再使用。声明变量使用 var 关键字,后面跟着变量名和类型,如下所示: var age int这行代码声明了一个名为 age 的整数变量。 变量初始化:您可以在声…

二叉树遍历 LeetCode 1038. 从二叉搜索树到更大和树

1038. 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 从图中可以看出,每个节点是BST右中左遍历时,遍历到的节点的值加上之前所有节点的值。 在遍历时可以使…

全球与中国木质颗粒燃料市场:增长趋势、竞争格局与前景展望

木质颗粒汽油的主要优点之一是环境永续性。木质颗粒被认为是碳中立的,因为燃烧过程中释放的二氧化碳量大约等于木材生长过程中吸收的二氧化碳量。这种封闭的碳循环减少了温室气体净排放并减轻了气候变迁的影响。作为一种可再生资源,木屑颗粒还可以透过促…

Python必备神器揭秘:15个最热门库全解析

更多资料获取 📚 个人网站:ipengtao.com Python生态系统中拥有大量优秀的库,为开发者提供了广泛且强大的工具。本文将介绍15个最受欢迎的Python库,包括它们的功能、优点以及示例代码,帮助读者更全面地了解和使用这些库…

spring boot mybatis TypeHandler 源码如何初始化及调用

目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17,my…

深入理解Go语言GC机制

1、Go 1.3之前的标记-清除(mark and sweep)算法 Go 1.3之前的时候主要用的是普通的标记-清除算法,此算法主要由两个主要的步骤: 标记(Mark phase)清除(Sweep phase) 1&#xff09…

7.Vue UI库

7.Vue UI库 7.1移动端常用的UI库 (1) Vant:Vant 4 - A lightweight, customizable Vue UI library for mobile web apps.A lightweight, customizable Vue UI library for mobile web apps.https://vant-ui.github.io/vant/#/zh-CN &#xf…

提升--22---ReentrantReadWriteLock读写锁

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 ReadWriteLock----读写锁1.读写锁介绍线程进入读锁的前提条件:线程进入写锁的前提条件:而读写锁有以下三个重要的特性: Reentran…

个体诊所电子处方系统哪个好用,推荐一款可以自由设置配方模板能够填写病历可以查询历史病历的门诊处方笺软件

一、前言 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。 2、中医西医均可用此软件开电子处方,支持病历记录查询,药品进出库管理,支持配方模板一键导入电子处方。 二、电子…

Amazon CodeWhisperer 正式可用, 并面向个人开发者免费开放

文章作者:深度-围观 北京——2023年4月18日,亚马逊云科技宣布,实时 AI 编程助手 Amazon CodeWhisperer 正式可用,同时推出的还有供所有开发人员免费使用的个人版(CodeWhisperer Individual)。CodeWhisperer…

SAP ABAP Tree Control 对象与ALV Grid 对象关联

Tree Control 对象与ALV Grid 对象关联 在双击 Tree 对象时,变更ALV Trid 对象的显示,实现界面如图9-11 所示。 Screen 设计界面如图9-12 所示。 主程序: REPORT ytest36. DATA: ok_code TYPE sy-ucomm,save_ok TYPE sy-ucomm. DATA: wa_co…