自贡有什么好玩的地方灰⾊关联度分析(GreyRelationAnalysis,GRA)原理详解
释名
灰⾊关联度分析(Grey Relation Analysis,GRA),是⼀种多因素统计分析的⽅法。简单来讲,就是在⼀个灰⾊系统中,我们想要了解其中某个我们所关注的某个项⽬受其他的因素影响的相对强弱,再直⽩⼀点,就是说:我们假设以及知道某⼀个指标可能是与其他的某⼏个因素相关的,那么我们想知道这个指标与其他哪个因素相对来说更有关系,⽽哪个因素相对关系弱⼀点,依次类推,把这些因素排个序,得到⼀个分析结果,我们就可以知道我们关注的这个指标,与因素中的哪些更相关。
( note : 灰⾊系统这个概念的提出是相对于⽩⾊系统和⿊⾊系统⽽⾔的。这个概念最初是由控制科学与⼯程(hhh熟悉的⼀级学科)的教授邓聚龙提出的。按照控制论的惯例,颜⾊⼀般代表的是对于⼀个系统我们已知的信息的多少,⽩⾊就代表信息充⾜,⽐如⼀个⼒学系统,元素之间的关系都是能够确定的,这就是⼀个⽩⾊系统;⽽⿊⾊系统代表我们对于其中的结构并不清楚的系统,通常叫做⿊箱或⿊盒的就是这类系统。灰⾊介于两者之间,表⽰我们只对该系统有部分了解。)
举例
为了说明灰⾊关联度分析的应⽤场景,我们利⽤下图进⾏说明:
该图来源于参考⽂献1。这篇⽂献研究的内容是旅游业发展的影响因⼦,看该表格,第⼀⾏为五年的旅游总收⼊,代表着旅游业发展的程度,⽽下⾯的这些要素就是我们需要分析的因⼦,⽐如在校⼤学⽣数,旅⾏社数,星级饭店数,A级景区数等等。最终⽬的是要得到⼀个排序,从⽽说明这些因⼦对旅游总收⼊的关联性的程度。
操作步骤与原理详解
(1)确⽴母序列
(参考序列,在上⾯栗⼦中就是1998~2002年的旅游总收⼊序列)和⼦序列(⽐较序列,也就是需要确⽴顺序的因素序列,上栗中的除了第⼀⾏以外的所有因素都可以作为参考序列)
为了后⾯的表述⽅便,这⾥统⼀⼀下notation:
我们⽤x_i(k)表⽰第i个因素的第k个数值
⽤上⾯的栗⼦来说
⽐如第⼀个因素是在校⼤学⽣⼈数,那么x_1(1)就表⽰在校⼤学⽣⼈数在1998年的取值,也就是341,x_1(2)就是1999年的取值,
⽽x_2(1)就是表⽰旅游从业⼈数在1998年的数值。以此类推。
我们⽤x_0(k)表⽰母序列,i≥1的表⽰⼦序列,也就是要分析的要素的序列。
如果不写括号,⽐如x_i ,就代表这个元素的整个序列,也就是向量 x_i = [x_i(1), x_i(2), ... , x_i(n)]
n为每个向量的维度,也就是每个元素的特征的数量,在上栗中,n就是5,因为有五年的数据,代表五维向量。
以下所有表述都⽤该notation表⽰。
详解: 这个就是我们任务的⽬的(找到⼦序列和参考序列的关联程度),所以不需要再解释了吧~
(2)归⼀化,或者叫⽆量纲化。
详解: 因为我们的这些要素是不同质的东西的指标,因此可能会有的数字很⼤有的数字很⼩,但是这并不是由于它们内禀的性质决定的,⽽只是由于量纲不同导致的,因此我们需要对它们进⾏⽆量纲化。这个操作⼀般在数据处理领域叫做归⼀化(normalization),也就是减少数据的绝对数值的差异,将它们统⼀到近似的范围内,然后重点关注其变化和趋势。
如下图所⽰,这是上⾯表格中前3个元素随年的变化曲线,以及作为母序列的旅游总收⼊:
可以看到,有两个曲线绝对数值很⼤,⽽另外两个很⼩,如果不做处理必然导致⼤的数值的影响会”淹没“掉⼩数值的变量的影响。
所以我们要对数据进⾏归⼀化处理,主要⽅法有如下⼏个:
(1) 初值化: 顾名思义,就是把这⼀个序列的数据统⼀除以最开始的值,由于同⼀个因素的序列的量级差别不⼤,所以通过除以初值就能将这些值都整理到1这个量级附近。
公式: x_i(k)' = x_i(k) / x_i(1) i = 1,...,m, k = 1,...,n
良莠(m为因素个数,n为每个因素的数据维度,仍如上栗,n=5,m=3(我们只看前三个因素,就是曲线图⾥画的这三种,和旅游总收⼊的关联,数据维度为5,即五年))
(2) 均值化: 顾名思义,就是把这个序列的数据除以均值,由于数量级⼤的序列均值⽐较⼤,所以除掉以后就能归⼀化到1的量级附近。
公式: x_i(k)' = x_i(k) / ( mean(x_i) ) (除以均值)
河的英文其中: mean(x_i) = (1/n) sum_k=1^n (x_i(k)) (求第i个因素序列的均值)
其余还有如区间化,即把序列的值规范到⼀个区间,⽐如[0, 1],之间。这个⽅法实际上在数据处理中应⽤⽐较多,但是在GRA中似乎常⽤均值化或者初值化,所以在此不介绍。
这⾥我们按照参考⽂献中的采⽤的⽅法,⽤初值化进⾏归⼀化,得到的结果如下图:
可以看到,归⼀化以后的数据,量级差别变⼩了,这是为了后⾯提供铺垫,因为我们关注的实际上是曲线的形状的差异,⽽不希望绝对数值对后⾯的计算有影响。
(3)计算灰⾊关联系数
设备档案先放上公式:
详解:
⾸先,我们把i看做固定值,也就是说对于某⼀个因素,其中的每个维度进⾏计算,得到⼀个新的序列,这个序列中的每个点就代表着该⼦序列与母序列对应维度上的关联性(数字越⼤,代表关联性越强)。
仔细观察这个公式,rho是⼀个可调节的系数,取值为(0,1),⼤于零⼩于⼀,这⼀项的⽬的是为了调节输出结果的差距⼤⼩,我们放在后⾯讲。我们先假设把rho取成0,那么,这个式⼦就变成了
pudo_zeta_i(k) = min min |x_0(k) - x_i(k)| / |x_0(k) - x_i(k)| = constant / |x_0(k) - x_i(k)|
我们看上⾯这个式⼦,可以发现,分⼦上这个数值,对于所有⼦序列来说都是⼀样的(,分⼦上这个数实际上就是所有因素的所有维度中,与母序列(参考序列,即我们要⽐较的序列)距离最近的维度上的距离。为什么要这样做呢?这样来想,假如我们没有进⾏归⼀化,或者不是⽤的初值化,⽽是⽤的均值化或者其他⽅法,可能会导致曲线之间,也就是母序列和各个⼦序列之间仍然有⼀段距离,那
么这个距离最⼩值与下⾯的每个维度的距离相除,实际上也可以看成是⼀种取消量纲的⼿段。对于所有⼦序列,这个分⼦是相同的,所以实际上,这个系数pudo_zeta是与第k个维度上,⼦序列与母序列的距离(差的绝对值,通常叫做l1范数(l1-norm))成反⽐,也就是说,这两个数距离越远,我们认为越不相关,这是符合直觉的。
当然,如果⽤了初值化归⼀化数据,如上⾯的图2所⽰,min min |x_0(k) - x_i(k)| 对每个i都会变成0,这样就不好了,因为这样⼀来,所有的zeta_i(k)都成了0,是⽆意义的。所以这时候我们就看到后⾯的 rho max max这⼀项的作⽤了。这⼀项对于每个i来说也是⼀个不变的常数constant,所以可以理解为给上⾯那个式⼦的分⼦分母同时加上某个数值,如下所⽰:
zeta_i(k) = (aconstant + bconstant) / (|x_0(k) - x_i(k)| + bconstant)
这样做的⽬的是什么呢? 我们举个栗⼦: 对于两个分数: 1/5 和 1/4 ,它们的分⼦⼀样,分母相差为1,这时候他们的值相差1/20,也就是0.05,这就是没有+rho max max那⼀项的情况,分⼦相同,分母的差代表着与参考序列的距离。 如果我们给他们分⼦分母同时加上20,那么就是21/25和21/24,它们相差为0.035,可以看到,加⼊这⼀项会导致同样的距离的点的系数差,会因为计算⽽变⼩。很显然地,rho取得越⼤,不同zeta系数的差距就越⼩。
另外,由于分⼦上是min min,也就是距离的全局最⼩值,这就导致下⾯的分母必然⼤于分⼦(不考虑
rho max max 项),⽽且,如果分母⾮常⼤,曲线距离⾮常远,那么,zeta接近0; 相反,如果x_i和x_0在所有维度上的差完全⼀样,那么分数的值就是1。这样zeta取值范围就是0~1之间,0表⽰不相关,1表⽰强关联性。这也符合认知。考虑上rho max max 项之后,我们知道对于⼀个真分数,分⼦分母都加⼀个同样的值,仍然是真分数(实际上是⼀个添加溶质的溶液的问题)。也就是说,仍然是0到1。
总结来说,rho是控制zeta系数区分度的⼀个系数,rho取值0到1, rho越⼩,区分度越⼤,⼀般取值0.5较为合适。zeta关联系数取值落在0到1之间。
接上栗,我们对上述三个⼦序列做出关联系数zeta的序列,结果如下:
有关青春的电影
其实从这个图中已经可以看出,⼤学⽣这⼀因素对旅游也的相关性普遍要⾼⼀些,从业⼈员相对影响少⼀些。星级饭店的数量居中。(4) 计算关联系数均值,形成关联序
根据上图其实已经可以看出⼤概的趋势,但是这只是因为这个恰好所有维度上的趋势⽐较⼀致,实际上,我们得到zeta关联系数的值以后,应该对每个因素在不同维度上的值求取均值,换句话说,也就是对于上⾯那些zeta 的曲线,同⼀个颜⾊的求取均值。结果如下:
>> mean(zeta_1)
ans =
0.7505
>> mean(zeta_2)
ans =
0.5848
>> mean(zeta_3)
柏林博物馆
ans =
0.7154
可以看到,根据关联系数⼤⼩,排序结果为:
浦外附小⼤学⽣⼈数 > 星级饭店数量 > 从业⼈员⼈数倍他司丁
这和参考⽂献论⽂中的结论是⼀致的:
(由于论⽂中⽤了所有的因⼦,导致max max 这个全局最⼤值不同,所以计算出的关联度数值与复现计算的结果数值不⼀样,但是这三个因⼦的关联度的排序是⼀致的,说明关联度是⼀个相对的指标,它反映的是不同因⼦与参考内容的关联程度)
总结
GRA算法本质上来讲就是提供了⼀种度量两个向量之间距离的⽅法,对于有时间性的因⼦,向量可以看成⼀条时间曲线,⽽GRA算法就是度量两条曲线的形态和⾛势是否相近。为了避免其他⼲扰,凸出形态特征的影响,GRA先做了归⼀化,将所有向量矫正到同⼀个尺度和位置,然后计算每个点的距离。最后,通过min min 和max max 的矫正,使得最终输出的结果落在0到1之间,从⽽符合系数的⼀般定义。rho调节不同关联系数之间的差异,换句话说,就是输出的分布,使其可以变得更加稀疏或者紧密。以数学⾓度要⾔之,该算法即度量已归⼀化的⼦向量与母向量的每⼀维度的l1-norm距离的倒数之和,并将其映射到0~1区间内,作为⼦母向量的关联性之度量的⼀种策略。
附录:MATLAB代码
下⾯是该博⽂中为举栗⼦复现的参考⽂献1中的计算过程MATLAB代码: