机器学习(六)
一,决策树:
简介:
决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。
结构组成:
根节点:初始的数据集全集,没有经过任何划分(最顶层的部分)
内部节点:代表对某个特征的测试,根据特征值将数据划分为子节点(中间部分)
叶子节点:代表最终的分类结果或回归值(最底层的部分)
学习过程:
①选择根节点:找到一个明显的特征,能将数据最纯净地分为两组
②递归:对每个子节点重复上述操作,直到所有样本都同属于一类(完全纯净) 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
构建决策树:
①数据准备和预处理:
从决策树的根结点开始,对数据进行数据清洗和特征处理或标签编码
②分割:
通过选择该特征后提供的最高信息增益的特性进行分割
③创建树的分支:
根据所选特性将数据集拆分成两个子集,并创建树的分支,后将数据集划分给分支
④递归:
对每个子节点重复上述操作,直到满足停止条件
停止条件:
- 节点纯度达标
- 达到预设的最大树深
- 继续分割的信息增益低于阈值(无显著信息增益)
- 子节点的样本数小于阈值(样本数过少)
One-Hot编码:
One-Hot编码是将包含K个类别的离散特征转换为K个二元特征,常用在构建决策树时,处理多类别特征。
举例:原始特征“颜色”包含三个类别:红,蓝,绿
经过One-Hot编码后生成三个新特征:是不是红色,是不是蓝色,是不是绿色
优点:可以将多类别特征转换为二元特征,每个特征仅对应一个类别,模型可以更灵活的选择分割点;可以避免算法对多取值特征的偏好
缺点:
1.增加特征数量,增加计算负担
2.降低单个特征的重要性,使得信息分散
3.过拟合风险
拆分连续值的决策树分支:
连续值的分割目标是找到某个阈值,将数据集分为两个子集,使得分割后的子集纯度最高。
实现步骤:
- 排序连续特征值
- 根据排完序的特征值点生成候选分割点
- 计算每个分割点之间的纯度
- 对比执行后分割
二,回归树模型:
回归树是一种用来预测连续数值的决策树模型,如用来预测房价,温度......。与分类树不同,分类树预测的是类别,而回归树预测的是连续的数值。
实现原理:
从根节点到叶节点,分而治之,将数据集划分为多个小区域,每个区域内的样本数尽可能相似,直到每个小区域足够纯净
拆分步骤:
①遍历所有特征
②遍历每个特征的所有可能分割点:
若为连续特征:尝试相邻值的中间点;若为离散特征,尝试每个类别
③选择最优分割点
衡量指标:均方误差(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:通过自助采样,从原始数据集中生成多个子集,每个子集训练一棵决策树
②随机特征选择:每棵树节点分裂时,随机选择部分特征作为候选,降低树之间的相关性,防止过拟合
训练过程:
- 有放回地抽样,从原始数据集中随机抽取N个样本作为训练集
- 用未参与训练的样本验证模型,无需额外的验证集
- 特征抽样:每个节点分裂时,从全部特征中随机选取子集
- 每棵树生长到最大深度||叶子节点纯度达标时停止
四,XGBoost:(类似贪心算法)
XGBoost是一种基于梯度提升树的集成算法,通过加法模型和前向分布算法逐步优化目标函数。每次训练后,把侧重点放在先前训练过但拟合效果不好的决策树上。
第一次循环:通过已有的训练集开始训练决策树
第二-N次循环:根据前一次循环产生的决策树的训练效果,侧重于选择训练不好的决策树,来进行训练。
XGBoost优点:
①可以选择默认拆分标准和停止标准
②内置正则化防止过拟合
五,决策树 VS 神经网络:
决策树:适用于数据量小,特征明显,训练速度快的场景,例如分群,评分。
神经网络:适用于数据量大,数据种类多样(图像,音频,文件),的场景。
相关文章:

机器学习(六)
一,决策树: 简介: 决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。 结构组成: 根节点:初始的数据集…...

结合unittest和pytest进行虚拟数据库测试
使用 pytest 和 MagicMock 模拟数据库操作,并测试假设的 create_user 函数,将用户添加到数据库中。 代码实现 from datetime import date from typing import List, Optional from unittest.mock import MagicMock from pydantic import BaseModel, Fi…...

Spring Boot 监听器(Listeners)详细教程
Spring Boot 监听器(Listeners)详细教程 目录 Spring Boot 监听器概述监听器核心概念最佳使用场景实现步骤高级配置详细使用场景总结 1. Spring Boot 监听器概述 Spring Boot 监听器(Listeners)基于 Spring Framework 的事件机制…...

工具介绍《githack》以及Git 命令行
一、Githack 工具介绍 Githack 是一个用于检测和利用网站 .git 目录泄露漏洞的安全工具。当网站错误配置导致 .git 目录可公开访问时,攻击者可通过该工具下载 .git 中的版本控制文件,并重建完整的项目源代码。 核心用途 检测 .git 目录泄露漏洞。从泄…...

【hello git】git rebase、git merge、git stash、git cherry-pick
目录 一、git merge:保留了原有分支的提交结构 二、git rebase:提交分支更加整洁 三、git stash 四、git cherry-pick 共同点:将 一个分支的提交 合并到 到另一个上分支上去 一、git merge:保留了原有分支的提交结构 现有一个模型…...

MR的环形缓冲区(底层)
MapReduce的大致流程: 1、HDFS读取数据; 2、按照规则进行分片,形成若干个spilt; 3、进行Map 4、打上分区标签(patition) 5、数据入环形缓冲区(KVbuffer) 6、原地排序ÿ…...

下载Hugging Face模型的几种方式
1.网页下载 直接访问Hugging Face模型页面,点击“File and versions”选项卡,选择所需的文件进行下载。 2.使用huggingface-cli 首先,安装huggingface_hub: pip install huggingface_hub 然后,使用以下命令下载模型࿱…...

Java 第十一章 GUI编程(2)
目录 GUI 事件处理 基本思路 添加事件监听器 对话框 实例 GUI 事件处理 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能&…...

Redis数据结构深度解析:从String到Stream的奇幻之旅(一)
Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...

7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...

【Git原理与使用一】Git概念与基本操作
文章目录 1. Git 的概念2. Git 的安装3. Git 的认识3.1 创建本地仓库3.2 配置Git3.3 认识工作区、暂存区、版本库 4. Git 的基本操作4.1、认识几个指令1)git add 添加命令2)git commit 提交命令3)git log 查看日志命令4)git cat-f…...

