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

系列文章目录

  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'])

总结

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

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

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

相关文章

公众号提高数量

一般可以申请多少个公众号?目前公众号申请数量的规定是从2018年底开始实施的,至今没有变化。规定如下:1、个人可以申请1个个人主体的公众号;2、企业(有限公司)可以申请2个公众号;3、个体户可以申…

数组指针与函数指针

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

jetbrains卡顿(Pycharm等全家桶)终极解决方案,肯定解决!非常肯定!

话越短,越有用,一共四种方案,肯定能解决!!!非常肯定!! 下面四种解决方案,笔者按照实际体验后的结果,按照优先级从高到低排序。你只要按顺序试试就知道了。 m…

labelme等标注工具/数据增强工具输出JSON文件格式检查脚本

标注的文件太多了,还有用数据增强工具生成了一票的新数据。在转换或使用训练时候会报错,错误原因是json中语法有问题,这样会中断程序运行,调试造成很大困扰。 检查确实最后有问题,多写了一次 写一个脚本,用…

Leetcode—219.存在重复元素II【简单】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—219.存在重复元素II 实现代码 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> m;int n nums.size();for(int i 0; i < n; i) {if(m…

Qt 输入一组数,排序后用柱状图显示

Qt柱状图&#xff0c;需要使用到QChart模块&#xff0c;因此需要在安装Qt时勾选上QChart模块。然后在工程.pro文件中加上 QT charts 参考代码&#xff1a; //MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPushButton…

Unity UGUI TextMeshPro实现输入中文和表情包(Emoji)表情

目录 实现中文显示 准备工作 1、打开Window——TextMeshPro——FontAssetCreator 2、把字体文件放入SourceFont中 3、把CharacterSet改为Characters from File 4、把字体库文件放入Characters File 5、设置好参数点击Generate Font Atlas等待完成后保存 6、把生成后保存…

快速入门FastAPI中的Field参数

快速入门FastAPI中的Field参数 在构建RESTful API时&#xff0c;定义资源模型是至关重要的。FastAPI是一个用于构建API的现代Python web框架&#xff0c;它使用Pydantic库来处理数据验证和模型。在这个过程中&#xff0c;Field 参数起着关键的作用。 本教程将向您介绍如何在F…

谷歌正式发布最强 AI 模型 Gemini

2023年12月6日&#xff0c;谷歌公司宣布推出其被认为是规模最大、功能最强大的人工智能模型 Gemini。 Gemini将分为三个不同的套件&#xff1a;Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被认为具备最强大的能力&#xff0c;Gemini Pro则可扩展至多任务&#x…

探究Logistic回归:用数学解释分类问题

文章目录 前言回归和分类Logistic回归线性回归Sigmoid函数把回归变成分类Logistic回归算法的数学推导Sigmoid函数与其他激活函数的比较 Logistic回归实例1. 数据预处理2. 模型定义3. 训练模型4. 结果可视化 结语 前言 当谈论当论及机器学习中的回归和分类问题时&#xff0c;很…

C语言——指针(五)

&#x1f4dd;前言&#xff1a; 上篇文章C语言——指针&#xff08;四&#xff09;更加深入的介绍了不同类型指针的特点&#xff0c;这篇文章主要想记录一下函数与指针的结合运用以及const和assert关于指针的用法&#xff1a; 1&#xff0c;函数与指针 2&#xff0c;const 3&am…

Python基础语法详解,零基础入门必须掌握的知识点

文章目录 一、Python输出1、repr() 或 str() 转成字符串2、字符串填充空格进行格式化3、!a (使用 **ascii()**), !s (使用 **str()**) 和 !r (使用 **repr()**) 可以用于在格式化某个值之前对其进行转化 二、Python标识符三、Python保留字符&#xff08;关键字&#xff09;四、…

【CPCI会议、知网检索】第三届城市规划与区域经济国际学术会议(UPRE 2024)

第三届城市规划与区域经济国际学术会议&#xff08;UPRE 2024&#xff09; 2024 3rd International Conference on Urban Planning and Regional Economy 第三届城市规划与区域经济国际学术会议&#xff08;UPRE 2024&#xff09;于2024年4月19-21日在泰国曼谷举行。会议旨在…

Ubuntu安装nvidia GPU显卡驱动教程

Ubuntu安装nvidia显卡驱动 1.安装前安装必要的依赖 sudo apt-get install build-essential sudo apt-get install g sudo apt-get install make2.到官网下载对应驱动 https://www.nvidia.cn/Download/index.aspx?langcn 3.卸载原有驱动 sudo apt-get remove --purge nvidi…

【Python系列】Python函数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

帆软报表决策报表改变屏幕大小后出现字体大小或滚动条异常解决方案:双向自适应

帆软报表决策报表改变屏幕大小后出现字体大小或滚动条异常。 解决方案&#xff1a;在模板和报表块中配置双向自适应 在每一个报表块中设置&#xff1a;

HGNN复现

python版本&#xff1a;3.6.13 torch版本&#xff1a;http://download.pytorch.org/whl/cpu/torch-0.4.0-cp36-cp36m-win_amd64.whl 安装torch&#xff1a; pip install http://download.pytorch.org/whl/cpu/torch-0.4.0-cp36-cp36m-win_amd64.whl 除了numpy、matplotlib、…

Ubuntu环境下使用GDB调试C语言项目

1. 安装gdb //终端输入 sudo apt-get install gdb 2. 启动gdb gdb GDB常用命令大全&#xff0c;参考此篇博客 使用GDB调试C项目中的makefile 1.在内核配置中启用调试信息&#xff1a; 在内核配置中&#xff0c;确保启用了调试信息。可以通过以下步骤来配置内核&#xff1a…

验证码的多种生成策略

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客 第一种 a.导入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</ver…

解决Kettle无法传输生偏字的问题

最近在搞数据传输&#xff0c;然后涉及到人名的时候&#xff0c;难免会碰到生僻字&#xff0c;utf8是无法存储的&#xff0c;然后我把目标表改为utf8mb4&#xff0c;但是还是无法传输生僻字&#xff0c;这就很奇怪了&#xff0c;明明两边的数据库都是MySQL 5.7x&#xff0c;但是…