目录

前言

信息熵 

熵权法

一、概述

二、数据处理

Ⅰ、正向化

①极小转化为极大型

②中间最优型转极大值

③区间最优[a,b]转极大型

Ⅱ、归一化(normalization)

三、求信息熵

四、计算指标权重

实例分析


前言

        对于m个对象,从n个指标进行评价,在进行最后排名时,只看各指标总分并不科学,通过赋予各个指标权重系数,再进行加权求和,得出的结果相对科学。熵权法是实现上面方法的一种途径。       

基于熵权法的topsis python 熵权法_算法

信息熵 

        信息熵(information entropy)是信息论的基本概念。描述信息源各可能事件发生的不确定性。而不确定性函数 f 是 p 的减函数(概率越大,确定性越高,不确定性越低),所以f(p1,p2)=f(p1)+f(p2)。易知对数函数满足以上条件,因此我们用

基于熵权法的topsis python 熵权法_权重_02

来计算信源的平均不确定性(信息熵),一般以2为底,单位为bit,显然,信息熵>=0。

举个例子,抛一枚硬币,正反概率都是1/2,其信息熵是:

基于熵权法的topsis python 熵权法_信息熵_03

 bit,但抛一枚正反都一样的硬币,其信息熵为

基于熵权法的topsis python 熵权法_信息熵_04

,其中定义

基于熵权法的topsis python 熵权法_权重_05

 bit。熵越大越复杂,可以结合物理里面的熵增定律来记忆(熵的概念本就是从物理引入的)。

熵权法

一、概述

        根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。这是熵权法的理论基础。

二、数据处理

        评价指标是多样的,大致分为四种:极大型,极小型,中间型,区间型,我们统一转化为极大型进行处理。

Ⅰ、正向化

①极小转化为极大型

基于熵权法的topsis python 熵权法_算法_06

基于熵权法的topsis python 熵权法_基于熵权法的topsis python_07

;若对象均为正数,也可使用1/x

②中间最优型转极大值

基于熵权法的topsis python 熵权法_matlab_08

基于熵权法的topsis python 熵权法_信息熵_09

是最优的点,

基于熵权法的topsis python 熵权法_信息熵_10

是正向化处理后的数据

③区间最优[a,b]转极大型

基于熵权法的topsis python 熵权法_matlab_11

基于熵权法的topsis python 熵权法_信息熵_12

基于熵权法的topsis python 熵权法_算法_13

基于熵权法的topsis python 熵权法_权重_14b" title="x_i'=1-(x_i-b)/M,x_i>b" style="width: 231px; visibility: visible;" data-type="block">

%%极小化极大
x=max(x)-x;

%%中间化极大
x=1-abs(x-b)/max(x-b);%b是best值

%%区间化极大[a,b]是最优
m=max(max(a-min(x)),max(b-max(x)));
for i=1:size(x,2)
    if x(i,1)<a
        x(i,1)=1-(a-x(i,1))/M;
    elseif a<=x(i,1)<=b
        x(i,1)=1;
    else
        x(i,1)=1-(x(i,1)-b)/M;
    end
end

Ⅱ、归一化(normalization)

    将数据都转化为极大型指标后,进行归一化处理,注意的是mapminmax是按行进行归一化

x=rand(20,10);
m=mapminmax(x,0,1);

三、求信息熵

x=rand(50,1);
p=x/sum(x);
E=sum(-1/log(size(x,1))*p.*log(p));

四、计算指标权重

基于熵权法的topsis python 熵权法_权重_15

,之后将指标权重矩阵与原数据相乘即可

实例分析

        data是从阿里天池下载后经处理的数据,包括51个学生16科成绩的分数和总分制的排名,现用熵权法重新排名。(需要完整数据的请私信)

load('data.mat')

%归一化(normalization)
d=mapminmax(data',0.4,1)';%注意将x转置

%信息熵(information entropy)
[m,n]=size(d);
q=zeros([1,n]);
for i=1:n
    p=d(:,i)/sum(d(:,i));
    q(1,i)=sum(-1/log(m)*p'*log(p));
end

%计算权重矩阵(weight matrix)
w=zeros(size(q));
for i=1:n
    w(1,i)=(1-q(1,i))/(n-sum(q));
end

%计算熵权法后的得分
out=data*w';

%排序
[a,b]=sort(out);
[c,d]=sort(b);
d=m+1-d;

部分结果如下图所示:

基于熵权法的topsis python 熵权法_matlab_16