【综合评价分析】熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列
文章目录
采用熵权法进行客观权重计算的步骤为:
①根据评价等级对指标重要性进行打分,然后构建评价矩阵;
②将评价矩阵进行归一化处理,得到归一化评价矩阵;
③根据信息熵计算公式,计算各个指标 的信息熵;
④根据熵权计算公式,计算各个指标的客观权重值 。
1. 熵权法确定指标权重
(1)构造评价矩阵 Ymn
(2)评价矩阵标准化处理
采用线性比例变换法将评价矩阵进行初等变换,得到归一化矩阵进而解决不同指标值的同质化问题,其中正向指标与负向指标数值不同,但绝对值越大越好凹,例如计算指标的重要性与权重值的关系,权重值越大,则代表重要性越强,所以选择正向指标。
式中:yij ——评价矩阵原始值。
归一化:计算第 j 项指标下第 i 个样本值占该指标的比重 qij。
式中:m——总样本数。
(3)计算指标信息熵值 Mj
(4)计算各指标权重 Nj
2.完整代码
2.1 熵权法(正向化指标)
%data是n个对象、m个评价指标 n行m列数据%data是唯一需要从外界输入的数据function result=SQ(data);R = data;[rows,cols]=size(R); % 输入矩阵的大小,rows为行数(对象个数),cols为列数(指标个数)Rmin = min(R); %矩阵中最小行Rmax = max(R); %矩阵中最大行A = max(R) - min(R); %分母 矩阵中最大行减最小行y = R - repmat(Rmin,rows,1); %分子 R矩阵每一行减去最小行for j = 1 : cols %该循环用于正向指标标准化处理 分子/分母 y(:,j) = y(:,j)/A(j);endS = sum(y,1); %列之和(用于列归一化)for i = 1 : cols %该循环用于列的归一化 Y(:,i) = y(:,i)/S(i); endY; %打印矩阵正向指标标准化处理结果k=1/log(rows); % 求klnYij1=zeros(rows,cols); % 初始化lnYij1% 计算lnYij1for i=1:rows %循环遍历取对数 for j=1:cols if Y(i,j)==0; lnYij1(i,j)=0; else lnYij1(i,j)=log(Y(i,j)); %log取对数 end endendej1=-k*(sum(Y.*lnYij1,1)); % 计算正向指标标准化熵值ej1weights1=(1-ej1)/(cols-sum(ej1)); %正向指标权重weights1%结构体定义result(1).guiyihua = Y; %矩阵归一化结果赋给resultresult(1).shangzhi = ej1; %熵值赋给resultresult(1).weight = weights1; %权重赋给result
2.2熵权法(负向化指标)
%data是n个对象、m个评价指标 n行m列数据%data是唯一需要从外界输入的数据function result=SQfuxiang(data);R = data;[rows,cols]=size(R); % 输入矩阵的大小,rows为行数(对象个数),cols为列数(指标个数)Rmin = min(R); %矩阵中最小行Rmax = max(R); %矩阵中最大行A = max(R) - min(R); %分母 矩阵中最大行减最小行y1 = repmat(Rmax,rows,1) - R; %分子 最大行减去R矩阵每一行for j = 1 : cols %该循环用于负向指标标准化处理 分子/分母 y1(:,j) = y1(:,j)/A(j);endS = sum(y1,1); %列之和(用于列归一化)for i = 1 : cols %该循环用于列的归一化 Y1(:,i) = y1(:,i)/S(i); endY1; %打印矩阵负向指标标准化处理结果k=1/log(rows); % 求klnYij2=zeros(rows,cols); % 初始化lnYij2% 计算lnYij1for i=1:rows %循环遍历取对数 for j=1:cols if Y1(i,j)==0; lnYij2(i,j)=0; else lnYij2(i,j)=log(Y1(i,j)); %log取对数 end endendej2=-k*(sum(Y1.*lnYij2,1)); % 计算负向指标标准化熵值ej2weights2=(1-ej2)/(cols-sum(ej2)); %负向指标权重weights2%结构体定义result(1).guiyihua = Y1; %矩阵归一化结果赋给resultresult(1).shangzhi = ej2; %熵值赋给resultresult(1).weight = weights2; %权重赋给result
3.运行演示
3.1复制代码,建立函数
默认函数名保存即可
3.2 导入data数据集
%data是n个对象、m个评价指标 n行m列数据
%data是唯一需要从外界输入的数据
以下列子所用数据集为
5 3 7 3
6 7 6 4
9 4 7 5
10 6 9 2
6 4 8 6
7 2 8 3
5 4 5 3
9 5 9 2
3.3 运行指令
result=SQ(data)
result=SQfuxiang(data)
3.4 运行结果
3.5 结构体 result变量
3.5.1 归一化
3.5.2 熵值
3.5.3 权重
3.6 熵权法(负向化指标)
运行指令换成
result=SQfuxiang(data)
即可
运行结果就不再过多赘述。
4.总结
采用熵权法进行客观权重计算的步骤为:
①根据评价等级对指标重要性进行打分,然后构建评价矩阵;
②将评价矩阵进行归一化处理,得到归一化评价矩阵;
③根据信息熵计算公式,计算各个指标 的信息熵;
④根据熵权计算公式,计算各个指标的客观权重值 。
本文包括了熵权算法法确定权重原理+完整MATLAB代码+详细注释+操作实列。
来源地址:https://blog.csdn.net/m0_52474147/article/details/127176733