【决策树】- 二分法处理连续值

news2024/10/23 12:02:43

二分法处理连续值

在决策树算法中,处理连续特征通常采用二分法,将其转化为离散特征。此方法通过寻找最佳分割点,将连续特征划分为两个区间。

1. 原理

二分法的核心思想是将连续值特征转换为离散值,以便于决策树的构建。通过选择合适的分割点,将数据集划分为两个部分,从而减少不纯度(如信息增益或基尼指数)。

2. 实现步骤

(1)排序:将连续特征的所有样本值进行排序,获取唯一值的列表。

(2)生成候选分割点:在排序后的连续值中,每两个相邻值之间生成候选分割点。假设排序后的连续特征值为 x1,x2,…,xn,则候选分割点为

(3)计算每个候选分割点的不纯度:对每个候选分割点,计算该点划分后的加权不纯度。常用的不纯度指标包括信息增益和基尼指数。以信息增益为例,设候选分割点为 p,划分后得到的子集为 D1和 D2​,则信息增益计算为:

其中,H(D)是数据集 D的熵,∣D1​∣和∣D2​∣分别是划分后两个子集的样本数量。

(4)选择最佳分割点:比较所有候选分割点的信息增益,选择信息增益最大的分割点作为最终分割点。

(5)更新特征:将连续特征按照最佳分割点划分为两个类别(如:x≤p和x>p),并使用离散化后的特征继续构建决策树。

简单部分实现

  实现了信息增益的函数,其中包含对连续特征的处理

    def info_gain(self, feature, y, entD, is_continuous=False):
        '''
        计算信息增益
        ------
        :param feature: 当前特征(属性)下所有样本值
        :param y:       对应标签值
        :return:        当前特征的信息增益, list类型,若当前特征为离散值则只有一个元素为信息增益,若为连续值,则第一个元素为信息增益,第二个元素为切分点
        '''
        m = y.shape[0]     #y的shape[0]是行数吧,也就是样本数
        unique_value = pd.unique(feature)     #属性a的av,例如:颜色有乌黑、青绿等
        if is_continuous:  #如果是连续值的话,需要进行二分(离散化),要根据最小信息熵找出最佳划分点
            unique_value.sort()  # 排序, 用于建立分割点
            split_point_set = [(unique_value[i] + unique_value[i + 1]) / 2 for i in range(len(unique_value) - 1)]  #在每两个值的区间取中点
            min_ent = float('inf')  # 挑选信息熵最小的分割点
            min_ent_point = None
            for split_point_ in split_point_set:

                Dv1 = y[feature <= split_point_]  #这是第一类的标签值
                Dv2 = y[feature > split_point_]   #这是第二类的标签值
                feature_ent_ = Dv1.shape[0] / m * self.entroy(Dv1) + Dv2.shape[0] / m * self.entroy(Dv2)        #套公式,信息增益公式负号后面的部分,越小越好

                if feature_ent_ < min_ent:
                    min_ent = feature_ent_
                    min_ent_point = split_point_
            gain = entD - min_ent   #信息增益公式

            return [gain, min_ent_point]  #返回该特征(属性)的信息增益值以及连续值划分点(二分)

        else:    #该特征为离散值
            feature_ent = 0     #信息增益公式负号后面的部分,越小越好
            for value in unique_value:   #遍历av
                Dv = y[feature == value]  # 当前特征中取值为 value 的样本,即书中的 D^{v}
                feature_ent += Dv.shape[0] / m * self.entroy(Dv)

            gain = entD - feature_ent  # 信息增益公式
            return [gain]

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

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

相关文章

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器

目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR&#xff08;无类别域间路由&#xff09; 目的IP & 当前路由器的子网掩码 …

R语言机器学习算法实战系列(九)决策树分类算法 (Decision Trees Classifier)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型模型的决策树预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模…

TCP协议四次挥手

1.第一次挥手&#xff1a;客户端发送FIN报文&#xff0c;请求断开连接。这一过程为主动关闭。客户端由ESTABLISHED转换为FIN-WAIT-1。 FIN和ACK置为1&#xff0c;表示这是一个请求结束报文。seqU表示在之前客户端已经发送的字节数。ackV则表示服务端向客户端发送确认消息累计的…

磁盘分区工具 DiskGenius Pro v5.5.0.1488 中文汉化版

DiskGenius 是一款专家级数据恢复软件&#xff0c;集数据恢复、硬盘分区、系统备份还原等多种功能于一身的超级工具软件&#xff0c;功能全面&#xff0c;安全可靠。可以提供磁盘的数据找回、备份、分区、修复、删除、格式化等操作&#xff0c;也能帮助用户修复磁盘坏道、彻底删…

从零构建大模型训练流程及原理(一)

这是一个大模型训练的系列文章&#xff0c;将从零开始手把手带大家构建大模型训练全流程。话不多说&#xff0c;开始发车~什么是大语言模型 1. LLMs是什么&#xff1f; 大型语言模型&#xff08;LLMs&#xff09;是基于Transformer架构的深度学习模型&#xff0c;旨在理解、生…

[枚举坤坤]二进制枚举基础

