本文講述了基於「統計查詢模型」和mapreduce,提出了能適用於海量資料的機器學習演算法。隨後有人開發出了mahout機器學習演算法庫。但是由於spark的記憶體計算和spark streaming對流資料的處理,mapreduce並不是那麼完美。
本文提出乙個基於spark的機器學習平台,實現了常見的資料探勘與機器學習的基本演算法。
lambda架構
分為三個層次:批量處理層、服務層、速度層。
在批量處理層,一般選用hadoop或spark,完成批量處理計算任務。服務層,可以利用spark sql完成實時查詢計算任務。速度層採用spark streaming,作為批量處理高延遲響應的補充。
乙個新資料的到來,需要同時傳送至批量處理層和速度層,服務層會通過建立的索引完成低延遲的資料查詢,在速度層通過實時查詢直接返回結果,最終將兩者的查詢合併返回最終的輸出結果。
物件導向封裝
採用工廠方法設計頂層介面,定義各個基本方法,實現機器學習演算法的封裝。
採用策略模式,允許使用不同的策略求解。即不同的優化演算法,梯度下降、牛頓法等。
這樣的封裝,增大了程式復用、增強了平台擴充套件能力。
並行-回歸
線性回歸模型使用最小二乘法擬合。基於spark平台的線性回歸模型,樣本通過rdd分塊後,在集群多個結點上計算損失函式和部分梯度。由於各個特徵上的梯度元素是獨立關係,並且梯度可以累加。因此可以並行化。演算法如下:
1. 讀取資料集,切分資料
2. 迭代執行以下步驟
3. 對每個分片取樣,計算損失值和梯度
4. 在每個分片更新目標向量
5. 彙總更新的目標向量和損失值,得到平均的目標向量
6. 檢查是否收斂
7. 讀取測試集,評估結果
並行-svm
(這裡不是很理解,是每乙個小資料集生成乙個svm模型嗎,提高了速度,但是資料量少了,精度也可能下降)演算法偽**:
1. 讀入資料,切分資料到n臺節點
2. 迭代執行以下步驟
3. 生成採用資料集
4. 在取樣資料集上評估當前模型,得到錯分樣本
5. 利用公式,更新權重
6. 更新權重投影至限定空間
7. 檢查權重差值,收斂退出
8. 讀取測試集,評估結果
並行-kmeans
這個易於並行化,通過map()完成分配,將每個點分配給最近的中心,通過reduce()更新均值中心。
推薦矩陣分解
協同過濾演算法不需要依賴對專案內容或結構的深度理解,通過使用者歷史行為就可以推薦。但是如果歷史資料過少,存在冷啟動問題。
基於內容推薦,與協同過濾相反。
混合推薦就是混合協同過濾和基於內容的推薦。將兩個方法統一到乙個模型。可以產生更加精確的推薦,也能克服協同過濾所面臨的冷啟動及資料稀疏性問題。
在基於協同過濾的推薦方法中,要採用矩陣分解的方式來實現。矩陣分解通過分解評分後形成的因子向量來描述使用者和專案的屬性。
本文將hadoop和spark作為對比,證明spark在機器學習演算法上效能優於hadoop。
本文對線性回歸、支援向量機、kmeans聚類、矩陣分解、pangerank等進行設計和實現。
個人理解,本文是對spark mllib原有的一些機器學習演算法(包括沒有的,本文自己實現)進行封裝,採用工廠、策略等模式。使得使用者可以更將輕鬆、更多選擇來使用機器學習演算法。基於lambda架構,從三個層次出發搭建平台。
Spark機器學習
spark機器學習 注 spark簡介 spark是乙個分布式計算框架,旨在簡化執行於計算集群上的並行程式的編寫。該框架對資源排程,任務的提交 執行和跟蹤,節點間的通訊以及資料並行處理的內在底層操作都進行了抽象。它提供了乙個更高階別的api用於處理分布式資料。spark支援的四種執行模式 本地單機模...
Spark機器學習過程梳理
最近半個月開始研究spark的機器學習演算法,由於工作原因,其實現在還沒有真正開始機器學習演算法的研究,只是做了前期大量的準備,現在把早年學習的,正在學習的和將要學習的一起做個梳理,整理乙個spark機器學習完整流程。本文推薦的書籍注重通俗和實戰。linux的學習推薦 鳥哥的linux私房菜 基礎篇...
基於IoT平台 開發快的智慧型溫室監控裝置設計
根據專案需求,要開發一款智慧型溫室監控裝置,在網上對比了幾款物聯網平台,發現開發快小 emqtt 協議,且全部開源,這非常符合筆者的習慣。功能描述 通過開發快的小 e還可通過新增二氧化碳感測器 加熱控制 自動灌溉形成乙個完整的智慧型溫室,不過先實現基本的溫濕度監測功能打通資訊通路。選擇開發快是因為他...