Spark MLib 基本統計匯總 1


1.  概括統計 summary statistics

MLlib支持RDD[Vector]列式的概括統計,它通過調用 Statistics 的 colStats方法實現。

colStats返回一個 MultivariateStatisticalSummary 對象,這個對象包含列式的最大值、最小值、均值、方差等等。

import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.stat.{MultivariateStatisticalSummary, Statistics}

val observations: RDD[Vector] = ...       // define an RDD of Vectors

// Compute column summary statistics. val summary: MultivariateStatisticalSummary = Statistics.colStats(observations) println(summary.mean) // a dense vector containing the mean value for each column println(summary.variance) // column-wise variance println(summary.numNonzeros) // number of nonzeros in each column

2.  相關性 correlations

1) 基礎回顧

協方差:兩個變量總體誤差的期望。

 

方差是一種特殊的協方差,即兩個變量相等時。

所以方差 D(X)=E[X2]-(E(X))2

相關系數:用以反映變量之間相關關系密切程度的統計指標。

 

其中Cov(X,Y) 是X與Y的協方差,D(X),D(Y) 為其方差。

2)相關性系數的計算

計算兩個數據集的相關性是統計中的常用操作,目前Mlib里面支持的有兩種:皮爾森(Pearson)相關和斯皮爾曼(Spearman)相關。

Statistics 提供方法計算數據集的相關性。根據輸入的類型,兩個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 = ...

val seriesX: RDD[Double] = ... // a series val seriesY: RDD[Double] = ... // must have the same number of partitions and cardinality as seriesX val correlation: Double = Statistics.corr(seriesX, seriesY, "pearson")
val data: RDD[Vector] = ... // note that each Vector is a row and not a column val correlMatrix: Matrix = Statistics.corr(data, "pearson")

在上面輸入 "pearson" 和"spearman" ,就會計算不同的系數。 

3) Pearson 和Spearman相關系數

Pearson 就是我們平時學到的(是矩相關的一種)。

但有限制條件:

  • 首先,必須假設數據是成對地從正態分布中取得的;
  • 其次,數據至少在邏輯范圍內是等距的

 

Spearman相關系數,可以操作不服從正態分布的數據集。也就是秩相關(等級相關)的一種。

它是排序變量(ranked variables)之間的皮爾遜相關系數: 即對於大小為n的樣本集,將原始的數據X_iY_i轉換成排序變量rgX_irgY_i,再計算皮爾遜相關系數。

3.  分層取樣

  • 分層抽樣法也叫類型抽樣法。它是從一個可以分成不同子總體(或稱為層)的總體中,按規定的比例從不同層中隨機抽取樣品(個體)的方法。
  • 在 spark.mllib 中,用 key 來分層。
  • 分層采樣方法 sampleByKey 和 sampleByKeyExact 可以在key-value對的RDD上執行

sampleByKey      :通過擲硬幣的方式決定是否采樣一個觀察數據, 因此它需要我們傳遞(pass over)數據並且提供期望的數據大小(size)。

sampleByKeyExact  :允許用戶准確抽取f_k * n_k個樣本, 這里f_k表示期望獲取鍵為k的樣本的比例,n_k表示鍵為k的鍵值對的數量。

                           比每層使用sampleByKey隨機抽樣需要更多的有意義的資源,但是它能使樣本大小的准確性達到了99.99%

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.PairRDDFunctions

val sc: SparkContext = ...
val data = ... // an RDD[(K, V)] of any key value pairs
val fractions: Map[K, Double] = ... // specify the exact fraction desired from each key

// Get an exact sample from each stratum
val approxSample = data.sampleByKey(withReplacement = false, fractions)
val exactSample = data.sampleByKeyExact(withReplacement = false, fractions)

基礎回顧:

泊松分布 Poission分布

   期望和方差均為 λ. 

伯努利分布即二項分布

   期望是np,方差是np(1-p)

 

當二項分布的n很大而p很小時,泊松分布可作為二項分布的近似,其中λ為np。通常當n≧10,p≦0.1時,就可以用泊松公式近似得計算。

重復抽樣用泊松,不重復抽樣用伯努利。

 

 

 

 

 

            

 


免責聲明!

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



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