《Spark机器学习进阶实战》——2.3.2 相关性分析

举报
华章计算机 发表于 2019/05/31 01:24:45 2019/05/31
【摘要】 本书摘自《Spark机器学习进阶实战》——书中的第2章,第2.3.2节,作者是马海平、于俊、吕昕、向海。


2.3.2 相关性分析

相关性分析是指通过分析寻找不同商品或不同行为之间的关系,发现用户的习惯,计算两个数据集的相关性是统计中的常见操作。

MLlib提供了计算多个数据集两两相关的方法。目前支持的相关性方法有皮尔逊(Pearson)相关和斯皮尔曼(Spearman)相关。一般对于符合正态分布的数据使用皮尔逊相关系数,对于不符合正态分布的数据使用斯皮尔曼相关系数。

皮尔逊相关系数是用来反映两个变量相似程度的统计量,它常用于计算两个向量的相似度,皮尔逊相关系数计算公式如下:

image.png

其中,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")

皮尔逊相关系数在机器学习的效果评估中经常使用,如使用皮尔逊相关系数衡量推荐系统推荐结果的效果。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。