【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

1. 决策树概念

通过不断的划分条件来进行分类,决策树最关键的是找出那些对结果影响最大的条件,放到前面

我举个列子来帮助大家理解,我现在给我女儿介绍了一个相亲对象,她根据下面这张决策树图来进行选择。比如年龄是女儿择偶更看中的,那就该把年龄这个因素放在最前面,这样可以节省查找次数。收入高的话就去见,中等的话还要考虑工作怎么样。

       决策树通过历史数据,找出数据集中对结果影响最大的特征,再找第二个影响最大的特征。若新来一个数,只要根据我们已经建立起的决策树进行归类即可。


2. 决策树的信息熵

        用来表示随机数据不确定性的度量,信息熵越大,表示这组数据越不稳定,而信息熵越小,则数据越稳定、越接近、越类似。

        信息熵公式:  H(x)=ni=1P(i)logP(i)2 代表某一个特征中每一个值出现的概率

上个例子中的年龄的基尼系数是:Gini(年龄) = 1 – (5/15)^2 - (5/15)^2 - (5/15)^2

在建立决策树时,基尼系数越小的,就把它放在最前面


5. 预剪枝和后剪枝

        树的层级和叶子节点不能过于复杂,如果过于复杂,会导致过拟合现象(过拟合:训练时得分很高,测试时得分很低)。预剪枝和后剪枝都是为了防止决策树太复杂的手段

5.1 预剪枝

        在决策树的建立过程中不断调节来达到最优,可以调节的条件有:

(1)树的深度:在决策树建立过程中,发现深度超过指定的值,那么就不再分了。

(2)叶子节点个数:在决策树建立过程中,发现叶子节点个数超过指定的值,那么就不再分了。

(3)叶子节点样本数:如果某个叶子结点的个数已经低于指定的值,那么就不再分了。

(4)信息增益量或Gini系数:计算信息增益量或Gini系数,如果小于指定的值,那就不再分了。

优点:预剪枝可以有效降低过拟合现象,在决策树建立过程中进行调节,因此显著减少了训练时间和测试时间;预剪枝效率比后剪枝高

缺点:预剪枝是通过限制一些建树的条件来实现的,这种方式容易导致欠拟合现象:模型训练的不够好。

5.2 后剪枝

在决策树建立完成之后再进行的,根据以下公式:

C = gini(或信息增益)*sample(样本数) + a*叶子节点个数

C表示损失,C越大,损失越多。通过剪枝前后的损失对比,选择损失小的值,考虑是否剪枝。

a是自己调节的,a越大,叶子节点个数越多,损失越大。因此a值越大,偏向于叶子节点少的,a越小,偏向于叶子节点多的。

优点:通常比预剪枝保留更多的分支,因此欠拟合风险比预剪枝要小。

缺点:但因为后剪枝是再数建立完成之后再自底向上对所有非叶子节点进行注意考察,因此训练时间开销比预剪枝要大。

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

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

相关文章

0068【Edabit ★☆☆☆☆☆】I‘d Like a New Shade of Blue, Please

0068【Edabit ★☆☆☆☆☆】I’d Like a New Shade of Blue, Please math numbers Instructions I have a bucket containing an amount of navy blue paint and I’d like to paint as many walls as possible. Create a function that returns the number of complete wal…

【如何学习Python自动化测试】—— 自动化测试环境搭建

1、 自动化测试环境搭建 1.1 为什么选择 Python 什么是python,引用python官方的说法就是“一种解释型的、面向对象、带有励志语义的高级程序设计语言”,对于很多测试人员来说,这段话包含了很多术语,而测试人员大多是希望利用编程…

CLEARTEXT communication to XX not permitted by network security policy 报错

在进行网络请求时,日志中打印 CLEARTEXT communication to XX not permitted by network security policy 原因: Android P系统网络访问安全策略升级,限制了非加密的流量请求 Android P系统限制了明文流量的网络请求,之下的版本…

和鲸科技创始人范向伟受邀出席“凌云出海,来中东吧”2023华为云上海路演活动

11月9日,华为云“凌云出海,来中东吧”系列路演活动第二场在上海正式开启。聚焦“创业全球化”,本次活动由华为云携手阿布扎比投资办公室(ADIO)举办,旨在与渴望出海发展的优秀创业者们共探出海中东新商机。 …

【GAN】数据增强基础知识

最近要用到,但是一点基础都没有,故开个文章记录一下笔记 目录 GAN DCGAN WGAN EEGGAN GAN 参考 生成对抗网络(GAN) - 知乎 (zhihu.com) 文章 [1406.2661] Generative Adversarial Networks (arxiv.org) 代码 GitHub - …

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

传输层安全协议TLS——密码学概述

