熵权法 —— python

目录

一、熵权法介绍

二、熵权法赋权步骤

1.指标正向化

mapminmax介绍

2.数据标准化

3.计算信息熵

4.计算权重以及得分

四、实例分析

1.导入相关库

2.读取数据

 2.指标正向化

2.1 越小越优型处理

2.2 某点最优型指标处理

3.数据标准化

4.计算信息熵

 5.计算权重

 6.计算得分

 总结


一、熵权法介绍

熵权法是一种客观赋值方法。在具体使用的过程中,熵权法根据各指标的变异程度,利用信息熵计算出各指标的熵权,再通过熵权对各指标的权重进行修正,从而得到较为客观的指标权重。

一般来说,若某个指标的信息熵指标权重确定方法之熵权法越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大。

相反,若某个指标的信息熵指标权重确定方法之熵权法越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。

二、熵权法赋权步骤

1.指标正向化

这个步骤视情况自己决定把。。。。

        不同的指标代表含义不一样,有的指标越大越好,称为越大越优型指标。有的指标越小越好,称为越小越优型指标,而有些指标在某个点是最好的,称为某点最优型指标。为方便评价,应把所有指标转化成越大越优型指标。

设有m个待评对象,n个评价指标,可以构成数据矩阵 

设数据矩阵内元素,经过指标正向化处理过后的元素为  (Xij)'

  • 越小越优型指标:C,D属于此类指标

其他处理方法也可,只要指标性质不变即可

  • 某点最优型指标:E属于此类指标

        设最优点为a, 当a=90时E最优。

          其他处理方法也可,只要指标性质不变即可

  • 越大越优型指标:其余所有指标属于此类指标

   此类指标可以不用处理,想要处理也可,只要指标性质不变

mapminmax介绍

最大最小值归一化

语法

[Y,PS] = mapminmax(X,YMIN,YMAX)
[Y,PS] = mapminmax(X,FP)
Y = mapminmax('apply',X,PS)
X = mapminmax('reverse',Y,PS)

说明:

[Y,PS] = mapminmax(X,YMIN,YMAX) mapminmax(X,YMIN,YMAX) 将矩阵的每一行压缩到 [YMIN,YMAX],其中当前行的最大值变为YMAX,最小值变为YMIN。PS为结构体储存相关信息,如最大最小值等

[Y,PS] = mapminmax(X,FP) 其中FP为结构体类型,这时就是将矩阵的每一行压缩到[ FP.ymin, FP.ymax]中

Y = mapminmax('apply',X,PS) 可以将之前储存的结构体应用到新的矩阵中,利用上一步得到的PS来映射X到Y

X = mapminmax('reverse',Y,PS) 可按照之前数据规律,反归一化,利用归一化后的Y和PS重新得到X

2.数据标准化

        因为每个指标的数量级不一样,需要把它们化到同一个范围内再比较。标准化的方法比较多,这里仅用最大最小值标准化方法。

        设标准化后的数据矩阵元素为rij,由上可得指标正向化后数据矩阵元素为 (Xij)'

3.计算信息熵

        为避免Pij零元素的出现出现计算错误,归一化最低区间可以从0.002开始。如果某个指标的信息熵Ej越小,就表明其指标值的变异程度越大,提供的 信息量也越大,可以认为该指标在综合评价起到作用也越大。

4.计算权重以及得分

权重为:

得分为:

四、实例分析

        用一篇高引用的核心期刊论文[1]为例,针对各个银行的资产收益率,费用利润率,逾期贷款率,非生息资产率,流动性比率,资产使用率,自有资本率指标进行评价。设资产收益率为A,费用利润率为B,逾期贷款率为C,非生息资产率为D,流动性比率为E,资产使用率为F,自有资本率为G。数据表格如下:

1.导入相关库

#导入相关库
import copy
import pandas as pd
import numpy as np

2.读取数据

#读取数据
data=pd.read_excel('D:\桌面\shangquan.xlsx')
print(data)

返回:

 在这里,我们可以看到读取的数据中,有部分是我们不想要的,于是我们得做处理

首先,我们先提取一下变量名

label_need=data.keys()[2:]
print(label_need)

返回:

 

data=data(:,3:end) %只取指标数据

然后,我们提取变量名下的数据值

data1=data[label_need].values
print(data1)

返回:

 2.指标正向化

#指标正向    化处理后数据为data2
data2=data1
print(data2)

2.1 越小越优型处理

#越小越优指标位置,注意python是从0开始计数,对应位置也要相应减1
index=[2,3] 
for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
print(data2)

