SparkML之相關性分析--皮爾遜相關系數、Spearman


相關性分析是指對兩個或多個具備相關性的變量元素進行分析,從而衡量兩個變量因素的相關密切程度。

相關性的元素之間需要存在一定的聯系或者概率才可以進行相關性分析。

但是,請記住,相關性不等於因果性

兩個重要的要素
從非常直觀的分析思路來說,比如分析身高和體重,我們會問個問題:.身高越高,體重是不是越重?問題細分為兩個方向:1,身高越高,體重越重還是越輕。2,身高每增加 1 ,體重又是增加多少或減少多少。這就是相關性的兩個重要要素:相關的方向和相關的強度。對於相關的方向很好理解,就是正相關、負相關還是無關。對於問題2,有不同的人產生了不同的 定義相關性強度的思想。

皮爾遜相關系數

皮爾遜相關系數全稱為:皮爾遜積矩相關系數(Pearson product-moment correlation coefficient).該系數廣泛用於度量兩個變量之間的相關程度。它是由卡爾·皮爾遜從弗朗西斯·高爾頓在19世紀80年代提出的一個相似卻又稍有不同的想法演變而來.定義的公式如下:

 

Spearman等級相關系數:
具體函數的定義,可以參考文獻1。下面對思想進行簡單闡述:A 的身高149,在身高這一列秩為1(最矮)。同理后面的參數就是所說變量的秩。Spearman等級相關系數(rho)如下:

其中累加di平方就是A身高的秩減去體重的秩平方加上B身高的秩減去體重的秩平方。。。。。。。發現spearman等級相關系數,和具體的數值無關,之和其中的秩有關系,它適用於不能准確測量指標值而只能以嚴重程度,名詞先后等等級參數來確定之間的相關程度。

對原始數據xi,yi按從大到小排序,記x'i,y'i為原始xi,yi在排序后列表中的位置,x'i,y'i稱為xi,yi的秩次,秩次差di=x'i-y'i

 

代碼演示

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)
    }

}

結果展示 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM