机器学习(六)

一,决策树:

简介:

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

结构组成:

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

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

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

学习过程:

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

        ②递归:对每个子节点重复上述操作,直到所有样本都同属于一类(完全纯净) 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 神经网络:        

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

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

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

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

相关文章

求最小公倍数

求最小公倍数 编程实现: 求最小公倍数。 具体要求: 1、小猫询问“请输入第一个数”,并在列表中求出该数的质因数放入列表A,例如输入12; 2、小猫依次询问“请输入第二个数”,并在列表中求出该数的质因数…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣(LeetCode) 算法代码: class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件,帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件: ——————按钮 Button:基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答:基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁: 马谡 知识图谱:四大名著总共4个图谱 红楼梦图谱 …

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

大模型应用开发学习笔记

Huggingface 下载模型: model_dirr"G:\python_ws_g\code\LLMProject\session_4\day02_huggingface\transformers_test\model\uer\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021…

虚拟卡 WildCard (野卡) 保姆级开卡教程

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 本篇教程为 WildCard 的介绍以及开卡教学,要了解不同平台(Grok、Talkatone 等)的订阅方式请移步《订阅教程》分类 当我们想要充值国外平台会员时,一般都需要使…

C++实现3D(EasyX)详细教程

一、关于3D 我们看见,这两个三角形是相似的,因此计算很简单 若相对物体的方向是斜的,计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1:Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序,该应用程序包含一个水平进度条(QSlider),并且需要通过多线程来更新进度条的值。请根据以下要求完成代码: 界面设计: 使用 QS…

【算法day2】无重复字符的最长子串 两数之和

无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …

XHR请求解密:抓取动态生成数据的方法

在如今动态页面大行其道的时代,传统的静态页面爬虫已无法满足数据采集需求。尤其是在目标网站通过XHR(XMLHttpRequest)动态加载数据的情况下,如何精准解密XHR请求、捕获动态生成的数据成为关键技术难题。本文将深入剖析XHR请求解密…

【漫话机器学习系列】121.偏导数(Partial Derivative)

偏导数(Partial Derivative)详解 1. 引言 在数学分析、机器学习、物理学和工程学中,我们经常会遇到多个变量的函数。这些函数的输出不仅取决于一个变量,而是由多个变量共同决定的。那么,当其中某一个变量发生变化时&…

[C语言日寄] 字符串操作函数的使用及其拓展

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

ssm_mysql_暖心家装平台

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…

地下井室可燃气体监测装置:守护地下安全,防患于未“燃”!

在城市的地下,隐藏着无数的燃气管道和井室,它们是城市基础设施建设的重要部分,燃气的使用,给大家的生活提供了极大的便利。在便利生活的背后,也存在潜在的城市安全隐患。 近年来,地下井室可燃气体泄漏事故…

EasyCVR平台赋能农业产业园:AIoT驱动的视频监控与大数据分析解决方案

随着现代农业的快速发展,农业产业园区的规模不断扩大,管理复杂度也随之增加。为了提高农业生产效率、保障农产品质量安全、实现精细化管理和智能化运营,视频信息化建设成为现代农业产业园的重要发展方向。EasyCVR作为一款功能强大的视频监控与…

【三维生成】StarGen:基于视频扩散模型的可扩展的时空自回归场景生成

标题:《StarGen: A Spatiotemporal Autoregression Framework with Video Diffusion Model for Scalable and Controllable Scene Generation》 项目:https://zju3dv.github.io/StarGen 来源:商汤科技、浙大CAD、Tetras.AI 文章目录 摘要一、…

STM32 进阶 定时器

在stm32中定时器大概分为4类 1、系统定时器:属于arm内核,内嵌在NVIC中 2、高级定时器:可以用来刹车和死区 3、通用定时器:可以用来输出pwm方波 4、基本定时器:只能记数 系统定时器注意: 1、系统定时器…