用隨機森林分類算法進行Iris 數據分類訓練,是怎樣的體驗?

MLlib是Spark的機器學習(ML)庫,旨在簡化機器學習的工程實踐工做,並方便擴展到更大規模。算法

MLlib由一些通用的學習算法和工具組成,包括分類、迴歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道API。緩存

MLllib目前分爲兩個代碼包:spark.mllib 包含基於RDD的原始算法API。dom

spark.ml ,提供了基於DataFrames高層次的API,能夠用來構建機器學習管道,FEA-spk技術的機器學習就是基於spark.ml 包。機器學習

spark.ml 包,是基於DataFrame的,將來將成爲Spark機器學習的主要API。它能夠在分佈式集羣上進行大規模的機器學習模型訓練,而且能夠對數據進行可視化。分佈式

1、隨機森林分類算法的介紹工具

隨機森林顧名思義,是用隨機的方式創建一個森林,森林裏面有不少的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在獲得森林以後,當有一個新的輸入樣本進入時,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對應分類算法),而後看看哪一類被選擇最多,就預測這個樣本爲那一類。性能

使用Spark MLlib隨機森林算法存在不足,須要改進!學習

具體來說,使用Spark MLlib進行模型的訓練,須要進行大量的數據轉化,列聚合爲向量等。很是麻煩,而且不能作數據的可視化。優化

而FEA-spk技術能夠很好的解決這些問題。對模型進行訓練只須要一句命令就好了,而且能夠對結果數據進行可視化展現。spa

2、Iris 數據分類訓練案例

下面列舉一個用隨機森林分類算法進行Iris 數據分類的例子。

1. 數據準備

原始的數據以及相應的說明能夠到https://pan.baidu.com/s/1c2d0hpA下載。 我在這基礎之上,增長了header信息。 

這裏將下載好的數據放到hdfs上面進行讀取。

2. Iris 數據進行訓練的具體步驟

(1)要使用FEA-spk技術,首先要建立一個spk的鏈接,全部的操做都是以它爲上下文進行的。在fea界面運行如下命令

(2)加載數據,數據在hdfs上面,數據的格式爲csv文件格式,目錄爲/data/iris_data.txt

(3)使用ML_si方法將字符型的label變成index       

(4)將特徵列的類型轉化爲double類型,由於spark.ml只支持double類型,使用 ML_double方法

(5)使用隨機森林模型進行訓練

在訓練RandomForest模型的時候,咱們須要設置好幾個參數:

· maxBins

最大裝箱數,爲了近似統計變量,好比變量有100個值,我只分紅10段去作統計,默認值是32;

· numTrees

森林裏有幾棵樹,默認值是20;

· minInstancesPerNode

每一個節點最少實例,默認值是1;

· minInfoGain

最小信息增益,默認值是0.0;

· maxDepth

最大樹深度,默認值是5;

· maxMemoryInMB

最大內存MB單位,這個值越大,一次處理的節點劃分就越多,默認值是256;

· cacheNodeIds

是否緩存節點id,緩存能夠加速深層樹的訓練,默認值是False;

· checkpointInterval

檢查點間隔,就是多少次迭代固化一次,默認值是10;

· impurity

隨機森林有三種方式,entropy,gini,variance,迴歸確定就是variance,默認值是gini;

· seed

採樣種子,種子不變,採樣結果不變,默認值None;

· featureSubsetStrategy

auto: 默認參數。讓算法本身決定,每顆樹使用幾條數據。

使用的參數以下圖所示

(6)對訓練好的模型進行打分

能夠看到準確率達到了97%

(7)將訓練好的模型保存到hdfs上面,以供下次使用

這個很是實用,對於模型比較大的狀況下,利用HDFS的分佈式結構就能夠提升加載性能。

(8)將hdfs上面保存的模型加載進來

(9)對加載後的模型作預測

其中prediction列就是預測的結果

以上就是使用FEA-spk技術進行機器學習的步驟,它很是適合數據分析處理大規模的數據,簡單、強大、可視化,不懂Java\Python一樣能夠玩轉Spark!

相關文章
相關標籤/搜索