分类与评估模型(一)
层次分析法
原理
面对评价类问题,需要解决的无外乎是目标、方案、合适的指标三个问题。
首先列出如下表格,我们主要做的工作即是合理地填写表格,给出评估分数。
/ | 指标权重 | 方案一 | 方案二 | 方案三 |
---|---|---|---|---|
指标一 | / | |||
指标二 | / | |||
指标三 | / | |||
指标四 | / | |||
指标五 | / |
那么如何确定权重比呢?
这里使用两两比较的方法,填写以下表格得到判断矩阵
/ | 指标一 | 指标二 | 指标三 | 指标四 | 指标五 |
---|---|---|---|---|---|
指标一 | 1 | 1/2 | 4 | 3 | 3 |
指标二 | 2 | 1 | 7 | 5 | 5 |
指标三 | 1/4 | 1/7 | 1 | 1/2 | 1/3 |
指标四 | 1/3 | 1/5 | 2 | 1 | 1 |
指标五 | 1/3 | 1/5 | 3 | 1 | 1 |
可以看出矩阵的元素在主对角线两两成倒数(这种矩阵成为正互反矩阵),判断的依据为下图所示。
标度 | 含义 |
---|---|
1 | 同等重要 |
3 | 比后者稍微重要 |
5 | 比后者明显重要 |
7 | 比后者强烈重要 |
9 | 比后者极端重要 |
2,4,6,8 | 处于上述中间 |
根据上表的评估方法,接着填写下表
指标一 | 方案一 | 方案二 | 方案三 |
---|---|---|---|
方案一 | 1 | 2 | 1 |
方案二 | 1/2 | 1 | 2 |
方案三 | 1 | 1/2 | 1 |
细心的同学会发现上表中的逻辑错误,即是方案一比方案二重要、方案一与方案三同等重要,而在第二行又表示方案二比三重要,这就出现了矛盾。若要避免这样的矛盾,则要进行一致性检验。
一致性检验
为避免上述错误,在使用判断矩阵之前必须进行一致性检验,避免不一致性过大导致判断错误。
一致矩阵的充要条件为:1、矩阵每个元素大于零 2、矩阵对角线元素都为一 3、矩阵的秩为一。
一致矩阵的一个特征值为矩阵迹的和,即为方阵阶数N,其余特征值均为0,此时特征向量就是矩阵的第一列元素。若一个正互反矩阵不是一致矩阵时,它的特征值必然大于N,且判断矩阵越不一致时,特征值与N相差越大。
检验步骤
- 计算一致性指标CI(计算公式为:(最大特征值-N)/(N-1))
- 查找平均随机一致性指标RI(百度可搜)
- 计算一致性比例CR(CI/RI)
若CR小于0.1,则判断矩阵的一致性可以接受,否则就要修改判断矩阵。
计算权重
指标一 | 方案一 | 方案二 | 方案三 |
---|---|---|---|
方案一 | 1 | 2 | 4 |
方案二 | 1/2 | 1 | 2 |
方案三 | 1/4 | 1/2 | 1 |
如上表所示,可看出这是一个一致矩阵,那么在指标一的dimension中,方案一的权重即为1/(1+0.5+0.25),方案二的权重即为0.5/(1+0.5+0.25),方案三同理。
若是非一致矩阵呢?还是拿之前的表格举例
指标一 | 方案一 | 方案二 | 方案三 |
---|---|---|---|
方案一 | 1 | 2 | 1 |
方案二 | 0.5 | 1 | 2 |
方案三 | 1 | 0.5 | 1 |
第一步先做上一步一致矩阵的操作,将每个元素处以所在列的元素和,将每一行的计算结果处以三,即求算术平均根,就可得到权重值。
得到权重后即可填入最初的一张表,重复操作,就可得到评价分数。
层次分析的局限
1.指标数不能过多,最好小于10个。
2.判断矩阵较为主观
代码
disp('请输入判断矩阵A(n阶)');
A=input('A=');
【n,n】=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while k>p
i=i+1;
x(:,i)=A*y(:,i-1);
m(i)=max(x(:,i));
y(:,i)=x(:,i)/m(i);
k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp('权向量');disp(w);
disp('最大特征值');disp(t);
%以下是一致性检验
CI=(t-n)/(n-1);RI=【0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59】;
CR=CI/RI(n);
if CR<0.10
disp('此矩阵的一致性可以接受!');
disp('CI=');disp(CI);
disp('CR=');disp(CR);
else
disp('此矩阵的一致性不可以接受!');
end