3 评价类算法:熵权法笔记(附Python代码)

一、原理

1.引例

从下图可以看到,越可能发生的事情信息量越少。而我们使用概率来衡量事情发生的可能性。
3 评价类算法:熵权法笔记(附Python代码)_第1张图片

2.定义

熵权法是一种可以用于多对象、多指标的综合评价方法,其评价结果主要依据客观资料,几乎不受主观因素的影响,可以在很大程度上避免人为因素的干扰。熵值计算公式如下:
在这里插入图片描述

二、步骤

1.什么是度量信息量的大小

信息量与概率的函数图与ln(x)函数图类似,因此在衡量信息量时,我们选用的是ln(x)函数。
3 评价类算法:熵权法笔记(附Python代码)_第2张图片

2.正向化和归一化矩阵

矩阵需要归一化。
如果矩阵中还存在负数,则需要正向化。比如说用值减去指标的最小值,再除以指标最大值和最小值的差。以保证所有的权重都是正数。

3.计算熵值

计算熵值的具体公式如下:(这里的 e 是熵值)
在这里插入图片描述
n 是参与评价个体的个数。
p 为第 i 个指标下的概率,计算:用相应值除以一列中数值的和。比如第一列第一个数据概率的计算方法为(第一列第一个数)/(这一列的和)。

4.构建熵权

信息的效用值公式为:1-e,再对权重进行归一化即可得到权重 ω 。(公式提到的 ω 是熵权)
3 评价类算法:熵权法笔记(附Python代码)_第3张图片
熵权并非实际意义上的重要性系数而是各指标在竞争意义上的相对激烈程度系数。熵权满足条件:
3 评价类算法:熵权法笔记(附Python代码)_第4张图片
指标的熵值越大,熵权越小,该指标越不重要。

5.结合主观赋权法计算

这里实际是要求在比赛过程中,将例如层次分析法,TOPSIS法等方法一起结合,增加分析的可靠性。
推荐阅读文章。

三、代码

import numpy as np

'''1.输入数据'''
print("请输入参评数目:")
n = eval(input())
print("请输入指标数目:")
m = eval(input())
print("请输入矩阵:")
X = np.zeros(shape=(n, m))
for i in range(n):
    X[i] = input().split(" ")
    X[i] = list(map(float, X[i]))
print("输入矩阵为:\n{}".format(X))

'''2.归一化处理'''
X = X.astype('float')
for j in range(m):
    X[:, j] = X[:, j]/sum(X[:, j])
print("归一化矩阵为:\n{}".format(X))

'''3.计算概率矩阵p'''
p = X
for j in range(m):
    p[:, j] = X[:, j]/sum(X[:, j])

'''4.计算熵值'''
E = np.array(X[0, :])
for j in range(m):
    E[j] = -1/np.log(n)*sum(p[:, j]*np.log(p[:, j]+ 1e-5))
print("熵值矩阵为:\n{}".format(E))

'''5.计算熵权'''
w = (1-E)/sum(1-E)
print("熵权矩阵为:\n{}".format(w))

'''6.加权后的数据'''
R = X*w
print("加权后数据矩阵为:\n{}".format(R))

四、参考链接

2.视频资源来源B站
2.视频资源来源B站–清风

你可能感兴趣的:(算法设计与分析,python,算法,机器学习)