写在前面:
笔记为自行整理,内容出自课程《数学建模学习交流》,主讲人:清风
TOPSIS代码: Python实现.
层次分析法的一些局限
有关层次分析法的内容:AHP
(1) 评价的决策层不能太多,否则判断矩阵和一致矩阵差异会很大。
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
平均随机一致性指标RI的表格中n最多是15
(2) 如果决策层中的指标的数据是已知的,我们需要用其它方法利用这些数据使得评价更加准确。例如下表:学生 | 加权成绩 | 工时数 | 课外竞赛得分 |
---|---|---|---|
张三 | 89.7 | 232 | 5 |
李四 | 86.5 | 20 | 4 |
… | … | … | … |
梁二十 | 82.6 | 12 | 3 |
张三同宿舍共有四名同学,他们第一学期的高数成绩如下表所示:
姓名 | 成绩 |
---|---|
张三 | 89 |
李四 | 60 |
王五 | 74 |
刘六 | 99 |
若要为这四名同学进行评分,使得该评分能合理的描述其高数成绩的高低。
很自然的想法是根据成绩高低来排一个名:
姓名 | 成绩 | 名次 |
---|---|---|
张三 | 89 | 2 |
李四 | 60 | 4 |
王五 | 74 | 3 |
刘六 | 99 | 1 |
但想要正向的反应四者之间的成绩,需要对名词进行修正,使得其越大表示越好,从而:
姓名 | 成绩 | 名次 | 修正后的排名 | 评分 |
---|---|---|---|---|
张三 | 89 | 2 | 3 | 3/10=0.3 |
李四 | 60 | 4 | 1 | 1/10=0.1 |
王五 | 74 | 3 | 2 | 2/10=0.2 |
刘六 | 99 | 1 | 4 | 4/10=0.4 |
但上述想法的不合理之处在于,在保证其相对排名不变的情况下,无论我们如何修改他们的成绩,最后的评分是不变的。
一个好的想法是:
评 分 = x − m i n m a x − m i n 评分=\frac{x-min}{max-min} 评分=max−minx−min
并对其归一化处理:
姓名 | 成绩 | 未归一化的评分 | 归一化的评分 |
---|---|---|---|
张三 | 89 | (89-60)/(99-60)=0.74 | 0.74/2.1=0.35 |
李四 | 60 | 0 | 0 |
王五 | 74 | 0.36 | 0.17 |
刘六 | 99 | 1 | 0.48 |
问题拓展:增加指标个数
姓名 | 成绩 | 与他人争吵次数 |
---|---|---|
张三 | 89 | 2 |
李四 | 60 | 0 |
王五 | 74 | 1 |
刘六 | 99 | 3 |
成绩是越高越好,这样的指标称为极大型指标(效益型指标)
争吵次数越低越好,这样的指标称为极小型指标(成本型指标)
为了得到综合的评分,我们要统一指标类型,将所有的指标转换为极大型指标,及指标正向化。
极小型转换为极大型:
m a x − x max-x max−x
姓名 | 成绩 | 争吵次数正向化 |
---|---|---|
张三 | 89 | 1 |
李四 | 60 | 3 |
王五 | 74 | 2 |
刘六 | 99 | 0 |
指标类型 | 极大型 | 极大型 |
并且,为了消去不同指标量纲的影响,需要对已正向化的数据进行标准化处理。
标准化只需要用该元素除以其同单位的行或列上的所有元素平方后加和再开根号即可。
姓名 | 成绩 | 争吵 |
---|---|---|
张三 | 0.5437 | 0.2673 |
李四 | 0.3665 | 0.8018 |
王五 | 0.4520 | 0.5345 |
刘六 | 0.6048 | 0 |
指标类型 | 极大型 | 极大型 |
假设有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 ] Z=\left[ \begin{matrix} 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{matrix} \right] Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
又因为:
z − min max − min = z − min ( max − z ) + ( z − min ) = z 与最小值的距离 z 与最大值的距离 + z 与最小值的距离 \frac{z-\min}{\max -\min}=\frac{z-\min}{\left( \max -z \right) +\left( z-\min \right)}=\frac{z\text{与最小值的距离}}{z\text{与最大值的距离}+z\text{与最小值的距离}} max−minz−min=(max−z)+(z−min)z−min=z与最大值的距离+z与最小值的距离z与最小值的距离
定义最大值 Z + = ( Z 1 + , Z 2 + , ⋯ , Z m + ) \text{定义最大值}Z^+=\left( Z_1^+,Z_2^+,\cdots ,Z_m^+ \right) 定义最大值Z+=(Z1+,Z2+,⋯,Zm+) = ( 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 } ) =\left( \max \left\{ z_{11},z_{21},\cdots ,z_{n1} \right\} ,\max \left\{ z_{12},z_{22},\cdots ,z_{n2} \right\} ,\cdots ,\max \left\{ z_{1m},z_{2m},\cdots ,z_{nm} \right\} \right) =(max{ z11,z21,⋯,zn1},max{ z12,z22,⋯,zn2},⋯,max{ z1m,z2m,⋯,znm})
定义最小值 Z − = ( Z 1 − , Z 2 − , ⋯ , Z m − ) \text{定义最小值}Z^-=\left( Z_1^-,Z_2^-,\cdots ,Z_m^- \right) 定义最小值Z−=(Z1−,Z2−,⋯,Zm−) = ( 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 } ) =\left( \min \left\{ z_{11},z_{21},\cdots ,z_{n1} \right\} ,\min \left\{ z_{12},z_{22},\cdots ,z_{n2} \right\} ,\cdots ,\min \left\{ z_{1m},z_{2m},\cdots ,z_{nm} \right\} \right) =(min{ z11,z21,⋯,zn1},min{ z12,z22,⋯,zn2},⋯,min{ z1m,z2m,⋯,znm})
定义第 i ( i = 1 , 2 , ⋯ , n ) i\left( i=1,2,\cdots ,n \right) i(i=1,2,⋯,n)个评价对象与最大值的距离 D i + = ∑ j = 1 m ( Z j + − z i j ) 2 D_i^+=\sqrt{\sum_{j=1}^m{\left( Z_j^+-z_{ij} \right) ^2}} Di+=∑j=1m(Zj+−zij)2
定义第 i ( i = 1 , 2 , ⋯ , n ) i\left( i=1,2,\cdots ,n \right) i(i=1,2,⋯,n)个评价对象与最小值的距离 D i − = ∑ j = 1 m ( Z j − − z i j ) 2 D_i^-=\sqrt{\sum_{j=1}^m{\left( Z_j^--z_{ij} \right) ^2}} Di−=∑j=1m(Zj−−zij)2
那么,我们可以计算得出第 i ( i = 1 , 2 , ⋯ , n ) i\left( i=1,2,\cdots ,n \right) 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\le S_i\le 1 0≤Si≤1,且 S i S_i Si越大, D i + D_i^+ Di+越小,即越接近最大值。
姓名 | 成绩 | 争吵 |
---|---|---|
张三 | 0.5437 | 0.2673 |
李四 | 0.3665 | 0.8018 |
王五 | 0.4520 | 0.5345 |
刘六 | 0.6048 | 0 |
从而对于上表来说,
D 张三 + = ( 0.6048 − 0.5437 ) 2 + ( 0.8018 − 0.2673 ) 2 = 0.537981 D_{\text{张三}}^+=\sqrt{\left( 0.6048-0.5437 \right) ^2+\left( 0.8018-0.2673 \right) ^2}=0.537981 D张三+=(0.6048−0.5437)2+(0.8018−0.2673)2=0.537981
D 张三 − = ( 0.3665 − 0.5437 ) 2 + ( 0 − 0.2673 ) 2 = 0.320701 D_{\text{张三}}^-=\sqrt{\left( 0.3665-0.5437 \right) ^2+\left( 0-0.2673 \right) ^2}=0.320701 D张三−=(0.3665−0.5437)2+(0−0.2673)2=0.320701
D 李四 + = ( 0.6048 − 0.3665 ) 2 + ( 0.8018 − 0.8018 ) 2 = 0.2383 D_{\text{李四}}^+=\sqrt{\left( 0.6048-0.3665 \right) ^2+\left( 0.8018-0.8018 \right) ^2}=0.2383 D李四+=(0.6048−0.3665)2+(0.8018−0.8018)2=0.2383
D 李四 + = ( 0.3665 − 0.3665 ) 2 + ( 0 − 0.8018 ) 2 = 0.8018 D_{\text{李四}}^+=\sqrt{\left( 0.3665-0.3665 \right) ^2+\left( 0-0.8018 \right) ^2}=0.8018 D李四+=(0.3665−0.3665)2+(0−0.8018)2=0.8018
最终可得到:
S 张三 = D 张三 − D 张三 + + D 张三 − S_{\text{张三}}=\frac{D_{\text{张三}}^-}{D_{\text{张三}}^++D_{\text{张三}}^-} S张三=D张三++D张三−D张三−
同理得到李四、王五和刘六的评分S。
姓名 | D + D^+ D+ | D − D^- D− | 未归一化的得分 | 归一化的得分 | 排名 |
---|---|---|---|---|---|
张三 | 0.5380 | 0.3206 | 0.3734 | 0.1857 | 3 |
李四 | 0.2382 | 0.8018 | 0.7709 | 0.3834 | 1 |
王五 | 0.3078 | 0.5413 | 0.6375 | 0.3170 | 2 |
刘六 | 0.8018 | 0.2382 | 0.2291 | 0.1139 | 4 |
TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。TOPSIS法是一种逼近于理想解的排序法,该方法只要求各效用函数具有单调递增(或递减)性就行。TOPSIS法是多目标决策分析中一种常用的有效方法,又称为优劣解距离法。
其基本原理,是通过检测评价对象与最优解、最劣解的距离来进行排序,若评价对象最靠近最优解同时又最远离最劣解,则为最好;否则不为最优。其中最优解的各指标值都达到各评价指标的最优值。最劣解的各指标值都达到各评价指标的最差值。
TOPSIS法其中“理想解”和“负理想解”是TOPSIS法的两个基本概念。所谓理想解是一设想的最优的解(方案),它的各个属性值都达到各备选方案中的最好的值;而负理想解是一设想的最劣的解(方案),它的各个属性值都达到各备选方案中的最坏的值。方案排序的规则是把各备选方案与理想解和负理想解做比较,若其中有一个方案最接近理想解,而同时又远离负理想解,则该方案是备选方案中最好的方案。——百度百科.
第一步:将原始矩阵正向化,即,将所有的指标类型统一转换为极大型指标
常见的四种指标:
指标名称 | 指标特点 | 举例 |
---|---|---|
极大型指标 | 越大越好 | 成绩、企业利润 |
极小型指标 | 越小越好 | 不合格率、污染程度 |
中间型指标 | 越接近某个值越好 | 评估水质量的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物量 |
极小型–>极大型:
公式: m a x − x max-x max−x
如果所有元素均为整数,也可以使用 1 / x 1/x 1/x
中间型–>极大型:
设 { x i } \left\{ x_i \right\} { xi}是一组中间型指标序列,且最佳的数值为 x b e s t x_{best} xbest,令 M = m a x { ∣ x i − x b e s t ∣ } M=max\left\{ |x_i-x_{best}| \right\} M=max{ ∣xi−xbest∣},那么正向化的公式如下:
x ~ i = 1 − ∣ x i − x b e s t ∣ M \tilde{x}_i=1-\frac{|x_i-x_{best}|}{M} x~i=1−M∣xi−xbest∣
区间型–>极大型:
设 { x i } \left\{ x_i \right\} { xi}是一组区间型指标序列,且最好的区间为 [ a , b ] [a,b] [a,b],令 M = max { a − min { x i } , max { x i } − b } M=\max \left\{ a-\min \left\{ x_i \right\} ,\max \left\{ x_i \right\} -b \right\} M=max{ a−min{ xi},max{ xi}−b}
那么正向化的公式如下:
x ~ i = { 1 − a − x M , x < a 1 , a ≤ x ≤ b 1 − x − b M , x > b \tilde{x}_i=\left\{ \begin{array}{l} 1-\frac{a-x}{M}\ ,xb\\ \end{array} \right. x~i=⎩⎨⎧1−Ma−x ,x<a1 ,a≤x≤b1−Mx−b ,x>b
第二步:对正向化后的矩阵进行标准化
第三步:计算得分并归一化
更新
在上述的模型中,最后计算综合得分的时候是默认两个指标(成绩,争吵次数)的权重是相等的,但实际上这样做并不准确,因而我们引入了熵权法来进行客观赋权。
原理: 指标的变异程度(可以理解为方差)越小,所反映的信息量也越少,其对应的权值也应该越低。因而客观是指数据本身就可以告诉我们权重。
(一个极端的例子:对于某个指标,所有的样本观测值都相同,则可以认为这个指标的权值为 0 0 0,即这个指标对评价没有任何帮助)。
那么要如何度量信息量的大小?
举一个简单的例子:张三和李四是一对表兄弟,张三家里很有钱,但李四家庭条件很差,某天张三和李四都购买了一辆价值500w的车子,张三家庭富裕,大家觉得他购买并不为奇。然而李四则不一样,他家庭条件那么差,怎么会买得起500w的车?这带来的信息量就很大。
这个例子告诉我们:越有可能发生的事情,信息量越少;越不可能发生的事情,信息量就越多。
假设 x x x表示事件 X X X可能发生的某种情况, p ( x ) p(x) p(x)表示这种情况发生的概率:
可以定义: I ( x ) = − l n ( p ( x ) ) I(x)=-ln(p(x)) I(x)=−ln(p(x)),因为 0 ≤ p ( x ) ≤ 1 0\le p(x)\le 1 0≤p(x)≤1,所以 I ( x ) ≥ 0 I(x)\ge 0 I(x)≥0,并且 I ( x ) I(x) I(x)在 ( 0 , 1 ) (0,1) (0,1)上单调递减。
如果事件 X X X可能发生的情况分别为 x 1 , x 2 , . . . x n x_1,x_2,...x_n x1,x2,...xn,那么可以定义事件 X X X的信息熵为:
H ( x ) = ∑ i = 1 n [ p ( x i ) I ( x i ) ] = − ∑ i = 1 n [ p ( x i ) ln ( p ( x i ) ) ] H\left( x \right) =\sum_{i=1}^n{\left[ p\left( x_i \right) I\left( x_i \right) \right]}=-\sum_{i=1}^n{\left[ p\left( x_i \right) \ln \left( p\left( x_i \right) \right) \right]} H(x)=i=1∑n[p(xi)I(xi)]=−i=1∑n[p(xi)ln(p(xi))]
可以看出,信息熵的本质就是信息量的期望值。
可以证明:
当 p ( x 1 ) = p ( x 2 ) = ⋯ = p ( x n ) = 1 n , H ( x ) 取最大值,此时 H ( x ) = ln n \text{当}p\left( x_1 \right) =p\left( x_2 \right) =\cdots =p\left( x_n \right) =\frac{1}{n}\text{,}H\left( x \right) \text{取最大值,此时}H\left( x \right) =\ln n 当p(x1)=p(x2)=⋯=p(xn)=n1,H(x)取最大值,此时H(x)=lnn
假设有 n n n个要评价的对象, m m 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}& \cdots& x_{1m}\\ x_{21}& x_{22}& \cdots& x_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ x_{n1}& x_{n2}& \cdots& x_{nm}\\ \end{matrix} \right] X=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
判断 X X X中是否存在负数,如果有,则需要对 X X X使用另一种标准化。
记标准化后的矩阵为 Z Z Z,标准化公式为:
z i j = x i j − min { x 1 j , x 2 j , ⋯ , x n j } max { x 1 j , x 2 j , ⋯ x n j } − min { x 1 j , x 2 j , ⋯ , x n j } z_{ij}=\frac{x_{ij}-\min \left\{ x_{1j},x_{2j},\cdots ,x_{nj} \right\}}{\max \left\{ x_{1j},x_{2j},\cdots x_{nj} \right\} -\min \left\{ x_{1j},x_{2j},\cdots ,x_{nj} \right\}} zij=max{ x1j,x2j,⋯xnj}−min{ x1j,x2j,⋯,xnj}xij−min{ x1j,x2j,⋯,xnj}
对于第 j j j个指标而言,其信息熵的计算公式为:
e j = − 1 ln n ∑ i = 1 n p i j ln ( p i j ) ( j = 1 , 2 , ⋯ , m ) e_j=-\frac{1}{\ln n}\sum_{i=1}^n{p_{ij}\ln \left( p_{ij} \right)}\left( j=1,2,\cdots ,m \right) ej=−lnn1∑i=1npijln(pij)(j=1,2,⋯,m)
在前面提到过, l n n lnn lnn是 H ( x ) H(x) H(x)取的最大值,所以可以保证信息熵 e j e_j ej始终位于 [ 0 , 1 ] [0,1] [0,1]上面。
由于信息熵越大所代表的含义为信息越少,所以这里定义信息效用值: 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}\left( j=1,2,\cdots ,m \right) Wj=dj/∑j=1mdj(j=1,2,⋯,m)
因此可以更改前面对"距离"的定义,在距离的基础上乘以该指标对应的权值。
定义第 i ( i = 1 , 2 , ⋯ , n ) i\left( i=1,2,\cdots ,n \right) i(i=1,2,⋯,n)个评价对象与最大值的距离 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_{ij} \right) ^2}} Di+=∑j=1mwj(Zj+−zij)2
定义第 i ( i = 1 , 2 , ⋯ , n ) i\left( i=1,2,\cdots ,n \right) i(i=1,2,⋯,n)个评价对象与最小值的距离 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_{ij} \right) ^2}} Di−=∑j=1mwj(Zj−−zij)2