Spark MLlib學習(1)--基本統計

瀛999發表於2018-08-03

Correlation

支援的方法有Pearson相關係數和spearman相關係數。

Pearson相關係數

皮爾遜相關係數用來衡量定距變數的線性關係,取值範圍是-1到1,接近0的變數相關性小,接近1或-1的變數相關性大。

spearman相關係數

斯皮爾曼相關性係數,通常也叫斯皮爾曼秩相關係數。“秩”,可以理解成就是一種順序或者排序,那麼它就是根據原始資料的排序位置進行求解,這種表徵形式就沒有了求皮爾森相關性係數時那些限制。下面來看一下它的計算公式:

計算過程就是:首先對兩個變數(X, Y)的資料進行排序,然後記下排序以後的位置({X}', {Y}'),({X}', {Y}')的值就稱為秩次,秩次的差值就是上面公式中的d_{i},n就是變數中資料的個數,最後帶入公式就可求解結果。

下面為MLlib程式碼,用來求向量的皮爾遜相關係數和斯皮爾曼相關性係數:

import org.apache.spark.ml.linalg.{Matrix, Vectors}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row

val data = Seq(
  //生成稀疏向量,該向量個4個值,第一個值為1.0,最後一個值為-2.0,即向量為(1.0, 0.0, 0.0,-2.0)
  Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
  Vectors.dense(4.0, 5.0, 0.0, 3.0),
  Vectors.dense(6.0, 7.0, 0.0, 8.0),
  Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
)

val df = data.map(Tuple1.apply).toDF("features")
//Pearson相關係數
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println(s"Pearson correlation matrix:\n $coeff1")

//Spearman相關係數
val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println(s"Spearman correlation matrix:\n $coeff2")

Hypothesis testing

現在支援的方法有皮爾遜的卡方檢驗。

“皮爾森卡方檢驗”可用於兩種情境的變項比較:適配度檢驗,和獨立性檢驗

  • “適配度檢驗”驗證一組觀察值的次數分配是否異於理論上的分配。

  • “獨立性檢驗”驗證從兩個變數抽出的配對觀察值組是否互相獨立(例如:每次都從A國和B國各抽一個人,看他們的反應是否與國籍無關)。

下面的例子用於計算features和label的獨立性:

import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.ml.stat.ChiSquareTest

val data = Seq(
  (0.0, Vectors.dense(0.5, 10.0)),
  (0.0, Vectors.dense(1.5, 20.0)),
  (1.0, Vectors.dense(1.5, 30.0)),
  (0.0, Vectors.dense(3.5, 30.0)),
  (0.0, Vectors.dense(3.5, 40.0)),
  (1.0, Vectors.dense(3.5, 40.0))
)

val df = data.toDF("label", "features")
val chi = ChiSquareTest.test(df, "features", "label").head
//卡方分配右尾機率p,如果p值很小,說明觀察值與理論值偏離程度太大,應當拒絕無效假設
println(s"pValues = ${chi.getAs[Vector](0)}")
//自由度df
println(s"degreesOfFreedom ${chi.getSeq[Int](1).mkString("[", ",", "]")}")
//統計值
println(s"statistics ${chi.getAs[Vector](2)}")

 

相關文章