zoukankan      html  css  js  c++  java
  • MATLAB熵权法计算权重

    一、基本原理

    在信息论中,熵是对不确定性的一种度量。不确定性越大,熵就越大,包含的信息量越大;不确定性越小,熵就越小,包含的信息量就越小。

    根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0.

    熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。

    熵权法的思想是:变量数值变化越大,变异程度越大,则其权重应该更大;反之权重则越小。这是较为合理的。

    二、MATLAB实现

    (1)方法一

    前提:输入的矩阵已经归一化到0.001-0.999之间(这里不是0-1是因为0-1会出问题)

    %B矩阵中的每一列均已经归一化至0-1
    B(B==0)=0.0001;
    B(B==1)=0.9999;
    
    [n,m]=size(B); % n个样本, m个指标
    %%计算第j个指标下,第i个样本占该指标的比重p(i,j)
    for i=1:n
        for j=1:m
            p(i,j)=B(i,j)/sum(B(:,j));
        end
    end
    %%计算第j个指标的熵值e(j)
    k=1/log(n);
    for j=1:m
        e(j)=-k*sum(p(:,j).*log(p(:,j)));
    end
    d=ones(1,m)-e; %计算信息熵冗余度
    w=d./sum(d); %求权值w 主要需要的结果是这个
    s=100*w*B'; %求综合得分
    

    (2)方法二——推荐(不需要提前进行归一化 且直接得到每个样本的得分值)

    输入的矩阵R的行数为样本数,列代表属性或者指标

    [rows,cols]=size(R);   % 输入矩阵的大小,rows为对象个数,cols为指标个数
    k=1/log(rows);         % 求k
    Rmin = min(R);
    Rmax = max(R);
    A = max(R) - min(R);
    y = R - repmat(Rmin,rows,1);
    %y(i,j) = (R - repmat(Rmin,51,1))/(repmat(A,51,1));
    for j = 1 : size(y,2)
         y(:,j) = y(:,j)/A(j);
    end
    %2 求Y(i,j)
    S = sum(y,1);
    Y = zeros(rows,cols); 
    for i = 1 : size(Y,2)
        Y(:,i) = y(:,i)/S(i)
    end
    %3
    lnYij=zeros(rows,cols);  % 初始化lnYij
    % 计算lnYij
    for i=1:rows
        for j=1:cols
            if Y(i,j)==0
                lnYij(i,j)=0;
            else
                lnYij(i,j)=log(Y(i,j));
            end
        end
    end
    ej=-k*(sum(Y.*lnYij,1)); % 计算熵值Hj
    %4
    weights=(1-ej)/(cols-sum(ej));
    %5
    F = zeros(rows,cols);
    for k = 1 : size(R,2)
         F(:,k) = weights(k)*y(:,k);
    end
    format long
    F = sum(F,2);  %F即为对6个变量进行熵权法客观赋权后,计算获得的51年来的综合评分
    

      

    参考:

    https://zhuanlan.zhihu.com/p/28067337 方法一

    https://www.cnblogs.com/qq874455953/p/10792579.html 考虑正向和负向指标

    https://blog.csdn.net/wbj3106/article/details/82290445 方法二

    https://zhuanlan.zhihu.com/p/115411437 R语言版

  • 相关阅读:
    浅谈Eclipse中maven的搭建
    sdk的相关知识以及浅谈手机模拟自动化
    java开发环境搭建
    Python学习————反序列化器(复习)
    Python学习————序列化器(复习)
    Python学习————jwt
    Python学习————对称加密和非对称加密
    Python学习————drf(七)
    Python学习————集群和分布式
    Python学习————drf(六)
  • 原文地址:https://www.cnblogs.com/icydengyw/p/12803013.html
Copyright © 2011-2022 走看看