相关性系数
Statistics
提供方法计算数据集的相关性。根据输入的类型,两个RDD[Double]
或者一个RDD[Vector]
,输出将会是一个Double
值或者相关性矩阵。下面是一个应用的例子。
这个例子中我们看到,计算相关性的入口函数是Statistics.corr
,当输入的数据集是两个RDD[Double]
时,它的实际实现是,当输入数据集是RDD[Vector]
时,它的实际实现是Correlations.corrMatrix
。
下文会分别分析这两个函数。
这两个函数的第一步就是获得对应方法名的相关性方法的实现对象。并且如果输入数据集是两个RDD[Double]
,MLlib
会将其统一转换为RDD[Vector]
进行处理。
不同的相关性方法,computeCorrelationMatrix
的实现不同。下面分别介绍皮尔森相关与斯皮尔曼相关的实现。
当两个变量的线性关系增强时,相关系数趋于1或-1。正相关时趋于1,负相关时趋于-1。当两个变量独立时相关系统为0,但反之不成立。当Y
和X
服从联合正态分布时,其相互独立和不相关是等价的。
皮尔森相关系数的计算通过下面代码实现。
使用皮尔森线性相关系数有2个局限:首先,必须假设数据是成对地从正态分布中取得的;其次,数据至少在逻辑范围内是等距的。对不服从正态分布的资料不符合使用矩相关系数来描述关联性。
此时可采用秩相关(),也称等级相关,来描述两个变量之间的关联程度与方向。斯皮尔曼秩相关系数就是其中一种。
斯皮尔曼秩相关系数定义为排序变量(ranked variables
)之间的皮尔逊相关系数。对于大小为n
的样本集,将原始的数据X_i
和Y_i
转换成排序变量rgX_i
和rgY_i
,然后按照皮尔森相关系数的计算公式进行计算。

下面的代码将原始数据转换成了排序数据。
其中表示列索引相同且值相同的数据对在分区中第一次出现时的索引位置,n
表示列索引相同且值相同的数据对出现的次数。
【1】Pearson product-moment correlation coefficient
【2】