返回:

2.2 某点最优型指标处理

#某点最优型指标
index1=[4] 
a=90    #最优型数值
for i in range(0,len(index1)):data2[:,index1[i]]=1-abs(data1[:,index1[i]]-a)/max(abs(data1[:,index1[i]]-a))
print(data2)

返回:

3.数据标准化

#0.002~1区间归一化
[m,n]=data2.shape
data3=copy.deepcopy(data2)
ymin=0.002
ymax=1
for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin
print(data3)

返回:

4.计算信息熵

#计算信息熵
p=copy.deepcopy(data3)
for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j])
print(p)
E=copy.deepcopy(data3[0,:])
for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j]))
print(E)

返回: 

 5.计算权重

# 计算权重
w=(1-E)/sum(1-E)
print(w)

返回:

 6.计算得分

#计算得分
s=np.dot(data3,w)
Score=100*s/max(s)
for i in range(0,len(Score)):print(f"第{i}个评价对象得分为:{Score[i]}")

返回:

 总结

#导入相关库
import copy
import pandas as pd
import numpy as np
#读取数据
data=pd.read_excel('D:\桌面\shangquan.xlsx')
print(data)label_need=data.keys()[2:]
print(label_need)
data1=data[label_need].values
print(data1)#指标正向    化处理后数据为data2
data2=data1
print(data2)#越小越优指标位置,注意python是从0开始计数,对应位置也要相应减1
index=[2,3] 
for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
print(data2)#某点最优型指标
index1=[4] 
a=90    #最优型数值
for i in range(0,len(index1)):data2[:,index1[i]]=1-abs(data1[:,index1[i]]-a)/max(abs(data1[:,index1[i]]-a))
print(data2)#0.002~1区间归一化
[m,n]=data2.shape
data3=copy.deepcopy(data2)
ymin=0.002
ymax=1
for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin
print(data3)#计算信息熵
p=copy.deepcopy(data3)
for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j])
print(p)
E=copy.deepcopy(data3[0,:])
for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j]))
print(E)# 计算权重
w=(1-E)/sum(1-E)
print(w)#计算得分
s=np.dot(data3,w)
Score=100*s/max(s)
for i in range(0,len(Score)):print(f"第{i}个评价对象得分为:{Score[i]}")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言基础入门(3)之数据类型与相应运算1

目录 一、常量与变量 1.常量 2.变量 二、数据类型 三、数值型向量 3.1 c() 函数 3.2 length(x) 3.3 numeric() 四、向量运算 1.标量和标量运算 2.向量与标量运算 3.等长向量运算 4.不等长向量的运算 五、向量函数 1.向量化的函数 2.排序函数 3.统计函数…

C语言位运算详解

C语言位运算包括:按位与运算、或运算、异或运算、左移运算、右移运算。 位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte)…

R语言基础入门(4)之数据类型与相应运算2

目录 一、逻辑型向量与比较运算 二、 逻辑运算 三、逻辑运算函数 一、逻辑型向量与比较运算 逻辑型是 R 的基本数据类型之一&#xff0c;只有两个值 TRUE 和 FALSE, 缺失时为 NA。逻辑值一般产生自比较&#xff0c;如sele <- (log10(15) < 2); print(sele) 返回&…

R语言基入门(5)之字符型数据及其处理

目录 1.字符型向量 2. paste() 函数 3.转换大小写 4.字符串长度 5.取子串 6. 类型转换 7. 字符串拆分 8.字符串替换功能 9.正则表达式 1.字符型向量 字符型向量是元素为字符串的向量。如s <- c(abc, , a cat, NA, 李明) s 返回&#xff1a; 2. paste() 函数 针对…

R语言基础入门(6)之向量下标和子集

目录 1.正整数下标 2.负整数下标 3.空下标与零下标 4.下标超界 5.逻辑下标 6. which()、which.min()、which.max() 函数 7. 元素名 8.用 R 向量下标作映射 9.集合运算 练习 1.正整数下标 首先定义一个x&#xff0c;然后对向量 x, 在后面加方括号和下标可以访问向量…

C语言随机数的生成

在编程中&#xff0c;我们经常需要生成随机数&#xff0c;例如&#xff0c;贪吃蛇游戏中在随机的位置出现食物&#xff0c;扑克牌游戏中随机发牌等。 在C语言中&#xff0c;我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数&#xff0c;它的用法为&#xff…

R语言基础入门(7)之数据类型的性质

