机器学习(六)

一,决策树:

简介:

        决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。

结构组成:

        根节点:初始的数据集全集,没有经过任何划分(最顶层的部分)

        内部节点:代表对某个特征的测试,根据特征值将数据划分为子节点(中间部分)

        叶子节点:代表最终的分类结果或回归值(最底层的部分)

学习过程:

        ①选择根节点:找到一个明显的特征,能将数据最纯净地分为两组

        ②递归:对每个子节点重复上述操作,直到所有样本都同属于一类(完全纯净) or 没有更多的特征可用 or 达到的预设的树的深度(防止过拟合)

测量分类纯度(以区分猫狗为例):

        ①信息熵:

        熵(H)的函数图像如上图所示,当区分后的样本全为猫或狗时,熵为0;当样本中猫和狗的比例越接近于1时,熵越大。

        熵的函数:

        

        Pi是数据集中第i类样本的比例

        当所有样本属于同一类时(完全纯净),熵为0;当样本类别均匀分布时,熵最大。

        ②基尼指数:

                基尼指数衡量随机抽取的两个样本类别不一致的概率,数值越小纯度越高

                公式:

                

                当数据集完全纯净时,基尼指数为0;当数据集类别分布均匀时,基尼指数为0.5

        ③分类误差:

                分类误差表示使用多数类作为标签时误分类的概率

                公式:

                                

                完全纯净时误差为0,二分类均匀分布时误差为0.5

        三者比较:

        计算效率:基尼指数=分类误差>信息熵

        敏感度:信息熵>基尼指数>分类误差

三者在决策树中的应用:

        信息增益(熵):通过父节点减去子节点熵的加权平均值来选择增益最大的特征

        基尼指数:类似信息增益,选择使基尼指数下降最多的分割

信息增益的实现:     

        信息增益:在构建决策树过程中,使用某个特征对数据集实现分割后,学习熵的减少程度。

        核心:选择使信息增益最大的特征进行分割(即使学习熵减少程度最大),最大程度上纯化子节点

实现步骤:

        ①计算父节点的熵:

        ②按照特征分割,计算子节点的熵

        ③计算加权子节点的熵

        ④计算信息增益

举例: 

        假设父节点中有10个样本,6个属于A类,4个属于B类

        ①计算父节点的熵:代入信息熵的公式得到父节点的熵为0.971

        ②按特征分割数据,计算子节点的熵:用特征将这10个样本分为两个子节点,每个子节点有5个样本,分别计算两个子节点的熵。

                                子节点1(4A1B):熵为0.722

                                子节点2(2A3B):熵为0.971

        ③计算加权子节点熵:

                加权熵=(5/10)*子节点1熵+(5/10)*子节点2熵=0.8465

        ④计算信息增益:

               信息增益=父节点熵-加权子节点熵=0.1245

构建决策树:

①数据准备和预处理:

                从决策树的根结点开始,对数据进行数据清洗和特征处理或标签编码

②分割:

                 通过选择该特征后提供的最高信息增益的特性进行分割

③创建树的分支:

                根据所选特性将数据集拆分成两个子集,并创建树的分支,后将数据集划分给分支

④递归:

                对每个子节点重复上述操作,直到满足停止条件

停止条件:

  1. 节点纯度达标
  2. 达到预设的最大树深
  3. 继续分割的信息增益低于阈值(无显著信息增益)
  4. 子节点的样本数小于阈值(样本数过少)
One-Hot编码:

        One-Hot编码是将包含K个类别的离散特征转换为K个二元特征,常用在构建决策树时,处理多类别特征。

        举例:原始特征“颜色”包含三个类别:红,蓝,绿

                  经过One-Hot编码后生成三个新特征:是不是红色,是不是蓝色,是不是绿色

        优点:可以将多类别特征转换为二元特征,每个特征仅对应一个类别,模型可以更灵活的选择分割点;可以避免算法对多取值特征的偏好

        缺点:

                        1.增加特征数量,增加计算负担

                        2.降低单个特征的重要性,使得信息分散

                        3.过拟合风险

拆分连续值的决策树分支:

        连续值的分割目标是找到某个阈值,将数据集分为两个子集,使得分割后的子集纯度最高。

实现步骤:

  1. 排序连续特征值
  2. 根据排完序的特征值点生成候选分割点
  3. 计算每个分割点之间的纯度
  4. 对比执行后分割

