Matlab計算熵權法

如需轉載,請註明來源,謝謝合作。
若本文對您有一點點的幫助,歡迎點贊、評論和關注。您的鼓勵和支持是我繼續學習和分享的動力。
熵權法是一種根據包含各個變量的變異程度進行賦權的方法,是一種客觀賦權法。而直接給定變量權重或者專家打分給出權重則屬於主觀賦權法。熵權法的思想是:變量數值變化越大,變異程度越大,則其權重應該更大;反之權重則越小。這是較爲合理的。
熵權法計算過程不難,運用excel也可計算。但其本身較爲繁雜,需要做多個變量甚至多個個體時,matlab就顯示了矩陣運算快速、準確和方便的特點。作者也提供了利用excel和matlab計算的對比案例數據,供大家參考、理解和交流。
https://pan.baidu.com/s/16583MuoxgehtnpCrUisXGg(請關注作者,並在下方評論留下郵箱向作者獲取密碼)

熵權法的計算公式:

這裏寫圖片描述

熵權法matlab程序:

%{選擇下面一行,F9運行。新建空矩陣R,將51年*6個變量(x1到x6)的數據粘貼入矩陣R
R=[] 
%}clear
%1
[rows,cols]=size(R);   % 輸入矩陣的大小,rows爲對象個數,cols爲指標個數
k=1/log(rows);         % 求k
Rmin = min(R);
Rmax = max(R);
A = max(R) - min(R);
y = R - repmat(Rmin,51,1);
%y(i,j) = (R - repmat(Rmin,51,1))/(repmat(A,51,1));
for j = 1 : size(y,2)
     y(:,j) = y(:,j)/A(j)
end
%2 求Y(i,j)
S = sum(y,1)
Y = zeros(rows,cols); 
for i = 1 : size(Y,2)
    Y(:,i) = y(:,i)/S(i)
end
%3
lnYij=zeros(rows,cols);  % 初始化lnYij
% 計算lnYij
for i=1:rows
    for j=1:cols
        if Y(i,j)==0
            lnYij(i,j)=0;
        else
            lnYij(i,j)=log(Y(i,j));
        end
    end
end
ej=-k*(sum(Y.*lnYij,1)); % 計算熵值Hj
%4
weights=(1-ej)/(cols-sum(ej));
%5
F = zeros(rows,cols);
for k = 1 : size(R,2)
     F(:,k) = weights(k)*y(:,k)
end
format long
F = sum(F,2)  %F即爲對6個變量進行熵權法客觀賦權後,計算獲得的51年來的綜合評分

對比提供的excel後發現,matlab極爲快速、準確、方便對繁雜的熵權法進行了運算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章