目录 1.存储模式与基本类型 2.类属 3.类型转换 4.属性 5.str() 函数 6.关于赋值 1.存储模式与基本类型 R语言中根据类型可以将数据划分为&#xff1a; 数值型&#xff08;numeric&#xff09;整数型&#xff08;integer&#xff09;字符型&#xff08;character&#xff09…

C++班级通讯录

C实现班级通讯录管理系统 设计流程 本系统基于C实现班级通讯录管理系统。功能包括增、删、查、改等。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。 优点 1 . 此系统含有欢迎使用的…

两万字教会你解析库之Beautiful Soup

目录 1.简介 2.准备工作 3.解析器 4.基本用法 5.节点选择器 5.1选择元素 5.2提取信息 5.3嵌套选择 5.4关联选择 6.方法选择器 7. css 选择器 7.1 嵌套选择 7.2 获取属性 7.3 获取文本 总结 1.简介 简单来说&#xff0c;Beautiful Soup就是Python的一个HTML或XM…

C语言实现随机抽取纸牌

程序设计要求 本程序负责发一副标准纸牌&#xff0c;每张标准纸牌都有一种花色&#xff08;梅花、方块、黑桃、红桃&#xff09;和一个等级&#xff08;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6…K,A&#xff09;。程序需要用户指明手机有几张牌。 程序设计流…

R语言基础入门(8)之日期时间

目录 1.日期和日期时间类型 2.从字符串生成日期数据 3.日期显示格式 4.访问日期时间的组成值 5.日期舍入计算 6.日期计算 6.1 时间长度 6.2 时间周期 6.3 时间区间 7.基本 R 软件的日期功能 7.1 生成日期和日期时间型数据 7.2 取出日期时间的组成值 7.3 日期计算 练…

C语言点名器

设计流程 1 . 使用求模符号“%”求模数控制随机数产生范围。 2 . 使用rand&#xff08;&#xff09;计算出一个随机数。 3 . 使用函数time()来获取时间。 4 . 用二维字符数组储存名字&#xff0c;产生范围类的随机数在用下标调用数组里面的名字。 效果展示 完整代码 #inclu…

R语言基础入门(9)之因子类型

目录 1.因子 2.table() 函数 3.tapply() 函数 4.forcats 包的因子函数 练习 1.因子 R 中用因子代表数据中分类变量, 如性别、省份、职业。有序因子代表有序量度&#xff0c;如打分结果&#xff0c;疾病严重程度等。用 factor() 函数把字符型向量转换成因子&#xff0c;如x…

2万字带你攻略掉Selenium

目录 1. 准备工作 1.1 安装selenium库 1.2 安装浏览器驱动 2. 基本用法 2.1 初始化浏览器对象 2.2 访问页面 2.3 设置浏览器大小 2.4 刷新页面 2.5 前进后退 3. 获取页面基础属性 4. 定位页面元素 4.1 id定位 4.2 name定位 4.3 class定位 4.4 tag定位 4.5 lin…

IDEA里的web.xml页面的Servlet名称报错下方出现红色下划线

错误显示 对于上述错误是因为只有新建的Servlet名称但是并没为为这个Servlet指定访问地址的路径和映射&#xff0c;我们只需要添加访问地址的路径和映射就可以解决这个问题了。 修改之后的代码 <?xml version"1.0" encoding"UTF-8"?> <web-ap…

Python之Hello World

python实现Hello World项目 在项目上点击右键New–>File,然后输入文件名Hello World 一个Hello World文件创建完成 编写相应的代码 在空白的地方右击选择Run"Hello World" 程序运行成功&#xff0c;输出Hello World

knn(k近邻算法)——python

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 导入相关库 4.2 读取数据 4.3 读取变量名 4.4 定义X,Y数据 4.5 分离训练集和测试集 4.6 计算欧式距离 4.7 可视化距离矩阵 4.8 预测样本 4.9 查看正确…

C语言中的文件是什么?

我们对文件的概念已经非常熟悉了&#xff0c;比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种&#xff0c;最主要的作用是保存数据。 在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对…

knn(k近邻算法)——matlab

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4 计算欧氏距离 4.5 排序和输出测试结果 4.6 计算准确率 总代码 1. 基本定义 k最近邻(k-Nearest N…

C语言打开文件详解

C语言中操作文件之前必须先打开文件&#xff1b;所谓“打开文件”&#xff0c;就是让程序和文件建立连接的过程。 打开文件之后&#xff0c;程序可以得到文件的相关信息&#xff0c;例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中&#xff0c;程序还可以记…