“Spark上流式機器學習算法實現”中期檢查報告

從7月初到現在已經快一個月左右了,我們的項目總體進展比較順利,本次中期檢查報告主要分爲兩部分:前期工作總結和後期展望。

一、前期工作總結

項目前期我們的工作主要是圍繞“基於spark的流式廣義線性模型算法實現”這個目標去做的。萬事開頭難,要實現算法,必須首先得搭建開發環境。

1、搭建基於linux和windows的spark和scala的開發環境

由於在windows上有支持Scala語言的scala-IDE這個軟件,編程非常清晰和方便,如下圖所示。


另外,由於基於spark庫的程序在linux上運行起來更方便,通過spark-submit這個應用就可以運行基於spark的程序,還可以方便地修改配置參數,因此我們在linux機器上也裝好了scala語言和spark的開發環境(詳見博文“基於linux的spark與scala開發環境搭建”)。

1、學習scala語言和運行spark程序

由於剛開始接觸scala語言,對其並不是很熟悉,熟悉一種語言的最好的辦法當然是看它的源代碼並且運行程序。

我們通過對spark1.0.0版本的一些簡單例程的學習,如單詞統計(如下圖)、計算π等例子,慢慢熟悉並掌握了Scala語言的基本的函數式編程技巧和代碼風格。

目前我們開發基於spark程序的方法是現在scalaIDE這個軟件中寫好scala的代碼,並導出爲jar文件,然後將jar文件上傳到linux環境下,通過spark-submit命令加上其他一些參數來執行和測試我們的程序(如下圖所示爲測試單詞統計程序的linux命令)。


3、學習廣義線性模型和仿真

在對流式學習廣義線性模型這個算法編程前,我們先仔細學習了廣義線性模型主要包含了線性模型、logistic模型、嶺迴歸、Lasso等幾種模型,並充分認識到要進行流式機器學習必然要用到隨機梯度下降算法,因此在進行scala編程前,我們先對算法理論推導進行了充分的分析並基於python進行了算法的仿真分析(詳見博文“基於python的在線學習logistic迴歸”)。

4、基於spark streaming的logistic迴歸

在前面做好了充分的準備後,我們將算法基於scala語言進行了編寫和測試,主要在spark streaming這部分測試的時候碰到了一些問題,因爲spark streaming運行的時候是每隔幾秒鐘接收一定的數據,並進行模型的訓練和更新,這裏就必須區分在代碼中哪些數據是需要每次學習更新的,哪些數據是需要保留下來爲下次模型更新做準備的。在經過一段時間的調試和測試後,我們將流式的logistic模型代碼調試成功(詳見博文“基於spark_streaming的logistic流式機器學習”)。

5、基於spark streaming的線性最小二乘和嶺迴歸

我們在logistic迴歸的基礎上,對代碼中計算梯度的部分稍作修改,即可得到基於spark streaming的線性最小二乘和嶺迴歸。因爲logistic迴歸,線性最小二乘,嶺迴歸,都屬於廣義線性模型,在代碼上它們的結構總體一致,只是在梯度下降時計算梯度有所不同,因此我們可以複用大部分的Logistic迴歸的代碼。具體的模型介紹和算法結果將在下一次博客更新中介紹。

6、對spark和scala進一步學習和提高

在完成流式的logistic機器學習代碼後,我們與導師進行了充分的溝通,導師對我們的工作表示了認可,同時也對我們工作的不足之處提出了詳細的意見。我們系統地將scala語言學習了一遍並且對spark執行的機制有了更深刻的認識。(詳見博文“對spark和scala的進一步學習”)。


二、後期工作展望

很快就進入了8月份,我們的項目今後該走向何方,我們再此做出一個小小的展望。

1、完成廣義線性模型的流式機器學習算法

有了前面的基礎,我們認爲我們可以較快地完成廣義線性模型的其他幾個算法的流式機器學習代碼的撰寫(主要是lasso,因爲它使用了L1的正則項,無法直接計算梯度,因此需要用Huber Function進行平滑,具體我們將在下一次博客更新中給出),並調整代碼風格,爭取提交給spark的開發小組。

2、完成基於spark streaming的在線PCA

我們打算利用spark提供的RowMatrix類中已經提供的各種矩陣運算,完成在線的PCA算法,可以將其利用到人臉識別上。

3、完成基於協同過濾算法的簡易推薦系統

經過我們充分調研,我們認爲基於協同過濾算法的推薦系統是非常適合基於spark進行流式機器學習的,因此我們希望在這個方向做出自己一點小小的貢獻。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章