1-熵值法賦權


轉載:https://blog.csdn.net/zhanghao12_34/article/details/79406211

一、基本原理

 

在信息論中,熵是對不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。
根據熵的特性,可以通過計算熵值來判斷一個事件的隨機性及無序程度,也可以用熵值來判斷某個指標的離散程度,指標的離散程度越大,該指標對綜合評價的影響(權重)越大,其熵值越小。

 

二、熵值法步驟

 

1. 選取n個國家,m個指標,則 為第i個國家的第j個指標的數值(i=1, 2…, n; j=1,2,…, m);

 

2. 指標的歸一化處理:異質指標同質化

 

由於各項指標的計量單位並不統一,因此在用它們計算綜合指標前,先要對它們進行標准化處理,即把指標的絕對值轉化為相對值,並令 ,從而解決各項不同質指標值的同質化問題。而且,由於正向指標和負向指標數值代表的含義不同(正向指標數值越高越好,負向指標數值越低越好),因此,對於高低指標我們用不同的算法進行數據標准化處理。其具體方法如下:
正向指標:
負向指標:
為第i個國家的第j個指標的數值(i=1, 2…, n; j=1, 2,…, m)。為了方便起見,歸一化后的數據仍記為 ;

 

3. 計算第j項指標下第i個國家占該指標的比重:

 

4. 計算第j項指標的熵值:
其中 . 滿足 ;

 

5. 計算信息熵冗余度:

 

6. 計算各項指標的權值:

 

7. 計算各國家的綜合得分:

 

function [s, w] = shang(x)
% x為原始數據矩陣, 一行代表一個記錄, 每列對應一個指標
% s各行得分, w各列權重
[n,m]=size(x); % n=23個記錄, m=5個指標
% 數據的歸一化處理
% Matlab2010b,2011a,b版本都有bug,需如下處理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[X,ps]=mapminmax(x');
ps.ymin=0.002; % 歸一化后的最小值
ps.ymax=0.996; % 歸一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 歸一化后的極差,若不調整該值, 則逆運算會出錯
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反歸一化, 回到原數據
% [X,ps]=mapminmax(x',0,1);
X=X';  % X為歸一化后的數據, 23行, 5列(指標)
% 計算第j個指標下,第i個記錄占該指標的比重p(i,j)
for i=1:n
    for j=1:m
        p(i,j)=X(i,j)/sum(X(:,j));
    end
end
% 計算第j個指標的熵值e(j)
k=1/log(n);
for j=1:m
    e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e;  % 計算信息熵冗余度
w=d./sum(d);    % 求權值w
s=w*p';         % 求綜合得分
end

  

測試程序:

data.txt 數據如下:
114.6 1.1 0.71 85.0 346 
55.3 0.96 0.4 69.0 300
132.4 0.97 0.54 73.0 410 
152.1 1.04 0.49 77.0 433
103.5 0.96 0.66 67.0 385 
81.0 1.08 0.54 96.0 336
179.3 0.88 0.59 89.0 446 
29.8 0.83 0.49 120.0 289
92.7 1.15 0.44 154.0 300 
248.6 0.79 0.5 147.0 483
115.0 0.74 0.65 252.0 453 
64.9 0.59 0.5 167.0 402
163.6 0.85 0.58 220.0 495 
95.7 1.02 0.48 160.0 384
139.5 0.70 0.59 217.0 478 
89.9 0.96 0.39 105.0 314
76.7 0.95 0.51 162.0 341 
121.8 0.83 0.60 140.0 401
42.1 1.08 0.47 110.0 326 
78.5 0.89 0.44 94.0 280
77.8 1.19 0.57 91.0 364 
90.0 0.95 0.43 89.0 301
100.6 0.82 0.59 83.0 456

執行代碼:
[code]x=load('data.txt');  % 讀入數據
[s,w]=shang(x)[\code]

運行結果:
s =

  Columns 1 through 9

    0.0431    0.0103   0.0371    0.0404    0.0369    0.0322   0.0507    0.0229    0.0397

  Columns 10 through 18

    0.0693    0.0878   0.0466    0.0860    0.0503    0.0800   0.0234    0.0456    0.0536

  Columns 19 through 23

    0.0272    0.0181   0.0364    0.0202    0.0420


w =

    0.1660    0.0981   0.1757    0.3348    0.2254

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM