很多文章或者教程一开始就提到判别矩阵是“正互反矩阵”以及一堆特性,这样白白增加了畏惧感,增大了理解的阻力。那么,正确的做法是:从层次分析法的判别矩阵的生成过程来理解,先忽视“互反”这些令人畏惧的字眼。下面讲解一下这个算法是什么原理,也想说明一下,可以完全忽视矩阵和线性代数的一些知识,本来就没有太大关系。 我在这篇文章讲解了判别矩阵的生成方法:《JupyterNotebook做层次分析法(AHP)权重计算》。可作为参考。 我一直把层次分析法说成是用定性的方法生成定量的结果,比如,面对一堆蔬果,手边却没有称,想量化确定每种蔬果对总重量的贡献要靠估计。比如,有西瓜、黄瓜、萝卜、冬瓜、南瓜,那么可以用两只手掂量掂量,得到每两者的重量的比例,感觉像是定性的分析。 不去纠结定性还是定量,但是,有一点要特别注意:掂量出来的是一个比值,假设左手拿的西瓜作为基准,那么右手掂量出来黄瓜的值是1/5,这个值是要写到判别矩阵中的,所以,矩阵中的值是个比值,一般被称为层次分析法的标度(参看百度百科的词条 层次分析法 )。 我们给上面举例的那些蔬果的重量编个编号,就是:w1, w2, w3, w4, w5,这是我们要算出来的结果,他们代表对总重量的贡献。 而我们掂量出来的是比值,那么可以看到:如果w2代表黄瓜的贡献,我们要求出来w2,而已经知道了黄瓜与其他的比值,那么有下面的等式成立: a21表示以1(西瓜)为基准掂量出来2(黄瓜)的层次分析法标度,也就是2的贡献是1的多少倍。那么再乘以1的贡献w1,就是2的贡献w2。所以,上面每一项的结果都是w2,那么,这个等式就是这样了 我们对这5种蔬果都写成(1)式的形式,并放在一起,就是这样 那么把系数写成矩阵形式,就是判别矩阵A 其中,a11, a22, a33, a44, a55是自己跟自己比,所以,肯定是1。那么,aij表示以第j个要素为基准得到的第i个要素的相对重要度。也就是说,看A矩阵的每一列,都是以某个要素作为基准,其他要素跟这个要素相比得到的相对重要度。 那么写成矩阵和向量相乘形式,就是 根据(2)式我们知道,Y的每个分量都等于w的对应分量乘以一个常数,我们用lambda表示这个常数,那么上式变成: 很显然,上式跟求矩阵的特征值和特征向量的等式一模一样。 这就是为什么要为判别矩阵求特征值和特征向量。就是因为样子一模一样而已,可以把算法借用过来,其实,跟线性代数将的线性变换几乎看不到任何关系。 当然,这是极其完美的理想情况,手掂量的太准了,体现在多个方面: (1)第一列、第二列、第二列……,虽然矩阵中的值不同,其实只是总体差了一个倍数,比如,把第二列乘以w2并除以w1,就等于第一列。那么整个矩阵中只有第一列才提供了有效信息,其他都是多余的列。这就是所谓的矩阵秩为1. (2)手掂量出来的相对重要度是无限精度的实数,所以,对角线两边对称的数字乘在一起得1,这就是所谓的互反。 有这么准的一双手,根本不用求特征向量,第一列拿出来就是了。 但是实际上手不可能那么准,人类也不可能操控无限精度的实数,同时计算过程一定会引入误差。既然这么不理想,那么就进一步,防止有人瞎猫碰上死老鼠,自以为很专业,就把标度值搞成一些奇怪的数字,让他们相除得不到刚好的标度值,例如,假设 w1 = 1, w2 = 3, w3 = 5, w4 = 7, w5 = 9,做第一列估计的时候,很好,a21=3, a31=5, a41=7, a51 = 9。做第二列估计的时候,a12直接拿过来是 1/3没问题,而a32就有问题了,应该是 5/3 ,而标度表里面没有 5/3 ,看来只能取值为1,最接近。 个人认为,这是为了防止人为误差的引入,同时让误差分布更均匀,类似于用质数计算散列值。这个本人的猜测,不一定对。 可见,由于各种误差,造成各要素的测量就有了互相“牵扯”,本来两个要素的比重之比是3/5,是清楚和准确的,却把比值测量成了1/3,引入了不必要的牵扯。此时,求特征值就能摈除牵扯而找到最根本的关系(按照线性空间的理论,坐标系没有对准,需要旋转调整一下,调整到特征向量组成的坐标系中,各要素的测量值才能不相互牵扯);而且由于各种误差,就需要用CI值考核估计的是否一致。因为无法掂量很准,同时又故意引入一个特别的标度表,那么CI永远不可能是0 。 |