SparkML之相关性分析--皮尔逊相关系数、Spearman

SparkML之相关性分析--皮尔逊相关系数、Spearman

两个重要的要素
从非常直观的分析思路来说,比如分析身高和体重,我们会问个问题:.身高越高,体重是不是越重?问题细分为两个方向:1,身高越高,体重越重还是越轻。2,身高每增加 1 ,体重又是增加多少或减少多少。這就是相关性的两个重要要素:相关的方向和相关的强度。对于相关的方向很好理解,就是正相关、负相关还是无关。对于问题2,有不同的人产生了不同的 定义相关性强度的思想。

皮尔逊相关系数

皮尔逊相关系数全称为:皮尔逊积矩相关系数(Pearson product-moment correlation coefficient).该系数广泛用于度量两个变量之间的相关程度。它是由卡尔·皮尔逊从弗朗西斯·高尔顿在19世纪80年代提出的一个相似却又稍有不同的想法演变而来.定义的公式如下:

SparkML之相关性分析--皮尔逊相关系数、Spearman

SparkML之相关性分析--皮尔逊相关系数、Spearman

Spearman等级相关系数:
具体函数的定义,可以参考文献1。下面对思想进行简单阐述:A 的身高149,在身高這一列秩为1(最矮)。同理后面的参数就是所说变量的秩。Spearman等级相关系数(rho)如下:

SparkML之相关性分析--皮尔逊相关系数、Spearman

其中累加di平方就是A身高的秩减去体重的秩平方加上B身高的秩减去体重的秩平方。。。。。。。发现spearman等级相关系数,和具体的数值无关,之和其中的秩有关系,它适用于不能准确测量指标值而只能以严重程度,名词先后等等级参数来确定之间的相关程度。

对原始数据xi,yi按从大到小排序,记x\'i,y\'i为原始xi,yi在排序后列表中的位置,x\'i,y\'i称为xi,yi的秩次,秩次差di=x\'i-y\'i

SparkML之相关性分析--皮尔逊相关系数、Spearman

代码演示

package mllib import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SQLContext} import org.apache.spark.{SparkContext, SparkConf} import org.apache.spark.mllib.linalg._ import org.apache.spark.mllib.stat.Statistics import org.apache.spark.rdd.RDD /** * Created by Administrator on 2017/6/1. */ object Correlations { def main(args: Array[String]) { val conf = new SparkConf().setAppName("test").setMaster("local") val sc = new SparkContext(conf) val sql = new SQLContext(sc); val seriesX: RDD[Double] = sc.parallelize(Array(149.0,150.0,153.0,155.0,160.0,155.0,160.0,150.0)) // a series // must have the same number of partitions and cardinality as seriesX val seriesY: RDD[Double] = sc.parallelize(Array(81.0,88.0,87.0,99.0,91.0,89.0,95.0,90.0)) // compute the correlation using Pearson\'s method. Enter "spearman" for Spearman\'s method. If a // method is not specified, Pearson\'s method will be used by default. val correlation: Double = Statistics.corr(seriesX, seriesY, "pearson") println(s"Correlation is: $correlation") val data: RDD[Vector] = sc.parallelize( Seq( Vectors.dense(8.0, 10.0, -11.0), Vectors.dense(2.0, 20.0, 200.0), Vectors.dense(5.0, 33.0, 366.0))//每行可以表示一个用户,每个特征的相关性 ) // note that each Vector is a row and not a column // calculate the correlation matrix using Pearson\'s method. Use "spearman" for Spearman\'s method // If a method is not specified, Pearson\'s method will be used by default. val correlMatrix: Matrix = Statistics.corr(data, "pearson") println(correlMatrix.toString) } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxgyg.html