TOPSIS法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度
以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
TOPSIS法使用距离尺度来度量样本差距,使用距离尺度就需要对指标属性进行同向化处理(若一个维度的数据越大越好,另一个维度的数据越小越好,会造成尺度混乱)
通常采用成本型指标向效益型指标转化(即数值越大评价越高,事实上几乎所有的评价方法都需要进行转化)
此外,如果需要使用雷达图进行展示,建议此处将所有数据都变成正数。
期望指标值越小越好(如患病率、死亡率等)
x
′
=
1
/
x
或
x
′
=
M
−
x
x'=1/x或x'=M-x
x′=1/x或x′=M−x
其中, M M M为指标 x x x可能取值的最大值
期望指标值既不要太大也不要太小,适当取中间值最好(如水质量评估PH值)
x
′
=
{
2
x
−
m
M
−
m
,
m
≤
x
≤
1
2
(
M
+
m
)
2
M
−
x
M
−
m
,
1
2
(
M
+
m
)
≤
x
≤
M
x^{\prime}=\left\{
其中 M M M为指标 x x x的可能取值的最大值, m m m为指标 x x x的可能取值的最小值。
期望指标的取值最好落在某一个确定的区间最好(如体温)
x
′
=
{
1
−
a
−
x
a
−
a
∗
x
<
a
1
a
≤
x
≤
b
1
−
x
−
b
b
∗
−
b
x
>
b
{x^{\prime}=\left\{
其中 [ a , b ] [a,b] [a,b]为指标x的最佳稳定区间 m m m, [ a ∗ , b ∗ ] [a*,b*] [a∗,b∗]为最大容忍区间。
设共有
n
n
n个待评价对象,每个对象都有
n
n
n个指标(属性),则原始数据矩阵构造为∶
X
=
[
x
11
x
12
⋯
x
1
m
x
21
x
22
⋯
x
2
m
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
m
]
{X=\left[
构造加权规范矩阵,属性进行向量规范化,即每一列元素都除以当前列向量的范数(使用余弦距离度量)
z
i
j
=
x
i
j
∑
i
=
1
n
x
i
j
2
{z_{i j}=\frac{x_{i j}}{\sqrt{\sum_{i=1}^{n} x_{i j}^{2}}}}
zij=∑i=1nxij2xij
由此得到归一化处理后的标准化矩阵
Z
Z
Z:
Z
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
{Z=\left[
最优方案
Z
+
Z^+
Z+,由
Z
Z
Z中每列元素的最大值构成:
Z
+
=
(
max
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
max
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
max
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
)
=
(
Z
1
+
,
Z
2
+
,
⋯
,
Z
m
+
)
{
最优方案
Z
−
Z^-
Z−,由
Z
Z
Z中每列元素的最小值构成:
Z
−
=
(
min
{
z
11
,
z
21
,
⋯
,
z
n
1
}
min
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
min
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
)
=
(
Z
1
−
,
Z
2
−
,
⋯
,
Z
m
−
)
D
i
+
=
∑
j
=
1
m
w
j
(
Z
j
+
−
z
i
j
)
2
,
D
i
−
=
∑
j
=
1
m
w
j
(
Z
j
−
−
z
i
j
)
2
D_{i}^{+}=\sqrt{\sum_{j=1}^{m} w_{j}\left(Z_{j}^{+}-z_{i j}\right)^{2}}, \quad D_{i}^{-}=\sqrt{\sum_{j=1}^{m} w_{j}\left(Z_{j}^{-}-z_{i j}\right)^{2}}
Di+=j=1∑mwj(Zj+−zij)2,Di−=j=1∑mwj(Zj−−zij)2
其中
w
j
w_j
wj为第
j
j
j个属性的权重(重要程度)
指标权重建议根据实际确定或使用专家评估方法
C
i
=
D
i
−
D
i
+
+
D
i
−
C_{i}=\frac{D_{i}^{-}}{D_{i}^{+}+D_{i}^{-}}
Ci=Di++Di−Di−
0
≤
C
i
≤
1
,
C
j
→
1
0 \leq C_{i} \leq 1, C_{j} \rightarrow 1
0≤Ci≤1,Cj→1,表明评价对象越优。
案例代码:
%x是需要评价的对象矩阵
x=[
21584 76.7 7.3 1.01 78.3 97.5 2.0
24372 86.3 7.4 0.80 91.1 98.0 2.0
22041 81.8 7.3 0.62 91.1 97.3 3.2
21115 84.5 6.9 0.60 90.2 97.7 2.9
24633 90.3 6.9 0.25 95.5 97.9 3.6];
[n,m]=size(x);
%将3,4,7的低优指标去倒数转化为高优指标并且把所有指标换成接近的大小
x(:,1)=x(:,1)/100;
x(:,3)=(1./x(:,3))*100;
x(:,4)=(1./x(:,4))*100;
x(:,7)=(1./x(:,7))*100;
zh=zeros(1,m);
d1=zeros(1,n);%最小值矩阵
d2=zeros(1,n);%最大值矩阵
c=zeros(1,n);%接近程度
%归一化
for i=1:m
for j=1:n
zh(i)=zh(i)+x(j,i)^2;
end
end
for i=1:m
for j=1:n
x(j,i)=x(j,i)/sqrt(zh(i));
end
end
%计算距离
xx=min(x)
dd=max(x)
for i=1:n
for j=1:m
d1(i)=d1(i)+(x(i,j)-xx(j))^2;
end
d1(i)=sqrt(d1(i));
end
for i=1:n
for j=1:m
d2(i)=d2(i)+(x(i,j)-dd(j))^2;
end
d2(i)=sqrt(d2(i));
end
%计算接近程度
for i=1:n
c(i)=d1(i)/(d2(i)+d1(i));
end