03.有监督算法——决策树

1.决策树算法

决策树算法可以做分类,也可以做回归

决策树的训练与测试:

训练阶段:从给定的训练集构造出一棵树(从根节点开始选择特征,如何进行特征切分)

测试阶段:根据构造出来的树模型从上到下走一遍

一旦决策树构建好了,那么分类或预测任务就变得简单。难点在于如何构造出一颗树。或者说难点在于如何对数据特征进行重要程度的排序。

建立决策树的关键在于在当前状态下选择哪个属性作为分类依据。根据不同的目标函数,建立决策树主要有以下三种算法:

1.1. ID3(Iterative Dichotomiser)

熵:表示随机变量不确定性的度量,可以理解成物体内部的混乱程度。

信息熵:
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ {\rm{H(D) = - }}\sum\limits_{{\rm{k}} = 1}^K {{{|{C_{_k}}|} \over {|D|}}{{\log }_2}} {{|{C_{_k}}|} \over {|D|}} H(D)=k=1KDCklog2DCk

其中,K是类别,D是数数据集,Ck是类别K下的数据集。

信息增益:表示特征X使得类Y的不确定性减小的程度(表示分类后的专一性,希望分类后的结果是同类在一起)

条件熵
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) {\rm{H(D|A) = }}\sum\limits_{{\rm{i}} = 1}^n {{{|{D_i}|} \over {|D|}}H({D_i})} H(D∣A)=i=1nDDiH(Di)
其中,A是特征,i是特征取值。

信息增益构造决策树的步骤

1.根据不同分类特征,求出信息增益,并找出信息增益最大的特征作为当前的决策结点
2.更新子集,在自己中选取新的特征,求信息增益的最大的特征
3.若划分的子集只包含单一特征,则为分支的叶子结点

缺点

  • ID3没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于1;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值。

这么多缺点,那么有没有改进呢——C4.5

1.2. C4.5

C4.5是ID3算法的改进。相比ID3 选择属性用的是子树的信息增益,C4.5用的是信息增益率

此外,C4.5还有以下用途

  • 在决策树构造过程中,进行剪枝
  • 对非离散数据也能进行处理
  • 还能处理不完整数据

信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) g({\rm{D,A}}){\rm{ = H(D) - H(D|A)}} g(D,A)=H(D)H(D∣A)

信息增益率 g R ( D , A ) = g ( D , A ) H A ( D ) {g_R}({\rm{D,A}}){\rm{ = }}{{g(D,A)} \over {{H_A}(D)}} gR(D,A)=HA(D)g(D,A)

其中,公式 H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ {\rm{H(D) = - }}\sum\limits_{{\rm{k}} = 1}^K {{{|{C_{_k}}|} \over {|D|}}{{\log }_2}} {{|{C_{_k}}|} \over {|D|}} H(D)=k=1KDCklog2DCk,n是特征A的取值个数

注意:决策树 过拟合风险很大,理论上可以将数据完全分开。所以为了防止过拟合,就要进行剪枝操作:

  • 预剪枝:边建立决策树边进行剪枝的操作
  • 后剪枝:当建立完决策树 后进行剪枝操作

后剪枝:通过一定的衡量标准,具体来说:C4.5采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。

后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树

1.3. CART(Classification And Regression Tree)

Classification And Regression Tree(CART)是决策树中的一种。

这种决策树用基尼指数来选择属性(分类),或者用均方差来选择属性(回归)。

基尼指数:

G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) {\rm{G}}ini(p) = \sum\limits_{k = 1}^K {{p_k}} (1 - {p_k}) Gini(p)=k=1Kpk(1pk)

如果目标变量是离散的,称为分类树。最后取叶子结点的众数做分类结果。

如果目标变量是连续的,称为回归树。连续性目标没有类别概念,因此不能用熵进行计算,但是我们可以考虑另一种衡量物体内部混乱程度的指标:方差

对于任意划分特征A,对应的任意划分点s两边划分成数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:

min ⁡ a , s [ min ⁡ c 1 ∑ x i ∈ D 1 n ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ D 2 n ( y i − c 2 ) 2 ] {\min _{a,s}}[{\min _{{c_1}}}\sum\limits_{{x_i} \in {D_1}}^n {{{({y_i} - {c_1})}^2} + {{\min }_{c2}}\sum\limits_{{x_i} \in {D_2}}^n {{{({y_i} - {c_2})}^2}} } ] a,smin[c1minxiD1n(yic1)2+minc2xiD2n(yic2)2]
其中, c 1 {{c_1}} c1 D 1 {{D_1}} D1数据集的样本输出均值, c 2 {{c_2}} c2 D 2 {{D_2}} D2数据集的样本输出均值

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

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

相关文章

机器人项目:从 ROS2 切换到 ROS1 的原因

一、说明 机器人操作系统ROS是使用最广泛的机器人中间件平台。它在机器人社区中使用了10多年,无论是在业余爱好者领域还是在工业领域。ROS可用于各种微控制器和计算机,从Arduino到Raspberry Pi再到Linux工作站,它为电机控制器,视觉…

