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