机器学习——决策树特征选择准则

news/2024/4/28 4:59:54/文章来源:https://blog.csdn.net/weixin_39753819/article/details/136916227

机器学习——决策树特征选择准则

决策树是一种强大的机器学习模型,它可以用于分类和回归任务。决策树通过树状结构对数据进行分类,每个内部节点表示一个特征,每个叶节点表示一个类别或一个数值。在决策树构建的过程中,特征的选择准则起着至关重要的作用。本篇博客将介绍决策树模型以及常用的特征选择准则,包括熵和条件熵、信息增益、信息增益比和基尼指数,并通过Python代码实现。

1. 决策树模型

决策树是一种基于树状结构进行决策的模型,它通过一系列的特征测试将数据集分割成不同的子集,直到数据集中的所有样本都属于同一个类别或达到预定义的停止条件为止。决策树有两种类型:分类树和回归树。在分类树中,叶节点表示类别标签;而在回归树中,叶节点表示数值。

2. 特征选择准则

2.1 熵和条件熵

熵是表示随机变量不确定性的度量,定义为:

H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i=1}^{n} p(x_i) \log p(x_i) H(X)=i=1np(xi)logp(xi)

其中, p ( x i ) p(x_i) p(xi)是随机变量 X X X取值为 x i x_i xi的概率。

条件熵是在已知随机变量 Y Y Y的条件下,随机变量 X X X的不确定性,定义为:

H ( X ∣ Y ) = − ∑ i = 1 n ∑ j = 1 m p ( x i , y j ) log ⁡ p ( x i ∣ y j ) H(X|Y) = -\sum_{i=1}^{n} \sum_{j=1}^{m} p(x_i, y_j) \log p(x_i|y_j) H(XY)=i=1nj=1mp(xi,yj)logp(xiyj)

其中, p ( x i , y j ) p(x_i, y_j) p(xi,yj) X X X取值为 x i x_i xi Y Y Y取值为 y j y_j yj的联合概率, p ( x i ∣ y j ) p(x_i|y_j) p(xiyj)是在已知 Y Y Y的条件下, X X X取值为 x i x_i xi的条件概率。

2.2 信息增益

信息增益是特征选择准则中常用的指标,表示在已知某个特征的条件下,对数据集分类的不确定性减少的程度。信息增益越大,说明特征对分类的贡献越大。信息增益的计算公式为:

Gain ( D , A ) = H ( D ) − H ( D ∣ A ) \text{Gain}(D, A) = H(D) - H(D|A) Gain(D,A)=H(D)H(DA)

其中, D D D是数据集, A A A是某个特征, H ( D ) H(D) H(D)是数据集 D D D的熵, H ( D ∣ A ) H(D|A) H(DA)是在已知特征 A A A的条件下,数据集 D D D的条件熵。

2.3 信息增益比

信息增益比是信息增益与特征自身熵的比值,用于解决信息增益偏向选择取值较多的特征的问题。信息增益比的计算公式为:

Gain_ratio ( D , A ) = Gain ( D , A ) H A ( D ) \text{Gain\_ratio}(D, A) = \frac{\text{Gain}(D, A)}{H_A(D)} Gain_ratio(D,A)=HA(D)Gain(D,A)

其中, H A ( D ) H_A(D) HA(D)是特征 A A A的熵。

2.4 基尼指数

基尼指数是衡量数据集纯度的指标,定义为数据集中随机抽取两个样本,类别不一致的概率。基尼指数越小,数据集的纯度越高。基尼指数的计算公式为:

G i n i ( D ) = ∑ k = 1 ∣ Y ∣ p k ( 1 − p k ) Gini(D) = \sum_{k=1}^{|\mathcal{Y}|} p_k (1 - p_k) Gini(D)=k=1Ypk(1pk)

其中, ∣ Y ∣ |\mathcal{Y}| Y是类别的个数, p k p_k pk是数据集 D D D中属于类别 k k k的样本的比例。

3. Python实现

接下来,让我们通过Python代码实现一个简单的决策树模型,并使用信息增益作为特征选择准则。我们将使用DecisionTreeClassifier类来构建决策树,并在西瓜数据集上进行分类。

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt# 加载西瓜数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建决策树模型
clf = DecisionTreeClassifier(criterion='entropy', random_state=42)
clf.fit(X_train, y_train)# 在测试集上进行预测
y_pred = clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)# 绘制决策树可视化图形
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()

在这里插入图片描述

运行以上代码,将得到决策树模型在测试集上的准确率。在这个例子中,我们使用了iris数据集,采用信息增益作为特征选择准则。

结论

本篇博客介绍了决策树模型以及常用的特征选择准则,包括熵和条件熵、信息增益、信息增益比和基尼指数。这些特征选择准则在决策树的构建过程中起着关键作用,帮助选择最优的特征来进行节点的分裂,从而提高模型的分类性能。

在Python实现部分,我们使用DecisionTreeClassifier类构建了一个简单的决策树模型,并在iris数据集上进行了分类实验。通过实验结果,我们可以看到决策树模型在测试集上达到了较高的准确率,这表明特征选择准则的选择对模型的性能具有重要影响。

总的来说,决策树模型是一种简单且有效的机器学习模型,特征选择准则的选择对决策树的构建和分类性能具有重要影响。在实际应用中,我们需要根据具体问题的特点和数据集的情况来选择合适的特征选择准则,以获得更好的分类结果。

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

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

相关文章

Python RPA简单开发实践(selenium登陆浏览器自动输入密码登陆)