顺序栈Sequential-stack

0、节点结构体定义 typedef struct SqStack{int *base;int *top; } SqStack; 1、初始化 bool InitStack(SqStack &S) {S.base new int[Maxsize]; //eg. #define Maxsize 100if(!S.base){return false;}S.top S.base;return true; } 2、入栈 bool Push(SqStack &…

深入理解JMM和并发三大特性

并发和并行 并发和并行的目的都是为了使CPU的使用率最大化,这两个概念也是我们容易混淆的。 并行(Parallel) 并行是指在同一时刻,有多条指令在多个处理器上同时执行,因为并行要求程序能同时执行多个操作&#xff0c…

python连接PostgreSQL 数据库

执行如下命令安装 pip3 install psycopg2 python代码 Author: tkhywang 2810248865qq.com Date: 2023-08-21 11:42:17 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-21 11:51:56 FilePath: \PythonProject02\PostgreSQL 数据库.py Description: 这是默认设置…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道,操作系统是基于消息和事件处理的,所以我们只要找到该操作系统锁屏和解屏的那个事件,然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录; 下面是项目目录&#xff1a…

jQuery Editable Select可搜索下拉选项框

前言 可搜索的下拉选项框 源码地址:https://github.com/indrimuska/jquery-editable-select 可搜索的下拉选项框 引入依赖 <script src"//code.jquery.com/jquery-1.12.4.min.js"></script> <script src"//rawgithub.com/indrimuska/jquery…

漏洞指北-VulFocus靶场专栏-初级02

漏洞指北-VulFocus靶场02-初级 初级005 &#x1f338;phpunit 远程代码执行 (CVE-2017-9841)&#x1f338;step1&#xff1a;进入漏洞页step2&#xff1a; burpsuite 抓包,等待请求页&#xff0c;获得flag 初级006 &#x1f338;splunk 信息泄露 &#xff08;CVE-2018-11409&am…

传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析

1、DNS 服务器 DNS 服务器可以在一定程度上用作服务发现的机制&#xff0c;以下是其冲动服务发现的一些利弊 优势 广泛性&#xff1a; DNS是互联网的标准协议之一&#xff0c;已经广泛地被支持和使用。因此&#xff0c;使用DNS作为服务发现的机制可以借助现有的网络基础设施…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述&#xff1a; LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET&#xff0c;能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流&#xff1b;可耐受 42V 电压&#xff0c;简化了输…

85-最大矩阵

题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,…

SpringCloudGateway网关实战(一)

SpringCloudGateway网关实战&#xff08;一&#xff09; 目前对cloud的gateway功能还是不太熟悉&#xff0c;因此特意新建了对应的应用来尝试网关功能。 网关模块搭建 首先我们新建一个父模块用于添加对应的springboot依赖和cloud依赖。本模块我们的配置读取使用的是nacos&a…

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…

juc概述和Lock接口

目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…

[ MySQL ] — 复合查询和内外连接的使用

目录 复合查询 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 union union all 表的内连接和外连接 内连接 外连接 左外连接 右外连接 复合查询 多表查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查…

解决运行在微信小程序中报[ app.json 文件内容错误] app.json: app.json 未找到(env: Windows,mp,1.05.2204

找到project.config.json文件夹 添加 "miniprogramRoot": "unpackage/dist/dev/mp-weixin/", 即可

Docker之Compose

目录 前言 一、Docker-compose概述 1.1Docker Swarm与Docker Compose 1.1.1Docker Swarm 1.1.2Docker Compose 1.1.2.1 三层容器 ​编辑 二、YAML 2.1YAML概述 2.2注意事项 2.3Docker Compose 环境安装 2.3.1下载 三、Docker-Compose配置常用字段 四、Docker-com…

Python学习笔记_实战篇(二)_django多条件筛选搜索

多条件搜索在很多网站上都有用到&#xff0c;比如京东&#xff0c;淘宝&#xff0c;51cto&#xff0c;等等好多购物教育网站上都有&#xff0c;当然网上也有很多开源的比楼主写的好的多了去了&#xff0c;仅供参考&#xff0c;哈哈 先来一张效果图吧&#xff0c;不然幻想不出来…

06 mysql all查询 和 主键查询 和 非索引列查询

前言 本文主要调试一下 mysql 的如下两种查询语句 我们也来深入的看一下, 究竟如下两个普通的查询, mysql 做了什么事情 1. select * from user where id 991; 2. select * from user; 3. select * from user where name jerry991; 环境介绍 测试表 user schema 如下…

机器学习之数据清洗

一、介绍 数据清洗是机器学习中的一个重要步骤&#xff0c;它涉及对原始数据进行预处理和修复&#xff0c;以使数据适用于机器学习算法的训练和分析。数据清洗的目标是处理数据中的噪声、缺失值、异常值和不一致性等问题&#xff0c;以提高数据的质量和准确性。 二、方法 处理…

【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…