二,回归树模型:

        回归树是一种用来预测连续数值的决策树模型,如用来预测房价,温度......。与分类树不同,分类树预测的是类别,而回归树预测的是连续的数值。

        实现原理:

                从根节点到叶节点,分而治之,将数据集划分为多个小区域,每个区域内的样本数尽可能相似,直到每个小区域足够纯净

        拆分步骤:

                        ①遍历所有特征

                        ②遍历每个特征的所有可能分割点:

                        若为连续特征:尝试相邻值的中间点;若为离散特征,尝试每个类别

                        ③选择最优分割点

        衡量指标:均方误差(EMS)

                均方误差是衡量一个区域内样本的数值差异的程度,均方误差越小,该区域内样本越相似。

        通过计算分割后的左右子区域的均方误差和,选择使总均方误差和最小的分割方式。

        回归树的构建流程:

                从根节点开始,遍历所有特征---> 遍历分割点,选择使总均方误差最小的分割方式--->生成子节点,按分割条件将数据分为左右两个部分 ---> 递归处理子节点,重复上述步骤 ---> 达到停止条件(回归树达到预测树深||区域内样本数过少||均方误差下降不明显)

        代码实现及运行结果:

from sklearn.tree import DecisionTreeRegressor
import pandas as pd

# 示例数据:房屋面积(㎡)和价格(万元)
data = pd.DataFrame({
    '面积': [80, 120, 100, 90, 150],
    '价格': [300, 450, 400, 350, 500]
})

# 训练回归树模型
model = DecisionTreeRegressor(max_depth=2)  # 限制树深度为2
model.fit(data[['面积']], data['价格'])

# 预测新样本
new_house = pd.DataFrame({'面积': [110]})
predicted_price = model.predict(new_house)
print(f"预测价格:{predicted_price[0]:.1f}万元")  # 输出:预测价格:425.0万元
        决策树模型中的放回抽样:

                从原始的数据集中有放回地随机抽取样本的方法,每次抽取时,每个样本被选中的概率相同,而且可能被重复选中。每个训练子集的样本数与原始数据集相同

三,随机森林算法:

        随机森林算法是一种通过组合多个决策树的算法(集成树)。

        集成方法:

                ①Bagging:通过自助采样,从原始数据集中生成多个子集,每个子集训练一棵决策树

                ②随机特征选择:每棵树节点分裂时,随机选择部分特征作为候选,降低树之间的相关性,防止过拟合

        训练过程:
  1. 有放回地抽样,从原始数据集中随机抽取N个样本作为训练集
  2. 用未参与训练的样本验证模型,无需额外的验证集
  3. 特征抽样:每个节点分裂时,从全部特征中随机选取子集
  4. 每棵树生长到最大深度||叶子节点纯度达标时停止
四,XGBoost:(类似贪心算法) 

        XGBoost是一种基于梯度提升树的集成算法,通过加法模型和前向分布算法逐步优化目标函数。每次训练后,把侧重点放在先前训练过但拟合效果不好的决策树上。

        第一次循环:通过已有的训练集开始训练决策树

        第二-N次循环:根据前一次循环产生的决策树的训练效果,侧重于选择训练不好的决策树,来进行训练。

        XGBoost优点:

                        ①可以选择默认拆分标准和停止标准

                        ②内置正则化防止过拟合

五,决策树 VS 神经网络:        

        决策树:适用于数据量小,特征明显,训练速度快的场景,例如分群,评分。

        神经网络:适用于数据量大,数据种类多样(图像,音频,文件),的场景。

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

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

相关文章

大语言模型学习--向量数据库

向量数据库 向量 向量是多维数据空间中的一个坐标点。 向量类型 图像向量 文本向量 语音向量 Embedding 非结构化数据转换为向量过程 通过深度学习训练,将真实世界离散数据,投影到高维数据空间上,通过数据在空间中间的距离体现真实世界…

DeepSeek V3 源码:从入门到放弃!

从入门到放弃 花了几天时间,看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的,但为什么模型结构需要这样设计,为什么参数需要这样设置呢?知其然,但不知其所以然。除了模型结构以外,模型的训练数据、训练…

mapbox进阶,模仿百度,简单实现室内楼层切换

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️fill-extrusion三维填充图层样式1.4 ☘…

【Bert系列模型】

目录 一、BERT模型介绍 1.1 BERT简介 1.2 BERT的架构 1.2.1 Embedding模块 1.2.2 双向Transformer模块 1.2.3 预微调模块 1.3 BERT的预训练任务 1.3.1 Masked Language Model (MLM) 1.3.2 Next Sentence Prediction (NSP) 1.4 预训练与微调的关系 1.5 小结 二、BERT…

Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴

