【Scala-ML】如何利用Scala構(gòu)建并行機器學習系統(tǒng)

引言

在學習Scala的過程中奈应,我發(fā)現(xiàn)其在構(gòu)建大規(guī)模分布式計算系統(tǒng)上有與生俱來的特質(zhì)。其豐富的類型系統(tǒng)可以幫助編程設(shè)計提供很好的信息隱藏和抽象悼吱,其monoids和monads概念利用Scala高階函數(shù)實現(xiàn)計算并行和數(shù)據(jù)處理流水線,其Actor系統(tǒng)幫助編寫可伸縮性的應(yīng)用程序,其實現(xiàn)特定領(lǐng)域語言的優(yōu)勢幫助開發(fā)用戶很好克服不同語言的障礙圃泡。
雖然以上Scala優(yōu)點說起來不會感同身受,但這可以作為我學習的一大動力愿险,讓我開始嘗試編寫并行機器學習系統(tǒng)颇蜡。
在學習過程中,我主要參考《Scala for Machine Learning》一書和相關(guān)網(wǎng)上的資料辆亏。希望這些分享能幫助自己學習风秤,也更好的服務(wù)有興趣的讀者。

為何使用Scala構(gòu)建機器學習系統(tǒng)

抽象

Monoids和Monads是函數(shù)式編程的重要概念扮叨。
Monoids定義了在具有閉包性質(zhì)(property of closure)的數(shù)據(jù)集上的二元操作op缤弦,恒等操作(identity operation)和結(jié)合性(associativity)。
下面是代碼描述:

trait Monoid[T] {
  def zero: T
  def op(a: T, b: T): T
}

Monoids具有結(jié)合性的操作甫匹。假設(shè)ts1甸鸟、ts2、ts3是三個時間序列兵迅,該性質(zhì)保證ts1+(ts2+ts3) = (ts1+ts2)+ts3抢韭。Monoid的結(jié)合性對于計算流的并行化是很關(guān)鍵的。

Monads可以被認為是容器的結(jié)構(gòu)恍箭,它是Monoids的推廣刻恭。像是Scala標準庫中的List,Map等集合被設(shè)計成monads的結(jié)構(gòu)扯夭。
Monads提供了以下的功能:1. 創(chuàng)建集合鳍贾; 2. 對集合的元素進行轉(zhuǎn)換; 3. 壓平嵌套的集合交洗。
下面是Scala代碼描述:

trait Monad[M[_]] {
  def apply[T](a: T): M[T]
  def flatMap[T, U](m: M[T])(f: T=>M[U]): M[U]
}

Monads允許集合或者容器連接起來產(chǎn)生一個工作流骑科,該性質(zhì)可以應(yīng)用在任何科學計算中。

可擴展性

Actors系統(tǒng)使得Scala編程變得可伸縮构拳、可擴展咆爽。Actors作為協(xié)程(coroutines),通過異步消息進行通信置森,管理底層的線程池斗埂。
機器學習的工作流被實現(xiàn)成一系列的計算任務(wù),這些任務(wù)包含了Scala的高階方法(如flatMap,map,fold,reduce,collect,join,filter)對數(shù)據(jù)集合的操作凫海,Scala允許actors集群對這些數(shù)據(jù)進行分割來完成計算任務(wù)呛凶。Scala還支持本地或遠程的actor之間進行消息分發(fā)和消息路由。



上圖中行贪,主節(jié)點作為控制器漾稀,管理和調(diào)度四步任務(wù)模闲。這些具體的任務(wù)通過Scala的actors實現(xiàn)的多個工作節(jié)點執(zhí)行。主節(jié)點通過和工作節(jié)點交換消息來管理工作流的執(zhí)行狀態(tài)县好,負責可靠性围橡。通過監(jiān)督actors的層次結(jié)構(gòu)來實現(xiàn)計算任務(wù)的高可用性。

可配置性

Scala支持依賴注入(dependency injection)缕贡,通過抽象變量(abstract variables)翁授、自引用成分(self-referenced composition)和可堆疊的特質(zhì)(stackable traits)的組合來實現(xiàn)。最常用的依賴注入的模式成為cake pattern晾咪,該模式在構(gòu)建動態(tài)計算工作流中經(jīng)常用到收擦。

可維護性

Scala內(nèi)嵌了領(lǐng)域?qū)S谜Z言(Domain Specific Languages,DSL)谍倦。DSLs是在Scala原生庫上建立的語法層塞赂,DSLs允許軟件開發(fā)者抽象計算細節(jié),更好讓使用者理解昼蛀。DSLs最有名的應(yīng)用案例就是在Matlab中的語法形式宴猾。

計算工作流


一個計算工作流(computational workflow)可以分為以下幾個步驟:

  1. 從文件或數(shù)據(jù)庫中載入數(shù)據(jù)集
  2. 將數(shù)據(jù)集進行分割,用于并行的數(shù)據(jù)處理
  3. 運用過濾技術(shù)叼旋、方差分析等進行數(shù)據(jù)預(yù)處理
  4. 應(yīng)用機器學習模型

在使用訓練數(shù)據(jù)進行分析的過程還需要一些具體的處理:

  • 從清洗的輸入數(shù)據(jù)中選擇訓練集仇哆、測試集、驗證集
  • 抽取關(guān)鍵特征夫植、利用聚類技術(shù)從一組相似觀測中簡歷親近關(guān)系
  • 減少特征數(shù)量讹剔,避免訓練數(shù)據(jù)過擬合
  • 重復(fù)進行多次上述步驟來驗證模型和調(diào)整模型
  • 將模型進行持久化,用于新觀測數(shù)據(jù)的預(yù)測和處理
  1. 評估模型表現(xiàn)

轉(zhuǎn)載請注明作者Jason Ding及其出處
Github博客主頁(http://jasonding1354.github.io/)
GitCafe博客主頁(http://jasonding1354.gitcafe.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.reibang.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354進入我的博客主頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末详民,一起剝皮案震驚了整個濱河市延欠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沈跨,老刑警劉巖由捎,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饿凛,居然都是意外死亡隅俘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門笤喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碌宴,你說我怎么就攤上這事杀狡。” “怎么了贰镣?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵呜象,是天一觀的道長膳凝。 經(jīng)常有香客問我,道長恭陡,這世上最難降的妖魔是什么蹬音? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮休玩,結(jié)果婚禮上著淆,老公的妹妹穿的比我還像新娘。我一直安慰自己拴疤,他們只是感情好永部,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呐矾,像睡著了一般苔埋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜒犯,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天组橄,我揣著相機與錄音,去河邊找鬼罚随。 笑死玉工,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的毫炉。 我是一名探鬼主播瓮栗,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞄勾!你這毒婦竟也來了费奸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤进陡,失蹤者是張志新(化名)和其女友劉穎愿阐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾疚,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡缨历,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糙麦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛孵。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赡磅,靈堂內(nèi)的尸體忽然破棺而出魄缚,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布冶匹,位于F島的核電站习劫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嚼隘。R本人自食惡果不足惜诽里,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望飞蛹。 院中可真熱鬧谤狡,春花似錦、人聲如沸桩皿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泄隔。三九已至拒贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佛嬉,已是汗流浹背逻澳。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暖呕,地道東北人斜做。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像湾揽,于是被迫代替她去往敵國和親瓤逼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容