標籤:

【評價演算法】01. 熵權法確定權重

一、基本原理

在資訊理論中,熵是對不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。

根據熵的特性,可以通過計算熵值來判斷一個事件的隨機性及無序程度,也可以用熵值來判斷某個指標的離散程度,指標的離散程度越大,該指標對綜合評價的影響(權重)越大。比如樣本數據在某指標下取值都相等,則該指標對總體評價的影響為0,權值為0.

熵權法是一種客觀賦權法,因為它僅依賴於數據本身的離散性。

二、熵值法步驟

1. 對 n 個樣本, m 個指標,則 x_{ij} 為第 i 個樣本的第 j 個指標的數值( i=1,,cdots,,n; ; j=1, , cdots, , m );

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

由於各項指標的計量單位並不統一,因此在用它們計算綜合指標前,先要進行標準化處理,即把指標的絕對值轉化為相對值,從而解決各項不同質指標值的同質化問題。

另外,正向指標和負向指標數值代表的含義不同(正向指標數值越高越好,負向指標數值越低越好),因此,對於正向負向指標需要採用不同的演算法進行數據標準化處理:

為了方便起見,歸一化後的數據 x_{ij} 仍記為 x_{ij} ;

3. 計算第 j 項指標下第 i 個樣本值占該指標的比重:

p_{ij}=frac{x_{ij}}{sumlimits_{i=1}^n x_{ij}}, quad i=1,, cdots,,n,;j=1,,cdots,,m

4. 計算第 j 項指標的熵值:

e_j=-ksum_{i=1}^n p_{ij} ln(p_{ij}), quad j=1,,cdots,,m

其中, k=1/ln(n) > 0. 滿足 e_j geq 0 ;

5. 計算信息熵冗餘度(差異):

d_j=1-e_j, quad j=1,,cdots,,m

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

w_j=frac{d_j}{sumlimits_{j=1}^m d_j},quad j=1,,cdots,,m

7. 計算各樣本的綜合得分:

s_i=sum_{j=1}^m w_j p_{ij}, quad i=1,,cdots,,n

三、Matlab實現

按上述演算法步驟,編寫Matlab函數:shang.m

function [s,w]=shang(x,ind)%實現用熵值法求各指標(列)的權重及各數據行的得分%x為原始數據矩陣, 一行代表一個樣本, 每列對應一個指標%ind指示向量,指示各列正向指標還是負向指標,1表示正向指標,2表示負向指標%s返回各行(樣本)得分,w返回各列權重[n,m]=size(x); % n個樣本, m個指標%%數據的歸一化處理for i=1:m if ind(i)==1 %正向指標歸一化 X(:,i)=guiyi(x(:,i),1,0.002,0.996); %若歸一化到[0,1], 0會出問題 else %負向指標歸一化 X(:,i)=guiyi(x(:,i),2,0.002,0.996); endend%%計算第j個指標下,第i個樣本占該指標的比重p(i,j)for i=1:n for j=1:m p(i,j)=X(i,j)/sum(X(:,j)); endend%%計算第j個指標的熵值e(j)k=1/log(n);for j=1:m e(j)=-k*sum(p(:,j).*log(p(:,j)));endd=ones(1,m)-e; %計算信息熵冗餘度w=d./sum(d); %求權值ws=100*w*p; %求綜合得分

用到的歸一化函數:

function y=guiyi(x,type,ymin,ymax)%實現正向或負向指標歸一化,返回歸一化後的數據矩陣%x為原始數據矩陣, 一行代表一個樣本, 每列對應一個指標%type設定正向指標1,負向指標2%ymin,ymax為歸一化的區間端點[n,m]=size(x);y=zeros(n,m);xmin=min(x);xmax=max(x);switch type case 1 for j=1:m y(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin; end case 2 for j=1:m y(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin; endend

程序測試,現有數據shang_datas.mat, 為2014年31個省份的就業與勞動保障數據, 包含5個指標:社會養老保險參保率、醫療保險參保率、失業保險參保率、工傷保險參保率、工傷事故發生率, 其中第5個指標為負向指標。

執行代碼:

load shang_datas

Ind=[1 1 1 1 2]; %指定各指標的正向or負向

[S,W]=shang(X,Ind)

運行結果:

S =

Columns 1 through 9

3.2624 11.7822 5.2952 1.3521 2.5262 2.0425 4.4215 2.6953 2.5208

Columns 10 through 18

7.8834 4.7410 7.4679 1.4645 3.2541 1.6292 3.3035 1.6282 1.9043

Columns 19 through 27

2.0526 7.8582 0.7256 3.8943 3.7992 1.7187 0.7766 0.6445 2.0167

Columns 28 through 31

0.7801 1.3353 2.2775 2.9462

W = 0.0896 0.2195 0.3330 0.3073 0.0506

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


推薦閱讀:

通俗理解條件熵
「熵」這個字是出現了 entropy 這個概念之後才出現的嗎?
從熵增(熱力學第二定律)的角度,能否說明戰爭是必然?
佛教和道家各種教義學說中如何理解宇宙熵值理論?

TAG: | 权重 | MATLAB |