信息熵与信息增益 Python 3.12 实战:从公式到代码,5步实现决策树特征选择
信息熵与信息增益 Python 3.12 实战从公式到代码5步实现决策树特征选择决策树算法中特征选择直接影响模型的分类性能。理解信息熵与信息增益的数学本质并将其转化为可落地的Python代码是掌握决策树核心原理的关键一步。本文将用5个可执行的步骤带您从理论公式推导到完整代码实现最终构建一个可复用的信息增益计算模块。1. 信息熵量化不确定性的数学工具想象一个天气预报系统如果某地365天都是晴天预测结果毫无悬念但如果晴雨概率各占50%预测难度陡然上升。信息熵正是量化这种不确定性的指标。1948年克劳德·香农在《通信的数学理论》中首次提出熵的概念其计算公式为import numpy as np def entropy(p): 计算信息熵 p np.array(p) return -np.sum(p * np.log2(p, wherep0))关键点解析概率输入参数p需为概率分布列表如[0.6, 0.4]对数底数使用2为底数结果单位为比特(bit)零值处理wherep0避免对零取对数导致的数学错误测试不同概率分布下的熵值变化概率分布计算结果比特[1.0]0.0[0.5, 0.5]1.0[0.9, 0.1]0.469[0.7, 0.3]0.881注意熵值越大表示系统不确定性越高当所有类别概率相等时熵达到最大值2. 条件熵特征引入后的不确定性变化当引入某个特征如湿度后原始数据集会被划分为多个子集高湿度/低湿度。条件熵就是这些子集熵的加权平均def conditional_entropy(feature, target): 计算条件熵 categories np.unique(feature) weights [np.mean(feature cat) for cat in categories] sub_entropies [] for cat in categories: subset target[feature cat] prob np.bincount(subset) / len(subset) sub_entropies.append(entropy(prob)) return np.sum(np.array(weights) * np.array(sub_entropies))实际案例 假设我们有一个简单的天气数据集# 特征湿度0低1高 humidity np.array([0, 0, 1, 1, 0, 1]) # 标签是否打球0否1是 play np.array([1, 1, 0, 0, 0, 1]) print(f条件熵{conditional_entropy(humidity, play):.3f} bits)输出结果为0.792 bits表示在已知湿度条件下打球的不确定性。3. 信息增益特征重要性的量化指标信息增益是原始熵与条件熵的差值反映特征对分类不确定性的消除能力def information_gain(feature, target): 计算信息增益 base_entropy entropy(np.bincount(target) / len(target)) cond_entropy conditional_entropy(feature, target) return base_entropy - cond_entropy继续使用天气数据集示例base_ent entropy(np.bincount(play) / len(play)) print(f原始熵{base_ent:.3f} bits) print(f信息增益{information_gain(humidity, play):.3f} bits)典型输出原始熵1.000 bits 信息增益0.208 bits提示信息增益越大说明该特征对分类越重要。但需注意偏向取值较多特征的问题后续可考虑增益比改进4. 实战演练鸢尾花数据集特征选择让我们用scikit-learn的经典数据集验证我们的实现from sklearn.datasets import load_iris iris load_iris() X, y iris.data, iris.target # 测试所有特征的信息增益 for i, feature in enumerate(iris.feature_names): gain information_gain(X[:, i], y) print(f{feature:15s}的信息增益{gain:.3f} bits)输出结果示例sepal length (cm) 的信息增益0.483 bits sepal width (cm) 的信息增益0.184 bits petal length (cm) 的信息增益1.418 bits petal width (cm) 的信息增益1.378 bits结果解读花瓣长度和宽度信息增益最高是最具区分力的特征萼片宽度增益最低对分类贡献最小与决策树实际分裂顺序一致验证了算法正确性5. 工程优化向量化实现与性能对比原始循环实现虽然直观但在大数据集上效率较低。我们可用NumPy广播机制优化def fast_entropy(p): p np.asarray(p) p p[p 0] # 过滤零概率 return -np.sum(p * np.log2(p)) def fast_information_gain(feature, target): # 计算原始熵 target_counts np.bincount(target) base_entropy fast_entropy(target_counts / len(target)) # 计算条件熵 categories, counts np.unique(feature, return_countsTrue) weights counts / len(feature) cond_ent 0 for cat, weight in zip(categories, weights): subset target[feature cat] subset_counts np.bincount(subset, minlengthlen(target_counts)) cond_ent weight * fast_entropy(subset_counts / len(subset)) return base_entropy - cond_ent性能测试对比鸢尾花数据集1000次重复方法执行时间ms原始循环实现78.2向量化优化12.4优化后的实现速度提升约6倍特别适合处理高维特征数据集。完整代码应添加类型提示和异常处理from typing import Union, ArrayLike def robust_information_gain( feature: Union[list, ArrayLike], target: Union[list, ArrayLike], eps: float 1e-12 ) - float: 鲁棒的信息增益计算 参数 feature: 特征向量 target: 目标标签 eps: 防止log(0)的小量 返回 信息增益值比特 feature np.asarray(feature) target np.asarray(target) if len(feature) ! len(target): raise ValueError(特征与标签长度不一致) # 其余实现...在真实项目中这些代码可以封装为feature_selection模块配合单元测试确保数值稳定性。当特征值为连续变量时还需要先进行离散化处理这将是另一个值得深入探讨的技术话题。

