用隨機(jī)森林分類算法進(jìn)行Iris 數(shù)據(jù)分類訓(xùn)練,是怎樣的體驗(yàn)?
MLlib是Spark的機(jī)器學(xué)習(xí)(ML)庫,旨在簡化機(jī)器學(xué)習(xí)的工程實(shí)踐工作,并方便擴(kuò)展到更大規(guī)模。
MLlib由一些通用的學(xué)習(xí)算法和工具組成,包括分類、回歸、聚類、協(xié)同過濾、降維等,同時還包括底層的優(yōu)化原語和高層的管道API。
MLllib目前分為兩個代碼包:spark.mllib 包含基于RDD的原始算法API。
spark.ml ,提供了基于DataFrames高層次的API,可以用來構(gòu)建機(jī)器學(xué)習(xí)管道,F(xiàn)EA-spk技術(shù)的機(jī)器學(xué)習(xí)就是基于spark.ml 包。
spark.ml 包,是基于DataFrame的,未來將成為Spark機(jī)器學(xué)習(xí)的主要API。它可以在分布式集群上進(jìn)行大規(guī)模的機(jī)器學(xué)習(xí)模型訓(xùn)練,并且可以對數(shù)據(jù)進(jìn)行可視化。
一、隨機(jī)森林分類算法的介紹
隨機(jī)森林顧名思義,是用隨機(jī)的方式建立一個森林,森林里面有很多的決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個新的輸入樣本進(jìn)入時,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個樣本應(yīng)該屬于哪一類(對應(yīng)分類算法),然后看看哪一類被選擇最多,就預(yù)測這個樣本為那一類。
使用Spark MLlib隨機(jī)森林算法存在不足,需要改進(jìn)!
具體來講,使用Spark MLlib進(jìn)行模型的訓(xùn)練,需要進(jìn)行大量的數(shù)據(jù)轉(zhuǎn)化,列聚合為向量等。非常麻煩,并且不能做數(shù)據(jù)的可視化。
而FEA-spk技術(shù)可以很好的解決這些問題。對模型進(jìn)行訓(xùn)練只需要一句命令就行了,并且可以對結(jié)果數(shù)據(jù)進(jìn)行可視化展示。
二、Iris 數(shù)據(jù)分類訓(xùn)練案例
下面列舉一個用隨機(jī)森林分類算法進(jìn)行Iris 數(shù)據(jù)分類的例子。
1. 數(shù)據(jù)準(zhǔn)備
原始的數(shù)據(jù)以及相應(yīng)的說明可以到https://pan.baidu.com/s/1c2d0hpA下載。 我在這基礎(chǔ)之上,增加了header信息。
這里將下載好的數(shù)據(jù)放到hdfs上面進(jìn)行讀取。
2. Iris 數(shù)據(jù)進(jìn)行訓(xùn)練的具體步驟
(1)要使用FEA-spk技術(shù),首先要創(chuàng)建一個spk的連接,所有的操作都是以它為上下文進(jìn)行的。在fea界面運(yùn)行以下命令
(2)加載數(shù)據(jù),數(shù)據(jù)在hdfs上面,數(shù)據(jù)的格式為csv文件格式,目錄為/data/iris_data.txt
(3)使用ML_si方法將字符型的label變成index
(4)將特征列的類型轉(zhuǎn)化為double類型,因?yàn)閟park.ml只支持double類型,使用 ML_double方法
(5)使用隨機(jī)森林模型進(jìn)行訓(xùn)練
在訓(xùn)練RandomForest模型的時候,我們需要設(shè)置好幾個參數(shù):
- maxBins
***裝箱數(shù),為了近似統(tǒng)計變量,比如變量有100個值,我只分成10段去做統(tǒng)計,默認(rèn)值是32;
- numTrees
森林里有幾棵樹,默認(rèn)值是20;
- minInstancesPerNode
每個節(jié)點(diǎn)最少實(shí)例,默認(rèn)值是1;
- minInfoGain
最小信息增益,默認(rèn)值是0.0;
- maxDepth
***樹深度,默認(rèn)值是5;
- maxMemoryInMB
***內(nèi)存MB單位,這個值越大,一次處理的節(jié)點(diǎn)劃分就越多,默認(rèn)值是256;
- cacheNodeIds
是否緩存節(jié)點(diǎn)id,緩存可以加速深層樹的訓(xùn)練,默認(rèn)值是False;
- checkpointInterval
檢查點(diǎn)間隔,就是多少次迭代固化一次,默認(rèn)值是10;
- impurity
隨機(jī)森林有三種方式,entropy,gini,variance,回歸肯定就是variance,默認(rèn)值是gini;
- seed
采樣種子,種子不變,采樣結(jié)果不變,默認(rèn)值None;
- featureSubsetStrategy
auto: 默認(rèn)參數(shù)。讓算法自己決定,每顆樹使用幾條數(shù)據(jù)。
使用的參數(shù)如下圖所示
(6)對訓(xùn)練好的模型進(jìn)行打分
可以看到準(zhǔn)確率達(dá)到了97%
(7)將訓(xùn)練好的模型保存到hdfs上面,以供下次使用
這個非常實(shí)用,對于模型比較大的情況下,利用HDFS的分布式結(jié)構(gòu)就可以提高加載性能。
(8)將hdfs上面保存的模型加載進(jìn)來
(9)對加載后的模型做預(yù)測
其中prediction列就是預(yù)測的結(jié)果
以上就是使用FEA-spk技術(shù)進(jìn)行機(jī)器學(xué)習(xí)的步驟,它非常適合數(shù)據(jù)分析處理大規(guī)模的數(shù)據(jù),簡單、強(qiáng)大、可視化,不懂Java\Python同樣可以玩轉(zhuǎn)Spark!