熵权法确定权重
function [s,w]=shang(x,ind)
%實現(xiàn)用熵值法求各指標(列)的權(quán)重及各數(shù)據(jù)行的得分
%x為原始數(shù)據(jù)矩陣, 一行代表一個樣本, 每列對應(yīng)一個指標
%ind指示向量,指示各列正向指標還是負向指標,1表示正向指標,2表示負向指標
%s返回各行(樣本)得分,w返回各列權(quán)重
[n,m]=size(x); % n個樣本, m個指標
%%數(shù)據(jù)的歸一化處理
for i=1:mif 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);end
end
%%計算第j個指標下,第i個樣本占該指標的比重p(i,j)
for i=1:nfor j=1:mp(i,j)=X(i,j)/sum(X(:,j));end
end
%%計算第j個指標的熵值e(j)
k=1/log(n);
for j=1:me(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; %計算信息熵冗余度
w=d./sum(d); %求權(quán)值w
s=100*w*X'; %求綜合得分
用到的歸一化函數(shù):
function y=guiyi(x,type,ymin,ymax) %實現(xiàn)正向或負向指標歸一化,返回歸一化后的數(shù)據(jù)矩陣 %x為原始數(shù)據(jù)矩陣, 一行代表一個樣本, 每列對應(yīng)一個指標 %type設(shè)定正向指標1,負向指標2 %ymin,ymax為歸一化的區(qū)間端點 [n,m]=size(x); y=zeros(n,m); xmin=min(x); xmax=max(x); switch typecase 1for j=1:my(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin;endcase 2for j=1:my(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin;end end程序測試,現(xiàn)有數(shù)據(jù)shang_datas.mat, 為2014年31個省份的就業(yè)與勞動保障數(shù)據(jù), 包含5個指標:社會養(yǎng)老保險參保率、醫(yī)療保險參保率、失業(yè)保險參保率、工傷保險參保率、工傷事故發(fā)生率, 其中第5個指標為負向指標。
執(zhí)行代碼:
運行結(jié)果:
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
總結(jié)