熵权法Python代码实现

文章目录

  • 前言
  • 代码
    • 数据
    • 熵权法代码
    • 结果

前言

熵权法做实证的好像很爱用,matlab的已经实现过了,但是matlab太大了早就删了,所以搞一搞python实现的,操作空间还比较大

代码

数据

import pandas as pd
data = [[100,90,100,84,90,100,100,100,100],
    [100,100,78.6,100,90,100,100,100,100],
    [75,100,85.7,100,90,100,100,100,100],
    [100,100,78.6,100,90,100,94.4,100,100],
   [100,90,100,100,100,90,100,100,80],
    [100,100,100,100,90,100,100,85.7,100],
    [100,100,78.6,100,90,100,55.6,100,100],
    [87.5,100,85.7,100,100,100,100,100,100],
    [100,100,92.9,100,80,100,100,100,100],
    [100,90,100,100,100,100,100,100,100],
    [100,100,92.9,100,90,100,100,100,100]]
data = pd.DataFrame(data)

熵权法代码

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 需要进行评价的特征(一般列名)
selected_features = list(data.columns.values)

# 对选取的特征进行归一化
scaler = MinMaxScaler()
norm_data = scaler.fit_transform(data[selected_features]) 

#定义熵值法函数、熵值法计算变量的权重
def cal_weight(feature_num,sample_num,value):
    p= np.array([[0.0 for i in range(feature_num)] for i in range(sample_num)])                    

    for i in range(feature_num):
        value[:,i] += 1e-10 # 防止log0
        p[:,i]=(value[:,i])/np.sum(value[:,i],axis=0) # 计算特征值占比
        
    e=-1/np.log(sample_num)*sum(p*np.log(p))  #计算熵值
    g=1-e  # 计算一致性程度
    w=g/sum(g) #计算权重
    return w


f_num = len(selected_features) # 指标个数
s_num = len(data.index.values) # 方案数、评价主体
w = cal_weight(f_num, s_num, norm_data)
w = pd.DataFrame(w,index=selected_features,columns=['weight']) # 计算出的权重
scores = np.dot(data,w).round(2) # 计算综合分数
result = pd.DataFrame(scores,index=data.index.values,columns=['score']).sort_values(by =['score'],ascending = False) # 对球员的分数进行排名

结果

在这里插入图片描述
在这里插入图片描述
和matlab结果差不多,可能归一化不一样有点差别。

不过这里指标都是正向的,即越大越好,负向指标、区间指标等还并未兼容,以后要是用到了再说吧。

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

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

相关文章

mysql笔记:表设计原则

mysql笔记:表设计原则 表对应了一个实体 表与表之间的关系: 一对一 一对多 多对多 一对一关系 例如:用户 user和身份信息 info 子表的外键关联了父表的子健(类型必须一样) 一对多关系 以电商系统为例子 用户-商…

FastJson、Jackson使用AOP切面进行日志打印异常

FastJson、Jackson使用AOP切面进行日志打印异常 一、概述 1、问题详情 使用FastJson、Jackson进行日志打印时分别包如下错误: 源码: //fastjon log.info("\nRequest Info :{} \n", JSON.toJSONString(requestInfo)); //jackson …

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目,在纠结一个注册中心是在双活机房都准备一个,那主机房的数据如果传过去呢,查了一些资料,最终在官网查到了一个NacosSync 的组件,主要用来做数据传输的,并且支持在线替换注册中心的&a…

微服务OAuth 2.1扩展额外信息到JWT并解析(Spring Security 6)

文章目录 一、简介二、重写UserDetailsService三、Controller解析JWT获取用户信息四、后记 一、简介 VersionJava17SpringCloud2023.0.0SpringBoot3.2.1Spring Authorization Server1.2.1Spring Security6.2.1mysql8.2.0 Spring Authorization Server 使用JWT时,前…

OpenCV基础

OpenCV简介 OpenCV是一个功能强大的开源计算机视觉和机器学习软件库,它在图像处理和视频分析领域得到了广泛应用。OpenCV最初由英特尔公司于1999年发起并支持,后来由Willow Garage和Itseez(现在是Intel的一部分)维护。它是为了推…

Java实现陕西非物质文化遗产网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

口袋工具箱微信小程序源码