相关新闻

CMS漏洞自动化检测脚本开发:Python批量验证4类漏洞(附PoC)

CMS漏洞自动化检测脚本开发:Python批量验证4类漏洞(附PoC)

CMS漏洞自动化检测脚本开发:Python批量验证4类高危漏洞在当今数字化时代,内容管理系统(CMS)已成为企业网站建设的首选方案,但随之而来的安全风险也不容忽视。作为安全工程师,我们经常需要面对大量CMS系统的漏洞检测工作&#xff0…

2026/7/6 0:53:42阅读更多 →
HiveWE:5个关键功能让魔兽争霸III地图创作变得轻松高效

HiveWE:5个关键功能让魔兽争霸III地图创作变得轻松高效

HiveWE:5个关键功能让魔兽争霸III地图创作变得轻松高效 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 你是否曾想过,制作一张精彩的魔兽争霸III地图可以像绘画一样直观?…

2026/7/6 0:53:42阅读更多 →
G-Helper:华硕笔记本终极轻量级控制工具,告别臃肿系统软件

G-Helper:华硕笔记本终极轻量级控制工具,告别臃肿系统软件

G-Helper:华硕笔记本终极轻量级控制工具,告别臃肿系统软件 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobo…

2026/7/6 0:48:42阅读更多 →
kernel.org 突发内核文件“消失“:Linux基金会确认配置失误,全球镜像同步触发连锁反应

kernel.org 突发内核文件“消失“:Linux基金会确认配置失误,全球镜像同步触发连锁反应

2026年7月2日,开源社区迎来了一场虚惊。全球开发者赖以获取 Linux 内核源码的核心站点 kernel.org 突然出现异常——所有托管的内核归档文件仿佛凭空蒸发,无论是历史存档还是当前版本,访问路径统一返回 HTTP 404 或 403 错误。对于依赖这一基…

2026/7/6 2:49:16阅读更多 →
Lemos知识库-AI+知识图谱驱动智能脑进化

Lemos知识库-AI+知识图谱驱动智能脑进化

Lemos 通过其“AI知识图谱”双引擎,将传统的静态知识库转变为动态智能脑,其核心转变体现在知识单元、组织逻辑、构建方式、交互模式、演化能力及最终目标六个层面。 转变维度传统静态知识库 (以Ima为例)Lemos 动态智能脑实现转变的关键机制知识单元原子…

2026/7/6 2:49:16阅读更多 →
深度学习计算图与反向传播:从自动求导原理到梯度流动实践

深度学习计算图与反向传播:从自动求导原理到梯度流动实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你肯定见过这样的场景:一个刚入门的同学,照着教程把模型跑起来了,训练损失也在下降,但…

2026/7/6 2:49:16阅读更多 →
2026年实用指南3个复习笔记使用场景选择标准帮你精准适配需求

2026年实用指南3个复习笔记使用场景选择标准帮你精准适配需求

"这篇就是给只会把复习笔记当抄板书草稿本的学生,整理了2026年实用的3个复习笔记使用场景选择标准,精准对应学生最常用的课堂复习、论文调研、知识自测三类需求,解决大家只会用基础功能、记了白记复习低效的痛点,每一个标准都…

2026/7/6 2:49:16阅读更多 →
程序员量化交易实战 35:生成运维检查清单

程序员量化交易实战 35:生成运维检查清单

第 31-34 篇分别补了运行时间窗、日报归档、历史摘要和数据缺口计划。第 35 篇把这些状态合起来,生成一张最小运维检查清单。每日流程真正执行前,先看这张清单,而不是靠人脑记住所有前置条件。检查清单应该少而准检查项不是越多越好。早期模拟…

2026/7/6 2:49:16阅读更多 →
AkShare 1.18.64 实战:3种实时A股数据接口对比与IP封禁规避策略

AkShare 1.18.64 实战:3种实时A股数据接口对比与IP封禁规避策略

AkShare 1.18.64 实战:3种实时A股数据接口对比与稳定性优化策略在量化交易和数据分析领域,获取实时、准确的A股市场数据是构建有效策略的基础。Python生态中的AkShare库提供了多个数据源接口,但不同接口在数据质量、响应速度和稳定性上存在显…

2026/7/6 2:44:16阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →