熵权法Python代码实现

文章目录

前言

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

代码

数据

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)

熵权法代码

python 复制代码
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结果差不多,可能归一化不一样有点差别。

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

相关推荐
麻雀飞吧24 分钟前
零基础选量化工具,先把问题说清楚
人工智能·python
段一凡-华北理工大学34 分钟前
AI推动工业智能化转型~系列文章20:工业 AI 平台架构:云-边-端协同的技术体系
人工智能·python·架构·工业平台·云-边协同
CodeBlog-star37 分钟前
Harness Engineering:Pi Agent 架构深度解析
人工智能·python·架构·harness工程
简不变39 分钟前
将components下的文件夹复制到别一个文件夹下,并重新生成CMakelist.txt文件
python
库玛西1 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
AC赳赳老秦1 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
databook1 小时前
如何对稀疏数据的场景进行分析
python·数据挖掘·数据分析
liulilittle2 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
朋克洛德的码农2 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
Java&Develop2 小时前
DeltaFStation 宝塔 Linux 部署教程
python