Machine Learning on Spark——第四节 统计基础(二)
作者:周志湖
微信號:zhouzhihubeyond
本節主要內容
1. Correlation 相關性分析
相關性分析用于研究兩個隨機變量之間的依賴關系,它是統計學當中的一種十分重要的方法,在Spark中只實現了兩種相關性分析方法,分別是皮爾遜(Pearson)與斯皮爾曼(Spearman)相關性分析方法,具體可參見。皮爾遜(Pearson)相關系數(具體參見:https://en.wikipedia.org/wiki/Correlation_coefficient)定義如下:
其中,協方差有如下定義形式:
方差具有如下定義形式:
標準差具有如下定義形式:
上述公式中的方差、標準差只能用來描述一維數據,協方差的意義在于其能夠描述多維數據,如果結果為正值,則說明兩者是正相關的,為負值則為負相關,值為0,則表示兩者不相關,從上述幾個公式的定義可以推出下列公式:
協方差可以將數據擴展到二維,對于n維數據,就需要計算
個協方差,此時自然而然地將其組織為協方差矩陣,例如一個三維變量x,y,z構成的協方差矩陣具有如下形式:
從上面的圖可以看到:協方差矩陣是一個對稱的矩陣,而且對角線是各個維度的方差。皮爾遜(Pearson)相關系數通過協方差矩陣便可得到。PearsonCorrelation在Spark中是私有成員,不能直接訪問,使用時仍然是通過Statistics對象進行
假設某工廠通過隨機抽樣得到考試成績與產量之間的關系數據如下:
直觀地看,成績越高產量越高,如果使用pearson相關系數,將得到如下結果:
但其實從我們觀察的數據來看,它們應該是高度相關的,雖然0.69也一定程度地反應了數據間的相關性,但表達力仍然不夠,為此可以引入Spearman相關系數(參見http://www.360doc.com/content/08/1228/23/50235_2219531.shtml),如表中的第四、第五列數據,通過將成績和產量替換成等級,那它們之間的相關度會明顯提高,這樣的話表達能力更強,如下列代碼所示:
//采用spearman相關系數 //執行結果: //correlation5: Double = 0.9428571428571412val correlation5:Double = Statistics.corr(rdd4, rdd5, "spearman")從上面的執行結果來看,相關性從pearson的值0.6915716600436548提高到了0.9428571428571412。由于利用的等級相關,因而spearman相關性分析也稱為spearman等級相關分析或等級差數法,但需要注意的是spearman相關性分析方法涉及到等級的排序問題,在分布式環境下的排序可能會涉及到大量的網絡IO操作,算法效率不是特別高。
2. 分層采樣(Stratified sampling)
本小節使用spark自帶的README.md文件進行相應的演示操作
3. 隨機數據生成(Random data generation)
scala> import org.apache.spark.SparkContext import org.apache.spark.SparkContextscala> import org.apache.spark.mllib.random.RandomRDDs._ import org.apache.spark.mllib.random.RandomRDDs._//生成100個服從標準正態分面N(0,1)的隨機RDD數據,10為指定的分區數 scala> val u = normalRDD(sc, 100L, 10) u: org.apache.spark.rdd.RDD[Double] = RandomRDD[26] at RDD at RandomRDD.scala:38//轉換使其服從N(1,4)的正太分布 scala> val v = u.map(x => 1.0 + 2.0 * x) v: org.apache.spark.rdd.RDD[Double] = MapPartitionsRDD[27] at map at <console>:27總結
以上是生活随笔為你收集整理的Machine Learning on Spark——第四节 统计基础(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大神,快来救救我,我搞不定啊
- 下一篇: HDU 1010 Tempter of