MLlib程序包如下圖所示
如圖所示。
? ? ? ? 每個模型都有一個伴生對象,是模型的入口,定義了模型訓(xùn)練的train方法西潘。而實際使用時調(diào)用的是run方法。有點類似Java中的線程哨颂。
? ? ? ? 同時Spark 機器學(xué)習(xí)的API秸架,將從RDD過渡到DataSet和DataFrame。
(1)Spark 機器學(xué)習(xí)系統(tǒng)
? ? ? ? ?Spark機器學(xué)習(xí)系統(tǒng)咆蒿,類似于一個數(shù)據(jù)流水線。其架構(gòu)如下
1蚂子、數(shù)據(jù)預(yù)處理
? ? ? ? 首先查看數(shù)據(jù)統(tǒng)計信息沃测,包括最大值、均值食茎、最小值蒂破、分位數(shù)、方差等
? ? ? ? 案例如下:
? ? ? ? Data為讀入數(shù)據(jù)的RDD
? ? ? ? schemauser = saprk.createDataFrame(Data).#DataFrame類似數(shù)據(jù)庫中的表或者視圖别渔,可以對其進行查詢等附迷,也可以將數(shù)據(jù)中某幾個列組合起來構(gòu)成
? ??????schemauser.createOrReplaceTempView("user")
? ??????schemauser.describe("userid","age","gender","XXX").show()即可得出惧互。
2、數(shù)據(jù)質(zhì)量分析喇伯,主要注意缺失值喊儡、異常值、不一樣的值和錯誤數(shù)據(jù)
? ? ? ? 缺失值可以通過df.count()得到稻据“拢或者畫出線箱圖來看。? ? 其使用如https://baike.baidu.com/item/%E7%AE%B1%E5%BD%A2%E5%9B%BE/10671164?fr=aladdin
3捻悯、數(shù)據(jù)特征分析
? ? ? ? 包括特征分布分析匆赃、對比分析、統(tǒng)計量分析(特征之間的相關(guān)性分析)
? ? ? ? 主要分析特征的分布類型和是否對稱等今缚。(在進行機器學(xué)習(xí)前所有特征都進行了數(shù)字化)通過柱狀圖等實現(xiàn)
? ? ? ? hist(age,bins=20,color = 'lightblue',normed = true)
(2)PipeLine
? ? ? ? 一個PipeLine包含多個Stage 算柳,每個Stage完成一個任務(wù)。由兩個基本組建組成Transformer和Estimator姓言。transformer是數(shù)據(jù)轉(zhuǎn)換器瞬项,Estimator是評估器。transformer通過transform()方法轉(zhuǎn)換數(shù)據(jù)事期;Estimator通過fit()方法進行訓(xùn)練滥壕。
? ? ? ? 使用PipeLine進行訓(xùn)練的過程為:
? ? ? ? ? ? #輸入數(shù)據(jù)為文本和對應(yīng)標(biāo)簽
? ? ? ? ? ? #定義三個Stage ,tokenizer,hashingTF,lr
? ? ? ? ? ? val tokenizer = new Tokenizer()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setInputCol("text")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setoutputCl("word")
? ? ? ? ? ? val hashingTF = new HashingTF()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setNumFeatures(1000)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setInputCol(tokenizer.getOutputCol)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setoutputCol("feature")
? ? ? ? ? ? val lr = new LogistiicRegression()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setMaxIter(10)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setRegParam(0.001)
? ? ? ? ????val pipeline = new PipeLine()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setDtage(Array(tokenizer,hashingTF,lr))
? ? ? ? ? ? val model =?pipeline.fit(Data)
(3)在訓(xùn)練時可以設(shè)置參數(shù)數(shù)組兽泣,通過循環(huán)訓(xùn)練不同參數(shù)下的模型绎橘,選擇效果最好的
4、MLlib最核心的是ML Optimizer 唠倦。它可以把復(fù)雜的學(xué)習(xí)任務(wù)轉(zhuǎn)化為學(xué)習(xí)計劃称鳞,并提供內(nèi)部實現(xiàn)好的算法和參數(shù)。