优劣解距离法(TOPSIS法)的原理简析_实例应用_代码
首先先要明确一些概念
- 指标的类型
指标名称 | 指标特点 |
---|---|
极大型指标 | 越大越好 |
极小型指标 | 越小越好 |
中间性指标 | 越接近某个值越好 |
区间型指标 | 落在某个区间最好 |
比如说:
极大型指标:成绩、GDP增速、企业利润等
极小型指标:费用、坏品率、污染程度
中间性指标:水质量评估时的PH
区间型指标:体温
在利用TOPSIS方法进行计算时一般要将所有指标正向化,即将所有类型的指标都化为极大型指标
2. 归一化处理
归一化处理可以将有量纲的表达式转化为无量纲的表达式,一般的公式为 z i , j = a i , j ∑ i = 1 n a i , j z_{i,j}=\frac{a_{i,j}}{\sum_{i=1}^na_{i,j}} zi,j=∑i=1nai,jai,j,即将每个元素除以该列元素之和,使得新得到的矩阵满足列和为一
比如下面的矩阵,归一化后化为
( 1 3 5 2 2 4 2 5 1 ) → ( 0.2 0.3 0.5 0.4 0.2 0.4 0.4 0.5 0.1 ) \begin{pmatrix} 1&3&5\\2&2&4\\2&5&1 \end{pmatrix}\rightarrow \begin{pmatrix}0.2&0.3&0.5\\ 0.4&0.2&0.4\\ 0.4&0.5&0.1 \\\end{pmatrix} ⎝⎛122325541⎠⎞→⎝⎛0.20.40.40.30.20.50.50.40.1⎠⎞
3.标准化处理
标准化处理与归一化处理作用类似,都是为了消除量纲的影响。标准化的方法有很多,在这里我们选择其中较为简单的一种
z i , j = x i , j ∑ i = 1 n x i , j z_{i,j}=\frac{x_{i,j}}{\sqrt{\sum_{i=1}^nx_{i,j}}} zi,j=∑i=1nxi,jxi,j,即用当前元素除以根下每列元素的平方和
比如下面的矩阵,标准化完后为
( 2 3 4 3 2 4 3 3 0 ) → ( 0.5 0.43 0.5 0.75 0.5 0.5 0.43 0.75 0 ) \begin{pmatrix} 2&\sqrt{3}&4\\3&2&4\\\sqrt{3}&3&0 \end{pmatrix}\rightarrow \begin{pmatrix}0.5&0.43&0.5\\ 0.75&0.5&0.5\\ 0.43&0.75&0 \\\end{pmatrix} ⎝⎛233323440⎠⎞→⎝⎛0.50.750.430.430.50.750.50.50⎠⎞
TOPSIS算法步骤
第一步:将原始矩阵正向化
转化的函数形式可以不唯一
-
极小转化为极大
m a x − x max-x max−x,如果元素全为正数,也可以使用 1 x \frac{1}{x} x1 -
中间型转化为极大
假设 { x i } \{x_i\} { xi}一组中间型指标序列, x b e s t x_{best} xbest为最佳数值,那么正向化公式为
x i ′ = 1 − ∣ x i − x b e s t ∣ M , 其 中 M = m a x { ∣ x i − x b e s t ∣ } x_i'=1-\frac{\vert{x_i-x_{best}}\vert}{M},其中M=max\{\vert x_i-x_{best}\vert\} xi′=1−M∣xi−xbest∣,其中M=max{ ∣xi−xbest∣}
如下例
其中 x b e s t = 7 x_{best}=7 xbest=7, M = m a x { ∣ 6 − 7 ∣ , ∣ 7 − 7 ∣ , ∣ 8 − 7 ∣ , ∣ 9 − 7 ∣ } = 2 M=max\{|6-7|,|7-7|,|8-7|,|9-7|\}=2 M=max{ ∣6−7∣,∣7−7∣,∣8−7∣,∣9−7∣}=2 -
区间型转化为极大
假设最佳区间为 [ a , b ] [a,b] [a,b],则正向化的公式如下
x i ′ = { 1 − a − x i M x i < a 1 a ≤ x i ≤ S M 1 − x i − b M x i > b x_i'=\left\{ \begin{array}{rcl} 1-\frac{a-x_i}{M} & & {x_i<a}\\ 1 & & {a\le x_i \le S_M}\\ 1-\frac{x_i-b}{M}& & {x_i>b}\\ \end{array} \right. xi′=