注:本文为 “ Vim 中鼠标右键粘贴、跨系统复制粘贴问题解决方案” 相关文章合辑。 未整理去重。 Linux 入门:vim 鼠标不能右键粘贴、跨系统复制粘贴 foryouslgme 发布时间 2016 - 09 - 28 10:24:16 Vim 基础 命令模式(command - mode&…

使用查询,休眠-唤醒方式,POLL方式,异步通知方式,读取输入设备信息

查询方式: APP调用open函数时,传入“O_NONBLOCK”表示非阻塞,就可以以非阻塞方式,也就是查询方式用read函数去读取,如果没有数据的话,就会立刻返回一个错误。 如果我们打开这个文件时没有传入“NONBLOCK”参…

【Java篇】算术如诗,逻辑似梦:Java 编程中的运算符探寻

文章目录 Java 运算符:在计算与逻辑之中追寻编程的哲理1.前言2. 算术运算符2.1 基本四则运算符:加减乘除( - * / %)2.2 除法与取余2.3 增量运算符( --)2.4 自增/自减运算符 3. 关系运算符3.1 关系运算符 4.…

Ae 效果详解:VR 转换器

Ae菜单:效果/沉浸式视频/VR 转换器 Immersive Video/VR Converter VR 转换器 VR Converter效果能够在 2D、球面投影、立方图、球形图等格式之间转换,并支持调整摄像机视角,适用于 VR 视频格式适配、画面校正和动画视角调整等,确保…

无显示器安装访问树莓派3B+

一、硬件准备 树莓派3B,适配器(供电),读卡器和SD卡 二、软件下载及安装 安装过程都是默认选项,一直点击下一步即可,在选择安装路径时可以改到你自己想装的盘里。 1.树莓派系统镜像 官网地址&#xff1…

Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式

路由组件和一般组件 路由组件 一般放到pages或view目录 一般组件 一般放到component目录 切换路由 切换路由时,组件和执行挂载和卸载 路由的工作模式 Hash模式 缺点 1.不美观,路径带#号 优点 1.兼容性好 一般适用于管理系统 History模式 缺点…

多线程初阶(一)

文章目录 1.线程和进程的区别2.创建线程2.1Thread类2.2Runnable接口2.3匿名类创建Thread子类对象创建后台线程 3.Thread常⻅⽅法4.中断线程4.1中断标记(Interrupt Flag)4.2调⽤ interrupt() ⽅法 5.线程状态 1.线程和进程的区别 1.进程中包含线程&#…

1.3 Spring Boot原理解析

Spring Boot通过起步依赖(如spring-boot-starter-parent和spring-boot-starter-web)简化项目配置,减少版本冲突和依赖配置代码量。它采用“约定大于配置”的设计思想,通过SpringBootApplication注解(包含SpringBootCon…

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】(C实现)N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…

第6章 定时器计数器

目录 6.1 定时计数器的结构框图 6.2 定时器的控制字 6.2.1 TMOD:工作方式控制寄存器 6.2.2 定时/计数器控制寄存器TCON 6.3 定时/计数器的4种工作方式 6.3.1 方式0、方式1(13位、16位定时计数方式) 6.3.2 方式2(常数自动重装入) 6.3.3 方…

JavaWeb基础一(Tomcat、Maven)

前言 web开发 web开发:Web开发是指在万维网或私有网络上创建和维护网站的工作。它包括网页设计、网页编程、数据库管理等多方面的技术。Web开发可以分为前端开发和后端开发,前端主要关注用户界面和用户体验,而后端则处理服务器、应用程序和…

写一写idea中使用tomcat启动activiti过程

一 环境 tomcat 9.0.62 activiti的war包版本 7.1.0.M6 二 操作 官网下载:https://www.activiti.org/get-started 2.1 先在idea中编辑配置 2.2 点击加号然后选择tomcat本地进行确认 2.3 点击部署之后下边小加号 选择第二个之后就是选择自己想要使用tomcat启动的…

基于开源库编写MQTT通讯

目录 1. MQTT是什么?2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么? MQTT(Message Queuing Terlemetry Transport)消息队列遥测协议;是…

MAVEN手动配置(阿里云)全教程

介于网上各种各样的MAVEN配置过程中方法大致相同却细节参差不齐,我总结了我遇见的一些问题,来完全的解决MAVEN手动配置的全过程,以及分享解决小毛病的经验。 所需材料: MAVEN3.9.9(下载适合自己的版本即可&#xff09…

从0到1入门Linux

一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…

pytest结合allure

Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…