楼主: diviny
13590 16

怎么用matlab做熵权? [推广有奖]

11
xxxxtutu 发表于 2014-2-7 22:53:55
Buffy19880526 发表于 2013-3-13 23:11
顺着6楼的程序,我已经演算了,可行!木有问题 !
请问,它的输入A到底是什么东西啊...

12
wojen 发表于 2014-5-13 10:29:24
熵权法求权重的Matlab实现 - Andy20081251的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/andy20081251/article/details/23192465


13
wojen 发表于 2014-5-13 10:47:11
1、根据熵权法理论,编写Matlab程序如下:(新建一个M-File)
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
2、testData=rand(56,21)  (rand中的第一项为样本观测对象数目,第二项为指标个数)
3、 weights=EntropyWeight(testData)

14
cfamq 发表于 2015-3-29 18:41:14
请问怎么输入矩阵啊?您给的程序代码只是调用一个随机的矩阵啊,matlab新手不太懂啊,急求,谢谢!

15
腊梅要早起 发表于 2015-9-5 13:05:25
6楼可以用,赞一个

16
gududianzi 发表于 2016-10-4 17:00:02
怎么标注化呀?这个程序里没有把数据标准化吧

17
huangli 发表于 2017-2-21 22:45:58
不要相信上面的,代码不能用,问题是出在标准化上。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 04:27