熵权法matlab代码

熵权法matlab代码

说明

原理: 参考 https://www.zhihu.com/question/357680646

代码

%main.m
%% 数据读取
clear all;
clc;
data=importdata('data.mat');
num_sample=size(data,1);
num_aspect=size(data,2);
%% 数据标准化
data_standard=data_standardization(data);
%% 求各指标的信息熵
aspect_comentropy=data_comentropy(data_standard);
%%  确定各指标权重
aspect_weight=data_weight(aspect_comentropy)
function  data_standard  = data_standardization( data )
% 数据标准化
%   对该矩阵的每一个指标数据进行标准化处理
num_sample=size(data,1);
num_aspect=size(data,2);
data_standard=zeros(num_sample,num_aspect);
for j=1:num_aspect
    max_this_aspect=max(data(:,j));
    min_this_aspect=min(data(:,j));
    for i=1:num_sample
        data_standard(i,j)=(data(i,j)-min_this_aspect)/(max_this_aspect-min_this_aspect);
    end
end
end
function aspect_comentropy = data_comentropy( data )
%求解各指标的信息熵
%   input:data为标准化后的样本-指标矩阵
%   output:各指标对应的信息熵

num_sample=size(data,1);
num_aspect=size(data,2);
p=zeros(num_sample,num_aspect);
for j=1:num_aspect
    sum_this_aspect=sum(data(:,j));
    for i=1:num_sample
        p(i,j)=data(i,j)/sum_this_aspect;
    end
end
E=zeros(1,num_aspect);
for j=1:num_aspect
    sum_p_lnp=0;
    for i=1:num_sample
        if p(i,j)==0
            assist=0;
        else
            assist=p(i,j)*log(p(i,j));
        end
        sum_p_lnp=sum_p_lnp+ assist;
    end
    E(j)=(-1/(log(num_sample)))*sum_p_lnp;
end
aspect_comentropy=E;
end
function aspect_weight = data_weight( data )
%计算各指标权重
%   输入为各指标信息熵的行向量
%    输出为各指标权重
num_aspect=size(data,2);
sum_data=sum(data);
we=zeros(1,num_aspect);
for i=1:num_aspect
    we(i)=(1-data(i))/(num_aspect-sum_data);
end
aspect_weight=we;
end
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值