熵权法 Python 实战:3步完成鸢尾花数据集指标权重计算(附完整代码)

发布时间:2026/8/24 23:29:36

熵权法 Python 实战:3步完成鸢尾花数据集指标权重计算(附完整代码)
熵权法 Python 实战3步完成鸢尾花数据集指标权重计算附完整代码在数据分析与决策过程中如何科学地确定各指标的权重一直是个难题。传统的主观赋权方法如层次分析法AHP依赖专家经验容易引入人为偏差。而熵权法作为一种客观赋权方法能够直接从数据分布中提取信息自动计算各指标的重要性。本文将带你用Python实现熵权法并以经典的鸢尾花数据集为例展示如何通过3个步骤快速计算出各特征的权重。1. 理解熵权法的核心思想熵权法源于信息论中的熵概念。在信息论中熵用来衡量系统的不确定性熵值越大系统越无序信息量越小反之熵值越小系统越有序信息量越大。将这个原理应用到指标权重计算中高熵指标数据分布均匀差异小提供的信息量少应赋予较小权重低熵指标数据分布不均匀差异大提供的信息量多应赋予较大权重举个例子假设我们评估城市宜居性时考虑空气质量和绿化率两个指标。如果所有城市的空气质量都很接近高熵而绿化率差异明显低熵那么绿化率对最终评价的影响应该更大。2. 熵权法的数学实现步骤熵权法的计算可以分为以下三个核心步骤2.1 数据标准化处理由于不同指标的量纲和数量级不同首先需要将原始数据标准化到[0,1]区间。对于正向指标越大越好和负向指标越小越好处理方法略有不同import numpy as np from sklearn.preprocessing import MinMaxScaler # 正向指标标准化 def normalize_positive(x): scaler MinMaxScaler() return scaler.fit_transform(x) # 负向指标标准化 def normalize_negative(x): scaler MinMaxScaler() return 1 - scaler.fit_transform(x)2.2 计算信息熵标准化后的数据需要计算每个指标的信息熵。这里使用香农熵公式def calculate_entropy(x): # 避免log(0)的情况 x np.where(x 0, 1e-10, x) # 计算比例 p x / np.sum(x, axis0) # 计算熵值 k 1 / np.log(len(x)) entropy -k * np.sum(p * np.log(p), axis0) return entropy2.3 计算指标权重根据熵值计算差异系数最终确定各指标权重def calculate_weights(entropy): # 差异系数 d 1 - entropy # 权重 weights d / np.sum(d) return weights3. 鸢尾花数据集实战现在我们以sklearn自带的鸢尾花数据集为例完整演示熵权法的应用。3.1 数据准备与预处理首先加载数据并进行初步观察from sklearn.datasets import load_iris import pandas as pd # 加载数据 iris load_iris() df pd.DataFrame(iris.data, columnsiris.feature_names) # 查看数据概况 print(df.describe())鸢尾花数据集包含四个特征花萼长度sepal length花萼宽度sepal width花瓣长度petal length花瓣宽度petal width3.2 完整熵权法实现将前面的步骤整合成一个完整的函数def entropy_weight_method(data, positive_indicesNone, negative_indicesNone): 熵权法计算指标权重 参数: data: 原始数据矩阵 (n_samples, n_features) positive_indices: 正向指标列索引列表 negative_indices: 负向指标列索引列表 返回: weights: 各指标权重 # 数据标准化 normalized_data np.zeros_like(data) if positive_indices is not None: normalized_data[:, positive_indices] normalize_positive(data[:, positive_indices]) if negative_indices is not None: normalized_data[:, negative_indices] normalize_negative(data[:, negative_indices]) # 计算熵值 entropy calculate_entropy(normalized_data) # 计算权重 weights calculate_weights(entropy) return weights3.3 应用与结果分析对鸢尾花数据集应用熵权法# 假设所有特征都是正向指标 weights entropy_weight_method(df.values, positive_indices[0,1,2,3]) # 结果展示 result pd.DataFrame({ Feature: iris.feature_names, Weight: weights }) print(result)典型输出结果可能如下FeatureWeightsepal length (cm)0.152sepal width (cm)0.058petal length (cm)0.395petal width (cm)0.395解读结果显示花瓣长度和花瓣宽度的权重最高各约39.5%而花萼宽度的权重最低约5.8%。这与鸢尾花分类问题的实际情况相符因为花瓣特征通常更能区分不同种类的鸢尾花。4. 进阶应用与注意事项4.1 结果可视化为了更好地理解权重分布我们可以用matplotlib绘制权重条形图import matplotlib.pyplot as plt plt.figure(figsize(10, 5)) plt.bar(result[Feature], result[Weight], colorskyblue) plt.title(Feature Weights Calculated by Entropy Method) plt.ylabel(Weight) plt.xticks(rotation45) plt.show()4.2 实际应用中的注意事项指标方向性判断必须明确每个指标是正向还是负向。例如在医疗指标中治愈率是正向指标而死亡率是负向指标。数据预处理处理缺失值建议删除或合理填充处理异常值可采用3σ原则或IQR方法识别和处理样本量要求熵权法对样本量有一定要求样本太少可能导致权重不稳定。与其他方法结合可考虑与AHP等主观赋权法结合兼顾客观数据和专家经验。4.3 扩展应用综合评价得分计算出权重后可以进一步计算每个样本的综合得分def calculate_scores(data, weights): # 标准化数据假设都是正向指标 normalized_data normalize_positive(data) # 计算加权得分 scores np.dot(normalized_data, weights) return scores # 计算鸢尾花数据集的综合得分 df[Score] calculate_scores(df.values[:, :4], weights) print(df.sort_values(Score, ascendingFalse).head())5. 完整代码整合以下是整合后的完整代码可直接运行# 熵权法完整实现鸢尾花数据集案例 import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import matplotlib.pyplot as plt # 1. 数据标准化函数 def normalize_positive(x): scaler MinMaxScaler() return scaler.fit_transform(x) def normalize_negative(x): scaler MinMaxScaler() return 1 - scaler.fit_transform(x) # 2. 熵值计算函数 def calculate_entropy(x): x np.where(x 0, 1e-10, x) p x / np.sum(x, axis0) k 1 / np.log(len(x)) entropy -k * np.sum(p * np.log(p), axis0) return entropy # 3. 权重计算函数 def calculate_weights(entropy): d 1 - entropy weights d / np.sum(d) return weights # 4. 熵权法主函数 def entropy_weight_method(data, positive_indicesNone, negative_indicesNone): normalized_data np.zeros_like(data, dtypefloat) if positive_indices is not None: normalized_data[:, positive_indices] normalize_positive(data[:, positive_indices]) if negative_indices is not None: normalized_data[:, negative_indices] normalize_negative(data[:, negative_indices]) entropy calculate_entropy(normalized_data) weights calculate_weights(entropy) return weights # 5. 综合评价得分计算 def calculate_scores(data, weights): normalized_data normalize_positive(data) scores np.dot(normalized_data, weights) return scores # 主程序 if __name__ __main__: # 加载数据 iris load_iris() df pd.DataFrame(iris.data, columnsiris.feature_names) # 计算权重 weights entropy_weight_method(df.values, positive_indices[0,1,2,3]) # 展示权重结果 result pd.DataFrame({ Feature: iris.feature_names, Weight: weights }) print(Feature Weights:) print(result) # 可视化权重 plt.figure(figsize(10, 5)) plt.bar(result[Feature], result[Weight], colorskyblue) plt.title(Feature Weights Calculated by Entropy Method) plt.ylabel(Weight) plt.xticks(rotation45) plt.tight_layout() plt.show() # 计算并展示综合得分 df[Score] calculate_scores(df.values[:, :4], weights) print(\nTop 5 samples by comprehensive score:) print(df.sort_values(Score, ascendingFalse).head())运行这段代码你将得到四个特征的权重分配权重分布的可视化图表样本综合得分排名在实际项目中你可以将此代码作为模板只需替换数据输入部分即可应用到自己的数据集上。对于更复杂的场景可能需要调整标准化方法或增加其他预处理步骤。

