熵權法
一種計算評價指標之間權重的方法。熵權法是一種客觀的方法,沒有主觀性,比較可靠。
具體定義
熵權法的核心在于計算信息熵,信息熵反映了一個信息的紊亂程度,體現了信息的可靠性
具體步驟
Step1正向化處理
將所以評價指標轉換為極大型,目的是將數據進一步轉變為概率
function[res]=Min2Max(X)res=max(X)-X;
end
中間型是指評價指標越接近最佳值越好,其中最佳值是給出的
- 代碼如下
function[res]=Mid2Max(X,best)M=max(abs(X-best));res=1-abs(X-best)/M;
end
區間型是指評價指標在區間內最好,在區間外欠佳
- 代碼如下
function[res]=interval2Max(X,a,b)M=max(a-min(X),max(X)-b);for i=1:size(X)if X(i)>=a&&X(i)<=bX(i)=1;elseif X(i)<aX(i)=1-(a-X(i))/M;elseX(i)=1-(X(i)-b)/M;endendres=X;
end
Step2標準化
標準化是將每一列的每一個元素除以每一列的元素平方的求和
標準化的意義:消除計量單位不同造成的影響
概率矩陣
如果說正向化使每個數據是是不是好事的程度,這時候歸一化就可以得到好事放生的概率
Step3利用信息熵計算權重集
注意信息熵的計算公式里有對數,所以應該適當修改概率矩陣值為0的項
這個公式本質上也是對每一列中所有元素按照公式求和,最后除以ln n歸一化處理
主體代碼
%% 讀取數據
X=xlsread('blind date.xlsx');
disp("成功讀取!")
%% 正向化
disp("現在進行正向化操作,請按照提示操作")
vec_col=input("請輸入需要正向化的列數,以數組的形式輸入\n");
for i=1:size(vec_col,2)%1是行數2是列數
flag = input(['第' num2str(vec_col(i)) '列是哪類數據(【1】:極小型 【2】:中間型 【3】:區間型),請輸入序號:\n']);if flag==1X(:,vec_col(i))=Min2Max(X(:,vec_col(i)));elseif flag==2best=input("請你傳入最佳值\n");X(:,vec_col(i))=Mid2Max(X(:,vec_col(i)),best);elsearr=input("請你輸入區間的左右端點,以數組的形式\n");X(:,vec_col(i))=Interval2Max(X(:,vec_col(i)),arr(1),arr(2));end
end
disp("正向化完成!");%% 標準化
[n,m]=size(X);
Square_X=X.*X;
Sum_X=sum(Square_X).^0.5;
Stand_X=X./repmat(Sum_X,n,1);
disp("標準化完成!")
%% 概率矩陣P
P=Stand_X./repmat(sum(Stand_X),n,1);
for i=1:nfor j=1:mif P(i,j)==0P(i,j)=0.000001endend
end
H=sum(-P.*log(P));
e=H./log(n);
d=1-e;
d=d./sum(d);
disp("計算完成,下面是正向矩陣、標準矩陣和計算得出的權重矩陣");
disp(X);
disp(Stand_X);
disp(d);```