一.算法介绍
TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。TOPSIS法是一种逼近于理想解的排序法,该方法只要求各效用函数具有单调递增(或递减)性就行。TOPSIS法是多目标决策分析中一种常用的有效方法,又称为优劣解距离法。——来自百度百科
二.基本原理
在评价类题目中我们经常能遇到有多种评价指标并且评价指标的数据已知的情况,那么我们就可以采用TOPSIS算法来完成这一类题目。TOPSIS算法通过检测评价对象与最优解、最劣解的距离来进行排序。评价对象离最优解越近、离最劣解越远越好。
三.步骤
1.将原始矩阵正向化
①概述:
我们在题目中遇到的指标并非都是越大越好的,所以我们可以做一些处理,让这些指标变为极大型指标(越大越好),这就是正向化。
②指标分类:
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型指标 | 越大越好 | 成绩、利润、GDP增速 |
极小型指标 | 越小越好 | 费用、污染程度、不合格率 |
中间型指标 | 越接近某个值越好 | 水质量评估时的PH值 |
区间型指标 | 落在某个区间最好 | 体温、体内微量元素含量 |
③转化方法:
极小型转化为极大型:
X i ˇ = max { X i } − X i \check{X_{i}}=\max\lbrace X_{i}\rbrace-X_{i} Xiˇ=max{Xi}−Xi
中间型转化为极大型:
{ X i X_{i} Xi}是一组中间型指标序列,且最佳的数值是 X b e s t X_{best} Xbest,那么正向化的公式如下:
.
M = max { ∣ X i − X b e s t ∣ } M=\max\lbrace\left| X_{i} -X_{best}\right|\rbrace M=max{∣Xi−Xbest∣}
.
X i ˇ = 1 − ∣ X i − X b e s t ∣ M \check{X_{i}}=1-\frac {\left| X_{i} -X_{best}\right|}{M}\quad Xiˇ=1−M∣Xi−Xbest∣(转换后的值)
中间型转化为极大型的应用举例:
区间型转化为极大型:
指标值落在某个区间内最好,例如人的体温在36~37区间内最好。
{ X i X_{i} Xi}是一组中间型指标序列,且最佳的区间为[a , b],那么正向化的公式如下:
.
M = max { a − min { X i } , max { X i } − b } M=\max \lbrace a-\min \lbrace X_{i} \rbrace , \max \lbrace X_{i} \rbrace-b\rbrace M=max{a−min{Xi},max{Xi}−b}
.
X i ˇ = { 1 − a − X i M , x < a 1 , a ≤ x ≤ b 1 − X i − b M , x > b \check{X_{i}}=\begin{cases} 1-\frac {a- X_{i} }{M}\quad, x < a \\ \\ 1, a\leq x \leq b \\\\ 1-\frac { X_{i} -b}{M}\quad, x > b \\ \end{cases} Xiˇ=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧1−Ma−Xi,x<a1,a≤x≤b1−MXi−b,x>b
区间型转化为极大型的应用举例:
2.将正向化后的矩阵标准化
①概述:
由于挑选出的各个指标有可能不是同一类的,俩个数据无法直接比较(比如身高和智商无法直接比较,重量和价格也是不同类的无法直接比较),所以我们要将上面正向化后的数据矩阵进行标准化处理。
X i j X_{ij} Xij是正向化后的矩阵中第 i 行第 j 列的元素。 Z i j Z_{ij} Zij是标准化矩阵第 i 行第 j 列的元素。
.
Z i j = X i j / ∑ i = 1 n X i j 2 Z_{ij}=X_{ij} / \sqrt{\sum_{i=1}^n \ X_{ij}^2 \quad} \quad Zij=Xij/∑i=1n Xij2
例如:
3.计算得分
① 假设有n个要评价的对象,m个评价指标,我们可以由第2步得到一个n×m的标准化矩阵Z
( Z 11 Z 12 ⋯ Z 1 m Z 21 Z 22 ⋯ Z 2 m ⋮ ⋮ ⋱ ⋮ Z n 1 Z n 2 ⋯ Z n m ) \begin{pmatrix} Z_{11} & Z_{12} & \cdots & Z_{1m} \\ Z_{21} & Z_{22} & \cdots & Z_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ Z_{n1}& Z_{n2} & \cdots & Z_{nm} \\ \end{pmatrix} ⎝⎜⎜⎜⎛Z11Z21⋮Zn1Z12Z22⋮Zn2⋯⋯⋱⋯Z1mZ2m⋮Znm⎠⎟⎟⎟⎞
.
②则这个标准化矩阵第 j 列的最大(小)值为 :
Z j + = m a x { Z 1 j , Z 2 j , Z 3 j , . . . . . . , Z n j } Z_{j}^{+}=max \lbrace Z_{1j}, Z_{2j} , Z_{3j},......, Z_{nj}\rbrace Zj+=max{Z1j,Z2j,Z3j,......,Znj}(最大)Z j − = m i n { Z 1 j , Z 2 j , Z 3 j , . . . . . . , Z n j } Z_{j}^{-}=min \lbrace Z_{1j}, Z_{2j} , Z_{3j},......, Z_{nj}\rbrace Zj−=min{Z1j,Z2j,Z3j,......,Znj}(最小)
.
③由此可得第 i (i=1,2,3……n)个评价对象与最大(小)值的距离为:D i + = ∑ j = 1 m ( Z j + − Z i j ) 2 D_{i}^{+}=\sqrt{\sum_{j=1}^m \ (Z_{j}^{+}-Z_{ij})^2 \quad} \quad Di+=∑j=1m (Zj+−Zij)2(最大)
D i − = ∑ j = 1 m ( Z j − − Z i j ) 2 D_{i}^{-}=\sqrt{\sum_{j=1}^m \ (Z_{j}^{-}-Z_{ij})^2 \quad} \quad Di−=∑j=1m (Zj−−Zij)2(最小)
.
④可计算出第 i (i=1,2,3……n)个评价对象未归一化的得分:S i = D i − D i + + D i − S_{i}=\frac{D_{i}^{-}}{D_{i}^{+}+D_{i}^{-}} \quad Si=Di++Di−Di−
.
明显0<= S i S_{i} Si<=1 , 且 S i S_{i} Si越大 D i + D_{i}^{+} Di+越小,即越接近最大值。
(做完这步之后最好要进行归一化处理)
四.优化与完善
我们上面所进行的TOPSIS算法默认各指标的权值相同,但实际情况往往不同,所以我们可以对TOPSIS算法做一些优化。
抛出一个问题:如何各指标确定权重?
用层次分析法?可以,但是主观性太强,建模的时候指标数据大概率会自己瞎填,不太可取。
所以在这里我们引入一个更客观的算法:“熵权法”。
1.原理及概述
熵权法是一种客观赋权方法,通过数据本身就可以知道每个指标的权重。熵权法依据的原理是:指标的变异程度(可以理解为方差或者标准差)越小,所反映的信息量也越少,其对应的权值也应该越低。 (一种极端的例子:对于所有的样本而言,这个指标都是相同的数值,那么我们可以认为这个指标的权值为0,即这个指标对于我们的评价起不到任何帮助)。
对于熵权法而言,因为我们关注的是已有信息,所以熵越大,信息量越少。
2.计算步骤
①:判断我们输入的矩阵中是否存在负数,如果存在,则要重新标准化到非负区间。保证后面计算概率时所用到的每一个元素都是非负的。
① 假设有n个要评价的对象,m个评价指标,构成的正向化矩阵如下:
( X 11 X 12 ⋯ X 1 m X 21 X 22 ⋯ X 2 m ⋮ ⋮ ⋱ ⋮ X n 1 X n 2 ⋯ X n m ) \begin{pmatrix} X_{11} & X_{12} & \cdots & X_{1m} \\ X_{21} & X_{22} & \cdots & X_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ X_{n1}& X_{n2} & \cdots & X_{nm} \\ \end{pmatrix} ⎝⎜⎜⎜⎛X11X21⋮Xn1X12X22⋮Xn2⋯⋯⋱⋯X1mX2m⋮Xnm⎠⎟⎟⎟⎞
.
那么对其标准化的矩阵记为Z,其中的每一个元素: Z i j = X i j / ∑ i = 1 n X i j 2 Z_{ij}=X_{ij} / \sqrt{\sum_{i=1}^n \ X_{ij}^2 \quad} \quad Zij=Xij/∑i=1n Xij2
.
判断Z矩阵中是否存在着负数,如果存在的话,需要对X使用另一种标准化方法,对矩阵X进行一次标准化得到 Z ˇ \check{Z_{}} Zˇ矩阵,其标准化公式为:
.
Z i j = X i j − m i n { X 1 j , X 2 j , X 3 j , . . . . . . , X n j } m a x { X 1 j , X 2 j , X 3 j , . . . . . . , X n j } − m i n { X 1 j , X 2 j , X 3 j , . . . . . . , X n j } Z_{ij}=\frac {X_{ij}-min \lbrace X_{1j}, X_{2j} , X_{3j},......,X_{nj}\rbrace}{max \lbrace X_{1j}, X_{2j} , X_{3j},......,X_{nj}\rbrace-min \lbrace X_{1j}, X_{2j} , X_{3j},......,X_{nj}\rbrace} Zij=max{X1j,X2j,X3j,......,Xnj}−min{X1j,X2j,X3j,......,Xnj}Xij−min{X1j,X2j,X3j,......,Xnj}
②计算第 j 项指标下第 i 个样本所占的比重,并将其看作相对熵计算中用到的概率:
假设有 n 个要评价的对象,m个评价的指标,且经过了上一步处理得到的非负矩阵为:
.
Z ˇ = ( Z ˇ 11 Z ˇ 12 ⋯ Z ˇ 1 m Z ˇ 21 Z ˇ 22 ⋯ Z ˇ 2 m ⋮ ⋮ ⋱ ⋮ Z ˇ n 1 Z ˇ n 2 ⋯ Z ˇ n m ) \check Z= \begin{pmatrix} \check Z_{11} & \check Z_{12} & \cdots & \check Z_{1m} \\ \check Z_{21} & \check Z_{22} & \cdots & \check Z_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ \check Z_{n1}& \check Z_{n2} & \cdots & \check Z_{nm} \\ \end{pmatrix} Zˇ=⎝⎜⎜⎜⎛Zˇ11Zˇ21⋮Zˇn1Zˇ12Zˇ22⋮Zˇn2⋯⋯⋱⋯Zˇ1mZˇ2m⋮Zˇnm⎠⎟⎟⎟⎞
.
我们计算概率矩阵P,其中P中每一个元素 P i j P_{ij} Pij的计算公式如下:
P i j = Z ˇ i j ∑ i = 1 n Z ˇ i j P_{ij}= \frac { \check Z_{ij}}{\sum_{i=1}^n \ \check Z_{ij} \quad} Pij=∑i=1n ZˇijZˇij
.
容易验证: ∑ i = 1 n P i j = 1 \sum_{i=1}^n \ P_{ij} \quad=1 ∑i=1n Pij=1,即保证了每一个指标所对应的概率和为1。
②计算每个指标的信息熵,并计算信息效用值,并归一化得到每个指标的熵权。
对于第 j 个指标而言,其信息熵的计算公式为:
e i = − 1 l n n ∑ i = 1 n P i j l n ( P i j ) ( j = 1 , 2 , . . . , m ) e_{i}=- \frac {1}{ln n}\sum_{i=1}^n \ P_{ij}ln(P_{ij}) \quad (j=1,2,...,m) ei=−lnn1∑i=1n Pijln(Pij)(j=1,2,...,m)
.
( e j e_{j} ej越大,即第 j 个指标的信息熵越大,表明第 j 个指标的信息越少)
定义信息效用值: d j = 1 − e j d_{j}=1-e_{j} dj=1−ej (信息效用值越大对应的信息就越多)
将信息效用值归一化就可以得到每个指标的熵权: W j = d j / ∑ j = 1 m d j ( j = 1 , 2 , . . . , m ) W_{j}=d_{j} / \sum_{j=1}^m \ d_{j} \quad (j=1,2,...,m) Wj=dj/∑j=1m dj(j=1,2,...,m)