kettle工具使用从入门到精通(一)
安装 可以从链接: 官网(下载链接在Pentaho.pdf文件里)或者网络上查找对应的版本安装 Kettle (PDI) 版本与 JDK 版本对应关系 Kettle (PDI) 版本支持的 JDK 版本备注PDI 9.x 及以上JDK 11 或更高版本推荐使用 OpenJDK 或 Oracle JDK 11。PDI 8.xJDK 8 …...

Java 实现 Oracle 的 MONTHS_BETWEEN 函数
介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...

windows下使用msys2编译ffmpeg
三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...

Vivado常用的时序约束方法
1,create_clock :创建时钟约束 create_clock -period 20.000 -name sys_clk [get_ports sys_clk 该约束含义是创建一个时钟周期20ns的时钟,时钟名字为sys_clk。注意:如果是差分时钟,只需要约束差分时钟的P端,N端不用约束。 2,set_clock_uncertainty:设置时钟不确定性 s…...

力扣HOT100之哈希:1. 两数之和
这道题之前刷代码随想录的时候已经刷过好几遍了,看到就直接秒了。这道题主要是通过unordered_map<int, int>来建立哈希表,其中键用来保存向量中的元素,而对应的值则为元素的下标。遍历整个向量,当遍历到nums[i]时࿰…...

如何在rust中解析 windows 的 lnk文件(快捷方式)
一、从标题二开始看😁 这些天在使用rust写一个pc端应用程序,需要解析lnk文件获取lnk的图标以及原程序地址,之前并没有过pc端应用程序开发的经验, 所以在广大的互联网上游荡了两天。额🥺 今天找到了这个库 lnk_parse很…...

豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...

python语言总结(持续更新)
本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…...

leetcode15 三数之和
1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组,避免重复vector<vector<int>> out;//存放最终输…...

深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势
首先,让我们一起回顾运维的进化之路,然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前,我们称之为传统运维,其主要特点是: 人工驱动…...

Android Native 之 文件系统挂载
一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的ÿ…...

常用word python matlab快捷键
这里写自定义目录标题 WordMatlabpythonlinuxWord Matlab 1 结构体 字符串成员做索引,必须()类似python* 解包作用,转化字符串到属性类型 如果属性名存入列表 a = [“para1”] 比如stru1.para1 = [‘c’,‘d’]; 那么若要用a中para1来索引,必须要加圆括号; ==》 X Strut…...

MySQL------存储引擎和用户和授权
9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务: MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持,所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...

react拖曳组件react-dnd的简单封装使用
分享原因 由于项目中需要使用拖曳组件(需求:全局,跨组件,跨数据),我选择了react-dnd 概念 React DnD 是一组 React 高阶组件,我们在使用的时候只需要将目标元素进行包裹,就可以实现目标元素具有拖动或接受拖动的功能。…...

Excel中COUNTIF用法解析
COUNTIF 是 Excel 中一个非常实用的函数,用于统计满足某个条件的单元格数量。它的基本语法如下: 基本语法 COUNTIF(范围, 条件) 范围:需要统计的单元格区域,例如 A1:A10 或整列 A:A。 条件:用于判断哪些单元格需要被…...

Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!
目录 前言1. 变量(不生效)2. 延迟(生效) 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中,使用 onShow() 钩子来监听页面显示࿰…...

《论数据湖技术及其应用》审题技巧 - 系统架构设计师
论题写作框架 一、考点概述 “数据湖技术及其应用”这一论题主要考察的是软件测试工程师对于前沿数据存储与处理技术的理解及其在软件开发项目中的实际应用能力。具体而言,该论题涵盖了以下几个核心考点: 软件项目管理与开发经验 :要求考生…...

C++蓝桥杯基础篇(八)
片头 嗨~小伙伴们,大家好!今天我们一起来学习C蓝桥杯基础篇(八),练习相关字符串的习题,准备好了吗?Are you ready? Lets go! 第1题 字符串中的数字个数 这道题,我们用字符数组或者…...

AI 实战 - pytorch框架基于retinaface实现face检测
pytorch框架基于retinaface实现face检测 简介模型结构MobileNet-0.25SSH结构Head结构 Anchor编解码 环境开发环境 数据简介 训练测试参考 简介 RetinaFace是在RetinaNet基础上引申出来的人脸检测框架,所以大致结构和RetinaNet非常像。 主要改进:1.Mobi…...