中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解析spark MLlib訓練原理和使用

發布時間:2021-12-03 18:06:30 來源:億速云 閱讀:217 作者:柒染 欄目:大數據

今天就跟大家聊聊有關如何解析spark MLlib訓練原理和使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

說明

        spark MLlib是Spark提供的可擴展的機器學習庫。MLlib中已經包含了一些通用的學習算法和工具,如:分類、回歸、聚類、協同過濾、降維以及底層的優化原語等算法和工具,MLlib提供的API主要分為以下兩類。

        spark.mllib包中提供的主要API,操作RDD,后續可能廢棄。

        spark.ml包中提供的構建機器學習工作流的高層次的API,主要操作DataFrame,可使用pipeline把很多操作(算法/特征提取/特征轉換)以管道的形式串起來,讓數據在這個管道中流動。ml所有模型提供統一的算法操作接口,比如模型訓練都是fit。mllib中不同模型會有各種各樣的trainXXX。

訓練原理

    隨機森林訓練原理:

        優化: 

                逐層訓練:因為數據存放在不同的機器上,頻繁的訪問數據效率非常低,因此采用廣度遍歷的方法,每次構造所有樹的一層,例如如果要訓練10棵樹,第一次構造所有樹的第一層根節點,第二次構造所有深度為2的節點,以此類推,這樣訪問數據的次數降為樹的最大深度,大大減少了機器之間的通信,提高訓練效率。

                樣本抽樣:當樣本存在連續特征時,其可能的取值可能是無限的,存儲其可能出現的值占用較大空間,因此spark對樣本進行了抽樣,抽樣數量,最少抽樣1萬條

                特征裝箱:每個離散特征值(對于連續特征,先離散化)稱為一個Split,上下限[lowSplit, highSplit]組成一個bin,也就是特征裝箱,默認的maxBins是32。對于連續特征,離散化時的bin的個數就是maxBins,采用等頻離散化;對于有序的離散特征,bin的個數是特征值個數+1;對于無序離散特征,bin的個數是2^(M-1)-1,M是特征值個數

        過程:

            1、初始化模型:構建numTrees個Node,賦默認值emptyNode,這些node將作為每棵樹的root node,參與后面的訓練。將這些node與treeIndex封裝加入到隊列nodeQueue中,后面會將所有待split的node都加入到這個隊列中,依次split,直到所有node觸發截止條件,也就是后面的while循環中隊列為空了。

            2、選擇待分裂Node:循環從nodeQueue取出待處理node放入nodesForGroup和treeToNodeToIndexInfo中nodesForGroup是Map[Int, Array[Node]],其key是treeIndex,value是Node數組,其中放著該tree本次要分裂的node

            treeToNodeToIndexInfo的類型是Map[Int, Map[Int, NodeIndexInfo]],key為treeIndex,value中Map的key是node.id,這個id來自Node初始化時的第一個參數,第一輪時node的id都是1。其value為NodeIndexInfo結構,

            計算最佳node分裂:先在個partition上分別統計,再累積各partition成全局統計,針對每個node遍歷所有特征,計算獲得最佳分裂。

            3、分裂node:根據最佳split進行node的分裂,包括當前節點的一些屬性完善,左右孩子節點的構造等,將當前節點的左右孩子節點繼續加入nodeQueue中,這里面放的是需要繼續分裂的節點,至此當前層分裂完成。

            4、循環訓練循環執行取出node、分裂node步驟, 直到的所有節點觸發結束為止。

            5、隨機森林繼承自樹模型集合模型,最終結果,分類投票,回歸平均。

    梯度下降步驟:

            1、把當前的模型參數廣播到各個數據partition(可當作虛擬的計算節點) 

            2、各計算節點進行數據抽樣得到mini batch的數據,分別計算梯度,再通過treeAggregate操作匯總梯度,得到最終梯度gradientSum

            3、利用gradientSum更新模型權重

    缺點: 

           1、采用全局廣播的方式,在每輪迭代前廣播全部模型參數。眾所周知Spark的廣播過程非常消耗帶寬資源,特別是當模型的參數規模過大時,廣播過程和在每個節點都維護一個權重參數副本的過程都是極消耗資源的過程,這導致了Spark在面對復雜模型時的表現不佳;

            2、采用阻斷式的梯度下降方式,每輪梯度下降由最慢的節點決定。從上面的分析可知,Spark MLlib的mini batch的過程是在所有節點計算完各自的梯度之后,逐層Aggregate最終匯總生成全局的梯度。也就是說,如果由于數據傾斜等問題導致某個節點計算梯度的時間過長,那么這一過程將block其他所有節點無法執行新的任務。這種同步阻斷的分布式梯度計算方式,是Spark MLlib并行訓練效率較低的主要原因;

            3、Spark MLlib并不支持復雜網絡結構和大量可調超參。事實上,Spark MLlib在其標準庫里只支持標準的多層感知機神經網絡的訓練,并不支持RNN,LSTM等復雜網絡結構,而且也無法選擇不同的activation function等大量超參。這就導致Spark MLlib在支持深度學習方面的能力欠佳

看完上述內容,你們對如何解析spark MLlib訓練原理和使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平果县| 张家港市| 太仓市| 樟树市| 湖北省| 绥滨县| 大渡口区| 临邑县| 贞丰县| 故城县| 禹州市| 高雄市| 佛教| 怀安县| 新余市| 天台县| 上虞市| 河东区| 阿荣旗| 兰西县| 彩票| 西昌市| 潮安县| 汤原县| 台南市| 新宁县| 肃北| 呼伦贝尔市| 彭阳县| 陆丰市| 抚远县| 承德县| 枝江市| 秦皇岛市| 彭山县| 奉贤区| 南岸区| 沧州市| 凌源市| 株洲市| 泸溪县|