文章目录 一、TLS1.3基础理论知识二、TLS机密性三、TLS1.3 密钥配送四、TLS1.3 消息完整性五、TLS1.3 身份验证与中间人攻击 一、TLS1.3基础理论知识 TLS 1.3 是一种用于保障网络通信安全的协议&#xff0c;它是 TLS&#xff08;Transport Layer Security&#xff09;协议的最…

一个美观且功能丰富的 .NET 控制台应用程序开源库

推荐一个美观且功能丰富的 .NET 控制台应用程序开源库&#xff0c;从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库&#xff0c;用于创建美观、功能丰富的控制台&#xff08;命令行&#xff09;应用程序。它提供了一组易于使用的 API&#xff0c;…

VScode 配置用户片段

文件->首选项->配置用户片段->新建全局用户片段 后续就可以通过vv3来直接生成下面的代码 {// Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // description. Add comma separated ids of the l…

阿里云崩了,总结我们从云上搬到线下经历了什么

我们做钢铁行业云的时候&#xff0c;也曾购买过某讯的云服务器。当时某讯做活动&#xff0c;头3年比较便宜&#xff0c;大概买了40台左右云服务器。 但是&#xff0c;3年期间使用云服务器的经历&#xff0c;体验并不好&#xff1a;1.我们云服务器的密码都是随机生成的&#xff…

Shell 使用日期或计数器 命名 文件

date获取系统时间&#xff0c;"%Y_%m_%d_%H_%M_%S"指定格式&#xff0c;$time 输出时间&#xff0c; ~/Desktop/ $newFile指定位置下的文件夹 #!/bin/bashtime$(date "%Y_%m_%d_%H_%M_%S") newFile$time".log" echo $time > ~/Desktop/$newF…

多视图聚类的论文阅读

当聚类的方式使用的是某一类预定义好的相似性度量时&#xff0c; 会出现如下情况&#xff1a; 数据聚类方面取得了成功&#xff0c;但它们通常依赖于预定义的相似性度量&#xff0c;而这些度量受原始方法的影响:当输入维数相对较高时&#xff0c;往往是无效的。 1. Deep Mult…

C++ 编写动态二维double型数据类Matrix

【问题描述】 编写一个程序&#xff0c;定义一个安全、动态二维double型的数组类Matrix。 实现Matrix table(row,col)定义row行col列的二维数组, row和col为正整数&#xff1b;实现table(i,j)访问table的第i行第j列的元素&#xff0c;行号和列号从0开始&#xff1b;实现Matri…

解决Requests中使用httpbin服务器问题:自定义URL的实现与验证

问题背景 在使用Python的Requests模块进行单元测试时&#xff0c;可能会遇到无法使用本地运行的httpbin服务器进行测试的问题。这是因为测试脚本允许通过环境变量HTTPBIN_URL指定用于测试的本地httpbin实例&#xff0c;但在某些测试用例中&#xff0c;URL是硬编码为httpbin.or…

Linux 系统目录结构

Linux 系统目录结构 登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放…

linux(centos7)常用命令 开启关闭防火墙

查看防火墙状态 centos7 systemctl status firewalld.service 运行上述命令后&#xff0c;如果看到有绿色字样标注的“active&#xff08;running&#xff09;”&#xff0c;说明防火墙是开启状态。 开启防火墙 centos7 systemctl start firewalld.service 关闭防火墙 c…

Java 实现统计文件字符

要求 编写程序&#xff0c;统计英文文本文件中的字符数目和单词数目。程序运行时&#xff0c;输入要统计的文件的名称&#xff0c;程序处理后输出字符数目和单词数目。 代码 import java.util.*; import java.io.IOException; import java.nio.file.*; public class Main3{p…

PbootCMS 应用快速迁移至浪潮信息 KeyarchOS 云服务器

本文我们以 PbootCMS 应用为例&#xff0c;详细介绍如何使用 X2Keyarch 迁移工具将其从 CentOS 系统迁移到浪潮信息 KeyarchOS 系统。 背景介绍 众所周知&#xff0c;CentOS 是最流行的红帽克隆版&#xff0c;因为免费&#xff0c;所以它的安装量甚至比红帽本身要大得多。本来…

Docker:深入探讨Kong开源API 网关的力量

1、简述 在当今数字化的时代,应用程序和服务之间的通信变得愈发复杂。为了简化和增强这种通信,开发者们经常使用API(Application Programming Interface)。API网关是管理、监控和安全维护API通信的关键工具之一。而在众多API网关中,Kong凭借其开源的特性、可扩展性和强大…

在Rust编程中使用泛型

1.摘要 Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以用于多种不同的具体数据类型。下面的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。 2.在函数定义中使用泛型 当使用泛型定义函数时&#xff0c;本来在函…