这是一款云开发口袋工具箱微信小程序源码,只有纯前端版本,该版本的口袋工具箱涵盖了13个功能,分别为圣诞帽头像生成、二维码生成、日语50音图、汉字拼音查询、计算器、程序员黄历、娱乐摇骰子、身材计算、所在地天气查询、IP地址查询、手机归…

材料非线性Matlab有限元编程:初应力法与初应变法

导读:本文主要围绕材料非线性问题的有限元Matlab编程求解进行介绍,重点围绕牛顿-拉普森法(切线刚度法)、初应力法、初应变法等三种非线性迭代方法的算法原理展开讲解,最后利用Matlab对材料非线性问题有限元迭代求解算法进行实现,展示了实现求解的核心代码。这些内容都将收…

C++中类的6个默认成员函数【构造函数】 【析构函数】

文章目录 前言构造函数构造函数的概念构造函数的特性 析构函数 前言 在学习C我们必须要掌握的6个默认成员函数,接下来本文讲解2个默认成员函数 构造函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是&#xff0c…

三、搜索与图论

DFS 排列数字 #include<iostream> using namespace std; const int N 10; int a[N], b[N]; int n;void dfs(int u){if(u > n){for(int i 1; i < n; i)cout<<a[i]<<" ";cout<<endl;return;}for(int i 1; i < n; i){if(!b[i]){b[…

架构(十三)动态本地锁

一、引言 加锁大家都知道&#xff0c;但是目前提供动态锁的基本都是分布式锁&#xff0c;根据订单或者某个收费款项进行加锁。比如这个1订单要收刷卡费用&#xff0c;那就OREDER_1做为key丢到redis进行分布式加锁。这也是当下分布式锁最流行的方式。 但是对于平台项目或者一些并…

# Memory Analyzer (MAT) 在实际开发中的使用

Memory Analyzer (MAT) 在实际开发中的使用 文章目录 Memory Analyzer (MAT) 在实际开发中的使用概述注意点基本使用检查概述获取直方图View the Dominator Tree到GC根的路径 使用示例制作堆dumpHeapDumpOnOutOfMemoryErrorJmap 生成堆Dump Mat打开堆快照HistogramThread Overv…

SpringCloud-Ribbon实现负载均衡

在微服务架构中&#xff0c;负载均衡是一项关键的技术&#xff0c;它可以确保各个服务节点间的负载分布均匀&#xff0c;提高整个系统的稳定性和性能。Spring Cloud 中的 Ribbon 就是一种负载均衡的解决方案&#xff0c;本文将深入探讨 Ribbon 的原理和在微服务中的应用。 一、…

外包干了一个月,技术明显进步。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

CSP-202012-1-期末预测之安全指数

CSP-202012-1-期末预测之安全指数 题目很简单&#xff0c;直接上代码 #include <iostream> using namespace std; int main() {int n, sum 0;cin >> n;for (int i 0; i < n; i){int w, score;cin >> w >> score;sum w * score;}if (sum > 0…

STM32——OLED(2)

目录 一、OLED显示屏介绍 引脚说明&#xff1a; 二、OLED驱动 1. 基本认识 2. OLED 驱动原理 及过程 三、SSD1306工作时序 (8080时序&#xff09; 1. 8080并口读/写过程 2. SSD1306工作时序 (8080时序) 四、屏幕显示 1. GRAM 补&#xff1a; 2. 画点原理 3. 显示字…

尚硅谷 Vue3+TypeScript 学习笔记(中)

目录 三、路由 3.1. 【对路由的理解】 3.2. 【基本切换效果】 3.3. 【两个注意点】 3.4.【路由器工作模式】 3.5. 【to的两种写法】 3.6. 【命名路由】 3.7. 【嵌套路由】 3.8. 【路由传参】 query参数 params参数 3.9. 【路由的props配置】 3.10. 【 replace属性…

Java实现快乐贩卖馆管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

Zustand:简化状态管理的现代React状态库

Zustand&#xff1a;简化状态管理的现代React状态库 Zustand是一个用于管理状态的现代React状态库。它提供了简洁、可扩展和高效的状态管理解决方案&#xff0c;使得在React应用中处理复杂的状态逻辑变得更加容易和直观。本文将介绍Zustand的主要特点、使用方法以及它在React开…

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…