【综合评价分析】熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列
【综合评价分析】熵权算法确定权重 原理+完整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);
end
S = sum(y,1); %列之和(用于列归一化)
for i = 1 : cols %该循环用于列的归一化
Y(:,i) = y(:,i)/S(i);
end
Y; %打印矩阵正向指标标准化处理结果
k=1/log(rows); % 求k
lnYij1=zeros(rows,cols); % 初始化lnYij1
% 计算lnYij1
for 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
end
end
ej1=-k*(sum(Y.*lnYij1,1)); % 计算正向指标标准化熵值ej1
weights1=(1-ej1)/(cols-sum(ej1)); %正向指标权重weights1
%结构体定义
result(1).guiyihua = Y; %矩阵归一化结果赋给result
result(1).shangzhi = ej1; %熵值赋给result
result(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);
end
S = sum(y1,1); %列之和(用于列归一化)
for i = 1 : cols %该循环用于列的归一化
Y1(:,i) = y1(:,i)/S(i);
end
Y1; %打印矩阵负向指标标准化处理结果
k=1/log(rows); % 求k
lnYij2=zeros(rows,cols); % 初始化lnYij2
% 计算lnYij1
for 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
end
end
ej2=-k*(sum(Y1.*lnYij2,1)); % 计算负向指标标准化熵值ej2
weights2=(1-ej2)/(cols-sum(ej2)); %负向指标权重weights2
%结构体定义
result(1).guiyihua = Y1; %矩阵归一化结果赋给result
result(1).shangzhi = ej2; %熵值赋给result
result(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代码+详细注释+操作实列。
采用线性比例变换法将评价矩阵进行初等变换,得到归一化矩阵进而解决不同指标值的同质化问题,其中正向指标与负向指标数值不同,但绝对值越大越好凹,例如计算指标的重要性与权重值的关系,权重值越大,则代表重要性越强,所以选择正向指标。
式中:yij ——评价矩阵原始值。
归一化:计算第 j 项指标下第 i 个样本值占该指标的比重 qij。
式中:m——总样本数。
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);
end
S = sum(y,1); %列之和(用于列归一化)
for i = 1 : cols %该循环用于列的归一化
Y(:,i) = y(:,i)/S(i);
end
Y; %打印矩阵正向指标标准化处理结果
k=1/log(rows); % 求k
lnYij1=zeros(rows,cols); % 初始化lnYij1
% 计算lnYij1
for 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
end
end
ej1=-k*(sum(Y.*lnYij1,1)); % 计算正向指标标准化熵值ej1
weights1=(1-ej1)/(cols-sum(ej1)); %正向指标权重weights1
%结构体定义
result(1).guiyihua = Y; %矩阵归一化结果赋给result
result(1).shangzhi = ej1; %熵值赋给result
result(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);
end
S = sum(y1,1); %列之和(用于列归一化)
for i = 1 : cols %该循环用于列的归一化
Y1(:,i) = y1(:,i)/S(i);
end
Y1; %打印矩阵负向指标标准化处理结果
k=1/log(rows); % 求k
lnYij2=zeros(rows,cols); % 初始化lnYij2
% 计算lnYij1
for 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
end
end
ej2=-k*(sum(Y1.*lnYij2,1)); % 计算负向指标标准化熵值ej2
weights2=(1-ej2)/(cols-sum(ej2)); %负向指标权重weights2
%结构体定义
result(1).guiyihua = Y1; %矩阵归一化结果赋给result
result(1).shangzhi = ej2; %熵值赋给result
result(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代码+详细注释+操作实列。
默认函数名保存即可
%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
result=SQ(data)
result=SQfuxiang(data)
运行指令换成
result=SQfuxiang(data)
即可
运行结果就不再过多赘述。
采用熵权法进行客观权重计算的步骤为:
①根据评价等级对指标重要性进行打分,然后构建评价矩阵;
②将评价矩阵进行归一化处理,得到归一化评价矩阵;
③根据信息熵计算公式,计算各个指标 的信息熵;
④根据熵权计算公式,计算各个指标的客观权重值 。
本文包括了熵权算法法确定权重原理+完整MATLAB代码+详细注释+操作实列。