我们都知道数据是以二进制形式存储在计算机中的。当我们使用十进制数进行编程时&#xff08;如a10&#xff09;实际上计算机要先进行一步转码&#xff0c;将其化为二进制的形式进行计算。如果在编程的过程中我们可以直接越过转码这一步去操纵二进制形式进行运算&#xff0c;程序…

EMNLP 2024 个性化/风格化 文本生成 论文汇总(19篇主会论文)

引言&#xff1a;调研&#xff0c;搬砖… &#x1f60a; &#x1f318;&#x1f317;&#x1f316; &#x1f607; ✅ 笔者简介&#xff1a;Wang Linyong&#xff0c;NPU&#xff0c;2023级&#xff0c;计算机技术 研究方向&#xff1a;文本生成、大语言模型 文章目录 1 Perso…

【C++】STL----map和set

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;[C]二叉搜索树 &#x1f516; 流水不争&#xff0c;争的是滔滔不息 文章目录 一、set和map的简介setm…

Java设计模式梳理:行为型模式(策略,观察者等)

行为型模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了&#xff0c;所以把它放到最前面进行介绍。它比较简单&#xff0c;我就不废话&#xff0c;直接用代码说事吧。 下面设计的…

某ai gpt的bug

某ai gpt的bug 背景 遇到了一个奇怪的现象&#xff1a; 输入内容 2024-10-21 10:09:31,052 ERROR o.a.j.t.JMeterThread: Test failed! java.lang.IllegalArgumentException:输出结果

Android开发教程二维码扫描功能

Android开发教程二维码扫描功能 二维码扫描大一点的app都有的功能&#xff0c;因为扫一下真的很方便 一、思路&#xff1a; 用zxing库 二、效果图&#xff1a; 看视频更加直观点&#xff1a; Android开发教程实战案例源码分享-二维码扫描功能 三、关键代码&#xff1a; c…

音频声音怎么调大?将音频声音调大的几个简单方法

音频声音怎么调大&#xff1f;在现代生活中&#xff0c;音频内容无处不在&#xff0c;从在线课程和播客到音乐和电影&#xff0c;音频已经成为我们获取信息和娱乐的重要方式。然而&#xff0c;许多人在使用音频时可能会遇到一个常见问题&#xff1a;音频声音太小&#xff0c;无…

手机投屏到电脑上的scrcpy软件 scrcpy v2.4

下载&#xff1a;https://drive.uc.cn/s/b1285b1fb9f94?public1 最近的工作需要用到用手机演示一些操作&#xff0c;但是手机屏幕比较小&#xff0c;我就想把手机投到我的电脑上&#xff0c;然后电脑连接投影仪就行了。 scrcpy是一款开源的软件&#xff0c;在githus上可以下…

少儿编程学习,如何走,之点评一二

前言&#xff1a; 不少孩子在少儿机构学习编程的家长跟我反馈&#xff0c;机构学习孩子学了记不住&#xff0c;有些家孩子索性就不去&#xff0c;不愿意再谈编程学习之事。 从一位专业信息学教师出身的老师&#xff0c;稍作点评一二&#xff1a; 【同时也引用了一些主流媒体的…

力扣OJ算法题:合并两个有序链表

—————————————————————————————————————————— 正文开始 OJ算法题&#xff1a;合并两个有序链表 思路 创建一个新的空链表&#xff08;可以用malloc优化&#xff09;和两个指针L1、L2分别指向两个链表&#xff0c;遍历两个链表&am…

python poetry包管理的安装和使用

目录 设置国内(清华)镜像源和升级pip 安装poetry pycharm中使用 常用的poetry命令 本文背景为已经安装好python 设置国内(清华)镜像源和升级pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple python -m pip install --upgrade pip 安装po…

【峟思仪器】高边坡安全监测起到哪些作用

高边坡安全监测起到哪些作用?在当今的工程建设领域&#xff0c;高边坡监测犹如一道坚实的安全防线&#xff0c;其重要性不容小觑。无论是大型水利工程&#xff0c;还是交通基础设施建设&#xff0c;高边坡的稳定性都直接关系到工程的安全和周边环境的安危。高边坡监测在工程建…

在Debian上安装向日葵

说明&#xff1a; 因为之前服务器上安装了 PVE (Proxmox VE)&#xff0c;之前是用 Proxmox VE 进行服务器资源管理的。出于某些原因&#xff0c;现在不再通过 PVE构建的虚拟机来使用计算资源&#xff0c;而是通过 PVE 自带的 Debian 系统直接使用虚拟机资源&#xff08;因为积…

使用Python抓取房源信息

1. 引言 在当今大数据时代&#xff0c;网络爬虫成为获取信息的重要手段之一。本文将以某家二手房为例&#xff0c;演示如何使用Python爬虫抓取房源信息&#xff0c;并将这些信息保存到Excel文件中。 目标网站 2. 准备工作 2.1 安装必要的库 在开始之前&#xff0c;请确保你…

银行客户贷款行为数据挖掘与分析

#1024程序员节 | 征文# 在新时代下&#xff0c;消费者的需求结构、内容与方式发生巨大改变&#xff0c;企业要想获取更多竞争优势&#xff0c;需要借助大数据技术持续创新。本文分析了传统商业银行面临的挑战&#xff0c;并基于knn、逻辑回归、人工神经网络三种算法&#xff0…