相关新闻

VMware迁移上云的10个生死关:技术决策、成本陷阱与实战避坑指南

VMware迁移上云的10个生死关:技术决策、成本陷阱与实战避坑指南

2026/8/24 23:29:17

一、 引言:为什么VMware上云是“生死之战”?简要介绍VMware在企业IT中的核心地位,以及迁移上云的战略价值与潜在风险。点明“生死关”的含义——既是技术挑战,也是成本、安全和业务连续性的考验。二、 生死关一:战略规…

K折交叉验证实战:Python sklearn 5折验证提升模型泛化能力 0.05

K折交叉验证实战:Python sklearn 5折验证提升模型泛化能力 0.05

2026/8/24 21:38:48

K折交叉验证实战:Python sklearn 5折验证提升模型泛化能力当你第一次构建机器学习模型时,最令人沮丧的时刻莫过于发现模型在训练数据上表现完美,但在新数据上却一塌糊涂。这种现象被称为过拟合,而K折交叉验证正是解决这一问题的利…

终极解决方案:免费获取9大网盘直链下载权限的完整指南

终极解决方案:免费获取9大网盘直链下载权限的完整指南

2026/8/24 2:41:03

终极解决方案:免费获取9大网盘直链下载权限的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

iFakeLocation:iPhone 虚拟定位三步搞定(免越狱)

