数学建模·熵权法

熵权法

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

具体定义

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

具体步骤

Step1正向化处理

复制代码
将所以评价指标转换为极大型,目的是为了求出概率矩阵
将极小型转换为极大型

极小型是指评价指标越小越好

  • 代码如下:注意矩阵X可以是列向量
matlab 复制代码
function[res]=Min2Max(X)
    res=max(X)-X;
end

将中间型转换为极大型

中间型是指评价指标越接近最佳值越好,其中最佳值是给出的

  • 代码如下
matlab 复制代码
function[res]=Mid2Max(X,best)
     M=max(abs(X-best));
     res=1-abs(X-best)/M;
end

将区间型转换为极大型

区间型是指评价指标在区间内最好,在区间外欠佳

  • 代码如下
matlab 复制代码
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

Step2标准化

复制代码
标准化是将每一列的每一个元素除以每一列的元素平方的求和

公式如下:

概率矩阵

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

Step3利用信息熵计算权重集

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

主体代码

matlab 复制代码
%% 读取数据
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);```
相关推荐
程序员江同学44 分钟前
Kotlin 技术月报 | 2025 年 4 月
android·kotlin
SlowFeather1 小时前
Unity 使用 ADB 实时查看手机运行性能
android·unity·adb·性能优化·profiler
Android 小码峰啊1 小时前
Android Compose 框架矢量图标深入剖析(七)
android
Chrome深度玩家5 小时前
谷歌翻译安卓版拍照翻译精准度与语音识别评测【轻松交流】
android·人工智能·语音识别
长点点6 小时前
从架构角度了解安卓APP(1):安卓核心组件的设计逻辑与演进
android·架构·app
用户71887350336806 小时前
Android适配最新SplashScreen方案
android·android jetpack
EQ-雪梨蛋花汤7 小时前
【Part 2安卓原生360°VR播放器开发实战】第二节|基于等距圆柱投影方式实现全景视频渲染
android·音视频·vr
Railshiqian7 小时前
Framework.jar里的类无法通过Class.forName反射某个类的问题排查
android·反射·framework.jar
鸿蒙布道师7 小时前
鸿蒙NEXT开发正则工具类RegexUtil(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei