기술나눔

수학적 모델링·엔트로피 가중치법

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

엔트로피 가중치 방법

一种计算评价指标之间权重的方法。熵权法是一种客观的方法,没有主观性,比较可靠。
  • 1

구체적인 정의

熵权法的核心在于计算信息熵,信息熵反映了一个信息的紊乱程度,体现了信息的可靠性
  • 1

여기에 이미지 설명을 삽입하세요.

특정 단계

Step1 전처리

将所以评价指标转换为极大型,目的是为了求出概率矩阵
  • 1
  • 매우 작은 것을 매우 큰 것으로 변환
    매우 작다는 것은 평가 지수가 작을수록 좋다는 것을 의미합니다.
    여기에 이미지 설명을 삽입하세요.
  • 코드는 다음과 같습니다. 행렬 X는 열 벡터일 수 있습니다.
function[res]=Min2Max(X)
    res=max(X)-X;
end
  • 1
  • 2
  • 3

  • 중간 크기를 매우 큰 크기로 변환

    중간형은 평가지표가 최적값에 가까울수록 좋다는 뜻으로 최적값을 주는 곳이다.
    여기에 이미지 설명을 삽입하세요.

  • 코드는 아래와 같이 표시됩니다.

function[res]=Mid2Max(X,best)
     M=max(abs(X-best));
     res=1-abs(X-best)/M;
end
  • 1
  • 2
  • 3
  • 4

  • 간격 유형을 매우 큰 크기로 변환
    간격 유형은 평가 지수가 간격 내에서 가장 좋고 간격 외부에서는 좋지 않음을 의미합니다.
    여기에 이미지 설명을 삽입하세요.
  • 코드는 아래와 같이 표시됩니다.
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)<=b
            X(i)=1;
        elseif X(i)<a
            X(i)=1-(a-X(i))/M;
        else
            X(i)=1-(X(i)-b)/M;
        end
    end
    res=X;
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Step2표준화

标准化是将每一列的每一个元素除以每一列的元素平方的求和
  • 1

공식은 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

확률 행렬

如果说正向化创造了发生好事的样本数,标准化就是样本数除以样本空间得到概率
  • 1

여기에 이미지 설명을 삽입하세요.

Step3 정보 엔트로피를 사용하여 설정된 가중치 계산

注意信息熵的计算公式里有对数,所以应该适当修改概率矩阵值为0的项
这个公式本质上也是对每一列中所有元素按照公式求和,最后除以ln n归一化处理
  • 1
  • 2

여기에 이미지 설명을 삽입하세요.

제목 코드

%% 读取数据
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==1
        X(:,vec_col(i))=Min2Max(X(:,vec_col(i)));
    elseif flag==2
        best=input("请你传入最佳值n");
        X(:,vec_col(i))=Mid2Max(X(:,vec_col(i)),best);
    else
        arr=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:n
    for j=1:m
        if P(i,j)==0
            P(i,j)=0.000001
        end
    end
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);```

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44