iFakeLocation:iPhone 虚拟定位三步搞定(免越狱)

2026/8/24 23:24:33

iFakeLocation:iPhone 虚拟定位三步搞定(免越狱) 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation iFakeLocation 是一款…

基于SpringBoot的学生宿舍管理系统的设计与实现(程序+文档+讲解)

基于SpringBoot的学生宿舍管理系统的设计与实现(程序+文档+讲解)

2026/8/24 23:24:33

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

HiGHS线性优化求解器上手指南:免费LP求解,10分钟算出最省钱的配方

HiGHS线性优化求解器上手指南:免费LP求解,10分钟算出最省钱的配方

2026/8/24 23:24:33

HiGHS线性优化求解器上手指南:免费LP求解,10分钟算出最省钱的配方 【免费下载链接】HiGHS Linear optimization software 项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS HiGHS 是一款免费的线性优化求解器(LP 求解引擎&…

深入解析Android Framework层:从架构原理到开发实战

深入解析Android Framework层:从架构原理到开发实战

2026/8/24 23:24:33

1. 从“Hello World”到系统服务:为什么需要框架层? 如果你刚开始接触Android开发,大概率是从一个简单的“Hello World”应用开始的。你写了几行Java或Kotlin代码,点击了Android Studio的运行按钮,应用就在模拟器或真…

如何把 LTX-2 视频生成跑进 ComfyUI:ComfyUI-LTXVideo 安装配置完整指南

如何把 LTX-2 视频生成跑进 ComfyUI:ComfyUI-LTXVideo 安装配置完整指南

2026/8/24 23:24:33

如何把 LTX-2 视频生成跑进 ComfyUI:ComfyUI-LTXVideo 安装配置完整指南 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 想把一张图或一句话变成视频,很多…

Video2X:免费 AI 视频修复工具,480p 老视频一键放大 4 倍变 4K

Video2X:免费 AI 视频修复工具,480p 老视频一键放大 4 倍变 4K

2026/8/24 23:14:32

Video2X:免费 AI 视频修复工具,480p 老视频一键放大 4 倍变 4K 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHu…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

2026/8/24 0:03:28

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan 是一款开源免…

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

2026/8/24 0:03:28

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化 【免费下载链接】WechatHook Enjoy hooking wechat by Xposed....Accessibility...and so on... 项目地址: https://gitcode.com/gh_mirrors/we/WechatHook WechatHook 是一个基于 Xpos…

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

2026/8/24 0:03:28

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…