全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Spark Mllib分層抽樣操作步驟

更新時(shí)間:2021-01-29 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

分層抽樣法也叫類(lèi)型抽樣法,它是先將總體樣本按照某種特征分為若干次級(jí)(層),然后再?gòu)拿恳灰粚觾?nèi)進(jìn)行獨(dú)立取樣,組成一個(gè)樣本的統(tǒng)計(jì)學(xué)計(jì)算方法。例如,某手機(jī)生產(chǎn)廠家估算當(dāng)?shù)貪撛谟脩?hù),可以將當(dāng)?shù)鼐用裣M(fèi)水平作為分層基礎(chǔ),減少樣本中的誤差,如果不采取分層抽樣,僅在消費(fèi)水平較高的用戶(hù)中做調(diào)查,就不能準(zhǔn)確地估算出潛在的用戶(hù)。接下來(lái),通過(guò)Spark-Shell演示分層抽樣方法,具體代碼如下。

#創(chuàng)建鍵值對(duì)RDD

scala>val data =sc.parallelize(

Seg((1, 'a'), (1, 'b'), (2,'c'), (2, 'a'), (2, 'e'), (3, 'f1))#設(shè)定抽樣格式

scala>val fractions =Map(1->0.1, 2->0.6,3->0.3)

并從每層獲取抽樣樣本

scala> val approxSample =

data . sampleByKey (withReplacementfalse, fractions = fractions)并從每層獲取精確樣本

scala> val exactSample=

中招eyeyse otheptacee -fale, fractoo -ractoes#打印抽樣樣本

scala> approxsample.foreach (printin)

(2,e)

#打印精確樣本

scala> exactsample. frech(printn)

(2,d)

(3,f)

(1,b)

(2,c)

在上述代碼中用到了兩種3分層抽樣方法.其中sampleByKey()方法需要作用于一 一個(gè)鍵值對(duì)數(shù)組,其中Rroy用于分類(lèi)Velu可以是任雅值,然后通過(guò)r.歌徒父分關(guān)茶件有收.K條件的采樣比例1.0代表被率為o,qaun機(jī)農(nóng)物物鮮光否sppyeyExrn)方法會(huì)對(duì)全量數(shù)據(jù)做采樣計(jì)算。對(duì)于每個(gè)類(lèi)別,都會(huì)產(chǎn)生(k.n)個(gè)樣本,其中Ak是鍵為factos的Key的樣本類(lèi)別采樣的比例:nk是Key所擁有的樣本數(shù)。sampleByKeyExtra采樣的結(jié)果會(huì)更準(zhǔn)確,有99.9%的置信度,但耗費(fèi)的計(jì)算資源也更多。

1611902819984_分層抽樣.gif

sampleByKey()方法和sampleByKeyExact()方法的區(qū)別在于sampleByKey()方法每次都得通過(guò)給定的概率以-種類(lèi)似于擲硬幣的方式來(lái)決定這個(gè)觀察值是否被放入樣本,因此-遍就可以過(guò)濾完所有數(shù)據(jù),最后得到一個(gè)近似大小的樣本,但往往并不夠準(zhǔn)確。 



猜你喜歡: 

Spark SQL用法建議【大數(shù)據(jù)文章】

Spark發(fā)展史:讓你了解是什么Spark?

黑馬程序員大數(shù)據(jù)培訓(xùn)

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!