数学建模常用模型11 :熵权法

给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)

PS:巨方便简单上手,貌似现在是免费

官网:www.mpaidata.com   mpai数据科学平台

 

 

按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;如果指标的信息熵越小,该指标提供的信息量越大,在综合评价中所起作用理当越大,权重就应该越高。

step1. 数据标准化

  将各个指标的数据进行标准化处理。

假设给定了k个指标 ,其中 。假设对各指标数据标准化后的值为

那么

                           

step2. 求各指标的信息熵

   根据信息论中信息熵的定义,一组数据的信息熵

                                                      

                             其中 ,如果 ,则定义

                                                

step3. 确定各指标权重

    根据信息熵的计算公式,计算出各个指标的信息熵为  。通过信息熵计算各指标的权重:

                                                     

 

matlab代码如下:

function weights = EntropyWeight(R)
%% 熵权法求指标权重,R为输入矩阵,返回权重向量weights

[rows,cols]=size(R);   % 输入矩阵的大小,rows为对象个数,cols为指标个数
k=1/log(rows);         % 求k

f=zeros(rows,cols);    % 初始化fij
sumBycols=sum(R,1);    % 输入矩阵的每一列之和(结果为一个1*cols的行向量)
% 计算fij
for i=1:rows
    for j=1:cols
        f(i,j)=R(i,j)./sumBycols(1,j);
    end
end

lnfij=zeros(rows,cols);  % 初始化lnfij
% 计算lnfij
for i=1:rows
    for j=1:cols
        if f(i,j)==0
            lnfij(i,j)=0;
        else
            lnfij(i,j)=log(f(i,j));
        end
    end
end

Hj=-k*(sum(f.*lnfij,1)); % 计算熵值Hj
weights=(1-Hj)/(cols-sum(Hj));
end

 

你可能感兴趣的:(数学建模,算法)