数学建模·熵权法

熵权法

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

具体定义

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

具体步骤

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);```
相关推荐
Kapaseker3 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴3 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭13 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab14 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe19 小时前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少1 天前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker1 天前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋1 天前
Android 协程时代,Handler 应该退休了吗?
android
火柴就是我2 天前
让我们实现一个更好看的内部阴影按钮
android·flutter