Topsis 优劣解距离法
用于有具体数据评价
初步评价思路
利用已有数据,找到数据中的最大值和最小值,构造计算评分公式
x
−
m
i
n
m
a
x
−
m
i
n
\frac{x-min}{max-min}
max−minx−min
但是也存在一些不完善的地方:
- 比较的对象一般要远大于两个。(例如比较一个班级的成绩)
- 比较的指标也往往不只是一个方面的,例如成绩、工时数、课外竞赛得分等。
- 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速。
TOPSIS的介绍
C.L.Hwang K.Yoon 于1981年首次提出TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution),可翻译为逼近理想解排序法,国内常简称为优劣解距离法。
TOPSIS法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
基本过程为先将原始数据矩阵统一指标类型(一般正向化处理),得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
Topsis步骤
1.原始矩阵正向化
评价指标类型
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型(效益型)指标 | 越大(多)越好 | 成绩、GDP增速、企业利润 |
极小型(成本型)指标 | 越小(少)越好 | 费用、坏品率、污染程度 |
中间型指标 | 越接近某个值越好 | 水质量评估时的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物量 |
在评价前,需要将所有的指标转化为极大型——也叫指标正向化(转化的函数形式可以不唯一)
转化的方法
极小型指标->极大型指标
极小型指标转换为极大型指标的公式: m a x − x max-x max−x,如果所有的元素均为正数,那么也可以使用 1 x \frac{1}{x} x1
中间型指标->极大型指标
中间型指标:指标值既不要太大也不要太小,取某特定值最好(如水质量评估PH值) { x i } \{x_i\} {xi}是一组中间型指标序列,且最佳的数值为 x b e s t x_{best} xbest,那么正向化的公式如下:
M = m a x { ∣ x i − x b e s t ∣ } , x i ~ = 1 − ∣ x i − x b e s t ∣ M M=max\{|x_i-x_{best}|\},\tilde{x_i}=1-\frac{|x_i-x_{best}|}{M} M=max{∣xi−xbest∣},xi~=1−M∣xi−xbest∣
区间型指标->极大型指标
区间型指标:指标值落在某个区间内最好,例如人的体温在36°~37°这个区间比较好。
{
x
i
}
\{x_i\}
{xi}是一组区间型指标序列,且最佳的区间为
[
a
,
b
]
[a,b]
[a,b],那么正向化的公式如下:
M = max { a − min { x i } , max { x i } − b } , x ~ i = { 1 − a − x i M , x i < a 1 , a ≤ x i ≤ b 1 − x i − b M , x i > b M=\max \left\{a-\min \left\{x_{i}\right\}, \max \left\{x_{i}\right\}-b\right\}, \tilde{x}_{i}= \begin{cases}1-\frac{a-x_{i}}{M} & , x_{i}<a \\ 1 & , a \leq x_{i} \leq b \\ 1-\frac{x_{i}-b}{M}, & x_{i}>b\end{cases} M=max{a−min{xi},max{xi}−b},x~i=⎩ ⎨ ⎧1−Ma−xi11−Mxi−b,,xi<a,a≤xi≤bxi>b
2.正向化矩阵标准化
标准化的目的是消除不同指标量纲的影响
假设有n个要评价的对象,m个评价指标(已经正向化了)构成的正向化评价矩阵如下:
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[ \begin{matrix} x_{11}& x_{12}& \begin{matrix} \cdots& x_{1m}\\ \end{matrix}\\ x_{21}& x_{22}& \begin{matrix} \cdots& x_{2m}\\ \end{matrix}\\ \begin{array}{c} \vdots\\ x_{n1}\\ \end{array}& \begin{array}{c} \vdots\\ x_{n2}\\ \end{array}& \begin{array}{c} \begin{matrix} \ddots& \vdots\\ \end{matrix}\\ \begin{matrix} \cdots& x_{nm}\\ \end{matrix}\\ \end{array}\\ \end{matrix} \right]
X=⎣
⎡x11x21⋮xn1x12x22⋮xn2⋯x1m⋯x2m⋱⋮⋯xnm⎦
⎤
那么,对其标准化的矩阵记为Z,Z中的每一个元素:
z
v
=
x
v
/
∑
i
=
1
n
x
v
2
z_v=x_v/\sqrt{\sum_{i=1}^{n}{x_v}^2}
zv=xv/∑i=1nxv2 即:
每一个元素
/
其所在列的元素的平方和
每一个元素/\sqrt{其所在列的元素的平方和}
每一个元素/其所在列的元素的平方和
标准化的方法不唯一,这个只是最常用的方法
3.计算得分并归一化
如何计算得分
只要一个指标时,构造计算评分的公式: z = x − m i n m a x − m i n z=\frac{x-min}{max-min} z=max−minx−min
变形为: z = x − m i n m a x − m i n = x − m i n ( m a x − x ) + ( x − m i n ) z=\frac{x-min}{max-min}=\frac{x-min}{(max-x)+(x-min)} z=max−minx−min=(max−x)+(x−min)x−min
可看作: z = x 与最小值得距离 x 与最大值的距离 + x 与最小值的距离 z=\frac{x与最小值得距离}{x与最大值的距离+x与最小值的距离} z=x与最大值的距离+x与最小值的距离x与最小值得距离
如何归一化
定义最大值
Z
+
Z^+
Z+=(
Z
1
+
,
Z
2
+
,
Z
3
+
,
⋅
⋅
⋅
,
Z
m
+
{Z_1}^+,{Z_2}^+,{Z_3}^+,···,{Z_m}^+
Z1+,Z2+,Z3+,⋅⋅⋅,Zm+)
=(
m
a
x
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
m
a
x
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
m
a
x
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
max\{z_{11},z_{21},\cdots,z_{n1}\},max\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,max\{z_{1m},z_{2m},\cdots,z_{nm}\}
max{z11,z21,⋯,zn1},max{z12,z22,⋯,zn2},⋯,max{z1m,z2m,⋯,znm})
定义最小值
Z
−
Z^-
Z−=(
Z
1
−
,
Z
2
−
,
Z
3
−
,
⋅
⋅
⋅
,
Z
m
−
{Z_1}^-,{Z_2}^-,{Z_3}^-,···,{Z_m}^-
Z1−,Z2−,Z3−,⋅⋅⋅,Zm−)
=(
m
i
n
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
m
i
n
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
m
i
n
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
min\{z_{11},z_{21},\cdots,z_{n1}\},min\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,min\{z_{1m},z_{2m},\cdots,z_{nm}\}
min{z11,z21,⋯,zn1},min{z12,z22,⋯,zn2},⋯,min{z1m,z2m,⋯,znm})
定义第i(i=1,2,…,n)个评价对象与最大值的距离 D i + = ∑ j = 1 m ( Z j + − z i j ) 2 {D_i}^+=\sqrt{\sum_{j=1}^{m}{({Z_j}^+-z_{ij})^2}} Di+=∑j=1m(Zj+−zij)2
定义第i(i=1,2,…,n)个评价对象与最小值的距离 D i − = ∑ j = 1 m ( Z j − − z i j ) 2 {D_i}^-=\sqrt{\sum_{j=1}^{m}{({Z_j}^{-}-z_{ij})^2}} Di−=∑j=1m(Zj−−zij)2
那么,我们可以计算得出第i(i=1,2,…,n)个评价对象未归一化的得分:
S
i
=
D
i
−
D
i
+
+
D
i
−
S_i=\frac{{D_i}^-}{{D_i}^++{D_i}^-}
Si=Di++Di−Di−
很明显
0
<
S
i
<
1
0<S_i<1
0<Si<1,
且
S
i
越大
D
i
+
越小
且S_i越大{D_i}^+越小
且Si越大Di+越小,即越接近最大值。
我们可以将得分归一化: S i ~ = S i / ∑ i = 1 n S i \tilde{S_i}=S_i/\sum_{i=1}^n{S_i} Si~=Si/∑i=1nSi, 这样的话 ∑ i = 1 n S i ~ = 1 \sum_{i=1}^n\tilde{S_i}=1 ∑i=1nSi~=1
PS:清风老师的数模课程和其他课程比起来,质量很高,并且听起来也很有趣,让人容易接受这些知识,愿意去学习枯燥的数学模型。如果在准备数模比赛的话,强烈推荐入手!以上为个人亲身实际感受,仅供参考。