用”熵值法确定权重“怎么用MATLAB软件实现?

用”熵值法确定权重“怎么用MATLAB软件实现?,第1张

在线分析软件spssau(SPSSAU)可以做熵值法计算,点一下返滚裂即可完成分析,漏闭非常简单。

同时提供智能分析文字,如果有不会的地方可以查看备首帮助手册中的说明。

%输入

x=[

3.69 3.71 3.65 3.87

3.71 4.07 3.87 4.42

4.30 3.75 3.63 4.43

4.08 3.78 3.65 4.49

3.93 3.87 4.37 4.47

4.18 3.96 3.72 4.46

]

% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分

% x为原始数据矩阵, 一行代表一个组, 每列对应一个成分指标

% s返回各行得分, w返回各列权重

[n,m]=size(x)% n=响应面/实验组数, m=成分指标

%% 数据的归一化处理

[X,ps]=mapminmax(x',0,1)

ps.ymin=0.002% 归一化后的最小值

ps.ymax=0.996% 归一化后扮首的最大值

ps.yrange=ps.ymax-ps.ymin% 归一化后的极差,若不调整该值, 则逆运算会出错

X=mapminmax(x'裂旅,ps)

% mapminmax('reverse',xx,ps)% 反归一化, 回到原数据

X=X'  % X为归一化后的数据

%% 计算第j个指标下,肆缺凳第i个记录占该指标的比重p(i,j)

for i=1:n

    for j=1:m

        p(i,j)=X(i,j)/sum(X(:,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

y(:,1)=x(:,1)*w(1)+x(:,2)*w(2)%输出

y

%%%赋值

m=3

n=4 %%%%矩阵的行列下标

c=[1 2 3 4 5 6 7 89 10 11 12]

%%%% 数据规运颤范化

r=[]

for i=1:m

for j=1:n

r(i,j)=abs(c(i,j)-min(c(i,:)))/(max(c(i,:))-min(c(i,:)))

end

end

%%%%定义熵

for i=1:m

for j=1:m

k(i,j)=r(i,j)/sum(r(:,j))

end

end

for i=1:m

for j=1:n

if (k(i,j)==0)

k_lnk(i,j)=0

else

k_lnk(i,j)=k(i,j)*log(k(i,j))

end

end

end

for i=1:m

h(i)=-log(n)*sum(k_lnk(i,:))%定义熵的第i个唯悄悄指标,公式应该是错误的吧,应该是j=1,n吧

end

%%计算评价指标的变异系数

g=1-h

%%计算评价指标的熵权

w=g./sum(g)

%%% tmd gongsi 禁止拷贝,打了两遍,我够辛苦的,不指渣给分没天理了

%%%测试用矩阵较有规律,分母为0了,换一些其他的数据就较为正常了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12273205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存