评价模型 - topsis和熵权法 & 主成分分析法 & RSR

主要解决多指标评价模型

首先来看topsis,考虑一种类型数据
首先正向化,比如都改成越大越好(
如果越小越好?max - x;
在某个区间内最好?
中间型指标?image
)

然后标准化,把原式数据改成0~1且和为1的数据
image

当只有一种数据时:
image

有了这个公式,就可以拓展到高维了
image

但是这样有个问题,每种数据的占比可能不同,如何赋权?需要用到熵权法优化。

熵权法是一种依靠数据本身来赋权的方法,通过引入“熵”的概念来进行

步骤:
image

image

image

image

image

image

image

(Yij)

主成分分析法

A=[1 2 5 
    1/2 1 2
    1/5 1/2 1]
%% 一致性检验和权向量计算
n = length(A);
[v,d]=eig(A);%计算特征根和特征向量
[temp,loc] = max(max(d));%返回loc为特征向量所在列
r=max(max(d));
CI=(r-n)/(n-1);
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
if  CR<0.10 || n==2
    CR_Result='通过';
   else
    CR_Result='不通过';   
end
 
%% 权向量计算
w=v(:,loc)/sum(v(:,loc));
w=w';
 
%% 结果输出
disp('该判断矩阵权向量计算报告:');
disp(['CI:' num2str(CI)]);
disp(['CR:' num2str(CR)]);
disp(['一致性检验结果:' CR_Result]);
disp(['特征值:' num2str(r)]);
disp(['权向量:' num2str(w)]);


另一个模板

shang.m

function [s,w]=shang(x,ind)
%实现用熵值法求各指标(列)的权重及各数据行的得分
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%ind指示向量,指示各列正向指标还是负向指标,1表示正向指标,2表示负向指标
%s返回各行(样本)得分,w返回各列权重
[n,m]=size(x); % n个样本, m个指标
%%数据的归一化处理
for i=1:m
    if ind(i)==1 %正向指标归一化
        X(:,i)=guiyi(x(:,i),1,0.002,0.996);    %若归一化到[0,1], 0会出问题
    else %负向指标归一化
        X(:,i)=guiyi(x(:,i),2,0.002,0.996);
    end
end
%%计算第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
s=100*w*X'; %求综合得分

guiyi.m

function y=guiyi(x,type,ymin,ymax)
%实现正向或负向指标归一化,返回归一化后的数据矩阵
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%type设定正向指标1,负向指标2
%ymin,ymax为归一化的区间端点
[n,m]=size(x);
y=zeros(n,m);
xmin=min(x);
xmax=max(x);
switch type
    case 1
        for j=1:m
            y(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin;
        end
    case 2
        for j=1:m
            y(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin;
        end
end

main.m

load shang_datas

Ind=[1 1 1 1 2]; %指定各指标的正向or负向

[S,W]=shang(shang_datas,Ind)


RSR 秩和比
评价模型,利用若干指标对对象进行评价
秩(rank) 指的是排序之后某个元素的排名

对于一个指标 \(i\),先对 \(n\) 个对象的对应指标排序(越小越好则从大往小排,越大越好则从小往大排),求出每个对象对应的排名 \(R_{1..n, i}\)
然后对于所有的指标都求出来 \(R_{i,j}\)

这篇文章讲的不错

posted @ 2022-10-09 19:08  SkyRainWind  阅读(2674)  评论(0编辑  收藏  举报