打开csdn博客,简单版 class BS:def __init__(self, url):self.url url# self.password password# self.username usernamedef login_url(self):from selenium import webdriver# 不自动关闭浏览器option webdriver.ChromeOptions()option.add_experimental_opt…

C++从入门到精通——命名空间

命名空间 前言一、命名空间引例什么是命名空间 二、命名空间定义正常的命名空间定义嵌套的命名空间多个相同名称的命名空间 三、命名空间使用加命名空间名称及作用域限定符使用using将命名空间中某个成员引入使用using namespace 命名空间名称引用引用命名空间和引用头文件有什…

Zookeeper的系统架构

先看一张图: ZooKeeper 的架构图中我们需要了解和掌握的主要有: 1: ZooKeeper分为服务器端(Server) 和客户端(Client),客户端可以连接到整个ZooKeeper服务的任意服务器上&#xff…

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库,也是一种NoSQL数据库。 它支持多种数据类型,包括String、Map、Set、ZSet和List,以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础,提…

java反射应用:调用一个公共方法来间接调取其它各类方法

1.公共方法里用反射 2.通过反射调取进来的其它方法里,该方法想要调用另一个beanA来查询数据库,用Autowired 是不行的 因为beanA载入不了。这时需要利用上下文对象来获取beanA,来实现该方法里再查库的目的。 // / 方法4 import org.springframework.con…

Redis进阶(持久化、复制、集群、多线程、缓存)

Redis进阶 1.Redis持久化1.1 什么是Redis持久化?为什么需要持久化?1.2 Redis持久化方式——RDB(Redis DataBase)1.2.1 什么是RDB?1.2.2 备份文件位置1.2.3 触发RDB的方式1.2.3.1 自动触发1.2.3.2 手动触发1.2.3.3 其他触发方式 1.2.4 RDB优缺…

人工智能与大数据、云计算等其他技术的关联和区别是什么?

人工智能(AI)、大数据和云计算是当今科技领域的三大热门技术,它们之间存在密切的关联,但也有一些明显的区别。以下是它们之间的关联和区别: AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球顶尖AI…

hcia datacom课程学习(3):http与https、FTP

1.超文本传输协议:http与https (1)用来访问www万维网。 wwwhttp+html+URLweb (2)它们提供了一种发布和接受html界面的方法:当在网页输入URL后,从服务器获取html文件来…

leetcode每日一题 2642.设计可以求最短路径的图

题目详情 给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 edges 表示,其中 edges[i] [fromi, toi, edgeCosti] 表示从 fromi 到 toi 有一条代价为 edgeCosti 的边。 请你实现一个 Graph 类: Graph(int n, i…

MySQL面试汇总(一)

MySQL 如何定位慢查询 如何优化慢查询 索引及其底层实现 索引是一个数据结构,可以帮助MySQL高效获取数据。 聚簇索引和非聚簇索引 覆盖索引 索引创建原则 联合索引

【matlab程序】海洋资料的获取与分析--AO/NAO

海洋资料的获取与分析 相关数据代码等资料已上传入群中 海洋资料下载和介绍 AO和NAO指数均取自美国气候预测中心(Climate Prediction Center, CPC)发布的月平均指数,时间跨度为1950-2022年。由于AO和NAO在冬季最强,因此本文选取…

基于51单片机一氧化碳(CO)浓度检测报警仿真LCD显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机一氧化碳(CO)浓度检测报警仿真LCD显示( proteus仿真程序设计报告原理图讲解视频) 基于51单片机一氧化碳浓度检测报警仿真 1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链…

栅格地图路径规划:基于小龙虾优化算法(Crayfsh optimization algorithm,COA)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

深度学习(三)vscode加jupyter notebook插件使用

0.前言 哎呀,我本次的实验是在新电脑上使用的,之前的笔记本上的环境什么的我都是很久以前弄好了的,结果到了新电脑上我直接忘了是该怎么配的了,不过万幸,花了点时间,查查补补,现在总算是可以了。…

C# 读取二维数组集合输出到Word预设表格

目录 应用场景 设计约定 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 DataSet转二维数组 导出写入WORD表格 调用举例 小结 应用场景 存储或导出个人WORD版简历是招聘应用系统中的常用功能,我们通常会通过应用系统采集用户的个人简历信息…

赛氪网亮相中国人工智能产业发展联盟会议,共筑赛事生态新篇章

2024年3月14日至15日,备受瞩目的中国人工智能产业发展联盟(AIIA)第十一次全体会议在海南海口盛大召开。作为人工智能领域的重要交流与合作平台,此次会议吸引了300余位联盟成员单位代表齐聚一堂,共襄盛举。在这场人工智…

04. 【Android教程】Android 工程解析及使用

在上一章中已经搭建好了 Android 开发环境,本章我们将一起通过 Eclipse 创建我们的第一个 Android App。 1. 创建 Android 工程 首先打开 Eclipse,在菜单栏依次选择“New” -> “Android App Project”。如果是第一次创建,可能没有“Andr…

Redis项目实战

本文用用代码演示Redis实现分布式缓存、分布式锁、接口幂等性、接口防刷的功能。 课程地址:Redis实战系列-课程大纲_哔哩哔哩_bilibili 目录 一. 新建springBoot项目整合Redis 二. Redis实现分布式缓存 2.1 原理及好处 2.2 数据准备 2.3 Redis实现分布式缓存…

软件杯 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时,是直接操作与外部引脚关联的内部寄存器,例如,当设置P2_1为0时,就是将外部引脚的P21引脚…