《Spark机器学习进阶实战》——2.3.2 相关性分析
2.3.2 相关性分析
相关性分析是指通过分析寻找不同商品或不同行为之间的关系,发现用户的习惯,计算两个数据集的相关性是统计中的常见操作。
MLlib提供了计算多个数据集两两相关的方法。目前支持的相关性方法有皮尔逊(Pearson)相关和斯皮尔曼(Spearman)相关。一般对于符合正态分布的数据使用皮尔逊相关系数,对于不符合正态分布的数据使用斯皮尔曼相关系数。
皮尔逊相关系数是用来反映两个变量相似程度的统计量,它常用于计算两个向量的相似度,皮尔逊相关系数计算公式如下:
其中,X、Y表示两组变量,X、Y表示两个变量的平均值,皮尔逊相关系数可以理解为对两个向量进行归一化以后,计算其余弦距离(即使用余弦函数cos计算相似度,也用向量空间中两个向量的夹角的余弦值来衡量两个文本间的相似度),皮尔逊相关系数大于0表示两个变量正相关,小于0表示两个变量负相关,皮尔逊相关系数为0时,表示两个变量没有相关性。
调用MLlib计算两个RDD皮尔逊相关性的代码如下,输入的数据可以是RDD[Double],也可以是RDD[Vector],输出是一个Double值或者相关性矩阵。
import org.apache.spark.SparkContext
import org.apache.spark.MLlib.linalg._
import org.apache.spark.MLlib.stat.Statistics
// 创建应用入口
val sc: SparkContext = ...
// X变量
val seriesX: RDD[Double] = ...
// Y变量,分区和基数同seriesX
val seriesY: RDD[Double] = ...
// 使用皮尔逊方法计算相关性,斯皮尔曼的方法输入"spearman"
val correlation: Double = Statistics.corr(seriesX, seriesY, "pearson")
// 向量数据集
val data: RDD[Vector] = ...
val correlMatrix: Matrix = Statistics.corr(data, "pearson")
皮尔逊相关系数在机器学习的效果评估中经常使用,如使用皮尔逊相关系数衡量推荐系统推荐结果的效果。
- 点赞
- 收藏
- 关注作者
评论(0)