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

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

决策树是一种强大的机器学习模型,它可以用于分类和回归任务。决策树通过树状结构对数据进行分类,每个内部节点表示一个特征,每个叶节点表示一个类别或一个数值。在决策树构建的过程中,特征的选择准则起着至关重要的作用。本篇博客将介绍决策树模型以及常用的特征选择准则,包括熵和条件熵、信息增益、信息增益比和基尼指数,并通过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数据集上进行了分类实验。通过实验结果,我们可以看到决策树模型在测试集上达到了较高的准确率,这表明特征选择准则的选择对模型的性能具有重要影响。

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

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

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

相关文章

JSqlParser的使用

简介 JSqlParse是一款很精简的sql解析工具,它可以将常用的sql文本解析成具有层级结构的语法树,我们可以针对解析后的节点进行处理(增加、移除、修改等操作),从而生成符合我们业务要求的sql,比如添加过滤条件等等 JSqlParse采用访问者模式 项…

随笔】Git -- 基本概念和使用方式(五)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。 概述 stateStyles是属性方法,可以…

【工具使用】VScode如何设置中文环境

操作步骤 1.1 安装中文插件 1.2 设置为中文,然后重启 按照插件的使用方法介绍设置中文: 按下“CtrlShiftP”组合键以显示“命令面板”: 输入“dispaly”,选择“Configure Display Language”: 选择“中文简体” …

Python Flask 表单的使用

新建templ;ates/index.html 内容如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form action"">账号&#xff1a;<input …

能耗采集与分析 用能计费与收费【产业园区综合计费——安科瑞解决方案】

背景 2022年《非电网直接供电电费收取公示暂行办法》的通知要求由商业综合体、产业园区、物业、写字楼等供电主体体应按照终端用户用电电压等级对应的目录电价收取电费&#xff0c;不得在电费中加收其他费用。&#xff0c;按照“终端用户用电电压等级目录平段电价上浮幅度”确…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

MNN 执行推理(九)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…

基于python+vue的O2O生鲜食品订购flask-django-nodejs-php

近年来互联网络的迅猛发展和电子终端设备的普及&#xff0c;赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术&#xff0c;时效性是它最大的特色&#xff0c;已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。…

【QT入门】 Qt自定义信号后跨线程发送信号

往期回顾&#xff1a; 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号 由于Qt的子线程是无法直接修改ui&#xff0c;需要发送信号到ui线程进行修改…

Linux centos 安装PHP8.2或其他版本等 仍显示5.4或者其他版本---需要修改环境变量

查询php文件 find / -name php 在不同的文件夹下查看php版本&#xff08;php安装路径每个人不一样&#xff0c;根据自己查到的php冷路径去执行&#xff09; 解决方法&#xff1a;环境变量中加上正确PHP版本的路径 编辑环境变量文件 vim /etc/profile 在文件里增加如何代码…

如何使用Excel创建一个行政考勤表

在企业和机构中&#xff0c;行政考勤管理是一项重要的日常工作&#xff0c;它涉及到员工的出勤情况、请假记录、加班情况等。使用Excel创建一个行政考勤表可以帮助管理者有效地记录和跟踪员工的考勤情况&#xff0c;下面将详细介绍如何使用Excel创建一个行政考勤表。 第一部分&…

重新配置node.js,npm,环境变量

起因是检查最近收到的一些朋友分享给我的各种资料&#xff0c;什么前端&#xff0c;后端&#xff0c;java,go,python等语言&#xff0c;想着将一个模拟QQ音乐的一个源代码进行跑通&#xff0c;看看有什么特别之处。如下图 出现了node环境路径问题&#xff0c;参考链接 https:/…

小孔平板应力集中问题matlab有限元编程【源码+PPT讲义】|三节点三角形单元|平面单元|稀疏矩阵 |Comsol网格

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

Domino中启用IPv6支持

大家好&#xff0c;才是真的好。 虽然这周末的新闻很多&#xff0c;例如HCL又发布了Nomad Web 1.0.11,还有Verse 3.2.1等更新。 但是但是&#xff0c;每周五的新闻大家看得很少&#xff0c;所以我们……留到下周五再讲述产品更新的新闻和信息吧。 今天讲的是Domino中如何启用…

【图解物联网】第6章 物联网与数据分析

6.1 传感器数据与分析 从前几章中我们已经了解到&#xff0c;只要把配备传感器的设备连接到网络&#xff0c;就能把所有的信息采集到物联网服务之中&#xff08;图6.1&#xff09;。 从工业角度而言&#xff0c;给工厂中的生产流水线和流通的产品打上电子标签&#x…

每日五道java面试题之springboot篇(二)

目录&#xff1a; 第一题. 你如何理解 Spring Boot 配置加载顺序&#xff1f;第二题. Spring Boot 中如何解决跨域问题 ?第三题. 什么是 CSRF 攻击&#xff1f;第四题. 比较一下 Spring Security 和 Shiro 各自的优缺点 ?第五题. bootstrap.properties 和 application.proper…

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

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

【效率提升】IDEA中书签功能的妙用

这里写目录标题 1.概述2.书签功能介绍2.1.书签创建和删除2.2.书签列表2.3.自定义书签名2.4.带标签的书签创建2.5.标签快速跳转&#xff08;1到9&#xff09;2.6.其他标签快捷键2.7.其他补充 3.写到最后 1.概述 在多年的代码开发工作中&#xff0c;有一些问题困扰我很长的时间&…

【python开发】安装配置启动+数据库管理+表管理+数据行管理+python操作Mysql及相关安全的问题

Mysql入门 一、安装&启动1、安装2、测试3、设置和修改root密码 二、数据库管理1、内置客户端操作&#xff08;1&#xff09;查看当前所有的数据库(show databases);&#xff08;2&#xff09;创建数据库&#xff1a;create database learn&#xff08;数据库名&#xff09;…