成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

輕量級(jí)大規(guī)模機(jī)器學(xué)習(xí)算法庫(kù)Fregata開(kāi)源:快速,無(wú)需調(diào)參

大數(shù)據(jù) 算法
隨著互聯(lián)網(wǎng),移動(dòng)互聯(lián)網(wǎng)的興起,可以獲取的數(shù)據(jù)變得越來(lái)越多,也越來(lái)越豐富。數(shù)據(jù)資源的豐富,給機(jī)器學(xué)習(xí)帶來(lái)了越來(lái)越多,越來(lái)越大創(chuàng)造價(jià)值的機(jī)會(huì)。 機(jī)器學(xué)習(xí)在計(jì)算廣告,推薦系統(tǒng)這些價(jià)值上千億美元的應(yīng)用中起到的作用越來(lái)越大,創(chuàng)造的價(jià)值也越來(lái)越大。

一. 大規(guī)模機(jī)器學(xué)習(xí)的挑戰(zhàn)

隨著互聯(lián)網(wǎng),移動(dòng)互聯(lián)網(wǎng)的興起,可以獲取的數(shù)據(jù)變得越來(lái)越多,也越來(lái)越豐富。數(shù)據(jù)資源的豐富,給機(jī)器學(xué)習(xí)帶來(lái)了越來(lái)越多,越來(lái)越大創(chuàng)造價(jià)值的機(jī)會(huì)。 機(jī)器學(xué)習(xí)在計(jì)算廣告,推薦系統(tǒng)這些價(jià)值上千億美元的應(yīng)用中起到的作用越來(lái)越大,創(chuàng)造的價(jià)值也越來(lái)越大。但是越來(lái)越大的數(shù)據(jù)規(guī)模也給機(jī)器學(xué)習(xí)帶來(lái)了很多挑戰(zhàn)。

[[178537]]

最大的挑戰(zhàn)就是龐大的數(shù)據(jù)量使得對(duì)計(jì)算資源的需求也急劇增長(zhǎng)。首先經(jīng)典的機(jī)器學(xué)習(xí)算法其計(jì)算量基本上都是與訓(xùn)練數(shù)據(jù)條數(shù)或者特征數(shù)量呈二次方甚至是三次方關(guān)系的[1]。即是說(shuō)數(shù)據(jù)量或者特征數(shù)每翻一倍,則計(jì)算量就要增加到原來(lái)的四倍,甚至是八倍。這樣的計(jì)算量增長(zhǎng)是十分可怕的,即使是采用可擴(kuò)展的計(jì)算機(jī)集群一難以滿(mǎn)足這樣的計(jì)算量增長(zhǎng)。好在對(duì)于很多依賴(lài)于凸優(yōu)化方法的算法,可以采用隨機(jī)梯度下降方法,將計(jì)算量的增長(zhǎng)降到基本與數(shù)據(jù)量和特征數(shù)呈線(xiàn)性關(guān)系。但是,大規(guī)模機(jī)器學(xué)習(xí)在計(jì)算上依然有三個(gè)比較大的困難。

第一,因?yàn)閹缀跛械臋C(jī)器學(xué)習(xí)算法都需要多次掃描數(shù)據(jù),對(duì)于大規(guī)模數(shù)據(jù)無(wú)論在什么平臺(tái)上,如果不能全部存儲(chǔ)在內(nèi)存中,就需要反復(fù)從磁盤(pán)存儲(chǔ)系統(tǒng)中讀取數(shù)據(jù),帶來(lái)巨大的IO開(kāi)銷(xiāo)。在很多情況下,IO開(kāi)銷(xiāo)占到整個(gè)訓(xùn)練時(shí)間的90%以上。

第二,即使有足夠的資源將所有數(shù)據(jù)都放到內(nèi)存中處理,對(duì)于分布式的計(jì)算系統(tǒng),模型訓(xùn)練過(guò)程中對(duì)模型更新需要大量的網(wǎng)絡(luò)通信開(kāi)銷(xiāo)。無(wú)論是同步更新還是異步更新,龐大的數(shù)據(jù)量和特征數(shù)都足以使得通信量爆炸,這是大規(guī)模機(jī)器學(xué)習(xí)的另外一個(gè)瓶頸。

第三,大規(guī)模的模型使得無(wú)法在一個(gè)節(jié)點(diǎn)上存儲(chǔ)整個(gè)模型,如何將模型進(jìn)行分布式的管理也是一個(gè)比較大的挑戰(zhàn)。 

 

 

 

圖 1

目前的主流大數(shù)據(jù)處理技術(shù)都是以Map Reduce計(jì)算模式為核心的(包括Hadoop和Spark)。而Map Reduce計(jì)算模式下對(duì)第一個(gè)問(wèn)題只能通過(guò)增加內(nèi)存,SSD存儲(chǔ)來(lái)解決或者緩解,但同時(shí)也需要付出高昂的成本。對(duì)于第二,和第三個(gè)個(gè)問(wèn)題,Map Reduce模式的局限是很難克服這兩個(gè)問(wèn)題的。

而Parameter Server[2]作為目前最新的大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)模式,主要解決的其實(shí)是第三個(gè)問(wèn)題,通過(guò)參數(shù)服務(wù)器以及模型參數(shù)的分布式管理來(lái)實(shí)現(xiàn)對(duì)超大規(guī)模模型的支持。同時(shí)在模型更新過(guò)程中的通信模式可以采用異步更新模式,來(lái)減小數(shù)據(jù)同步的開(kāi)銷(xiāo),提高通信效率,但是Parameter Server模式下模型的更新量計(jì)算和模型的更新是分離的,其龐大的通信開(kāi)銷(xiāo)在原理上就是不可避免的。幸運(yùn)的是,常見(jiàn)的大規(guī)模機(jī)器學(xué)習(xí)問(wèn)題,都是高維稀疏問(wèn)題,在很大程度上緩解了通信開(kāi)銷(xiāo)的問(wèn)題,而Parameter Server突破了模型規(guī)模限制的優(yōu)點(diǎn)是Map Reduce模式無(wú)法取代的,所以Parameter Server成為了目前大規(guī)模機(jī)器學(xué)習(xí)最先進(jìn),最受認(rèn)可的模式。 

 

 

 

圖 2

雖然Parameter Server解決了模型分布式管理的瓶頸,異步通信模式和問(wèn)題本身的稀疏性大大降低了通信的壓力。 但是機(jī)器學(xué)習(xí)算法本身對(duì)數(shù)據(jù)的多次掃描帶來(lái)的計(jì)算和通信開(kāi)銷(xiāo)依然是大規(guī)模機(jī)器學(xué)習(xí)效率的很大瓶頸。

除此之外還有一個(gè)很大的挑戰(zhàn)就是算法的調(diào)參工作, 一般機(jī)器學(xué)習(xí)算法都會(huì)依賴(lài)一個(gè)或者多個(gè)參數(shù),對(duì)于同一問(wèn)題,不同的參數(shù)設(shè)定對(duì)模型精度的影響是很大的,而同一參數(shù)設(shè)定在不同的問(wèn)題上的效果也有很大的不同。對(duì)于從事機(jī)器學(xué)習(xí)工作的人來(lái)說(shuō),調(diào)參始終是一個(gè)令人的頭疼的問(wèn)題。知乎上有個(gè)問(wèn)題是“調(diào)參這事兒,為什么越干越覺(jué)得像老中醫(yī)看病?”[3],里面有不少關(guān)于機(jī)器學(xué)習(xí)調(diào)參的經(jīng)驗(yàn),心得,吐槽和抖機(jī)靈。

對(duì)于大規(guī)模機(jī)器學(xué)習(xí)問(wèn)題,調(diào)參的難度顯然是更大的:

首先,一次訓(xùn)練和測(cè)試過(guò)程的時(shí)間和計(jì)算資源開(kāi)銷(xiāo)都是龐大的,不管采用什么調(diào)參方法,多次實(shí)驗(yàn)都會(huì)帶來(lái)很大的時(shí)間和計(jì)算資源消耗。

其次,大規(guī)模機(jī)器學(xué)習(xí)問(wèn)題通常都是數(shù)據(jù)變化很快的問(wèn)題,如計(jì)算廣告和推薦系統(tǒng),之前確定好的參數(shù)在隨著數(shù)據(jù)的變化,也有劣化的風(fēng)險(xiǎn)。

目前來(lái)說(shuō)大規(guī)模機(jī)器學(xué)習(xí)存在的主要挑戰(zhàn)是兩個(gè):第一是計(jì)算資源的消耗比較大,訓(xùn)練時(shí)間較長(zhǎng)的問(wèn)題,第二是調(diào)參比較困難,效率較低。TalkingData在大規(guī)模機(jī)器學(xué)習(xí)的實(shí)踐中也深受這兩個(gè)問(wèn)題的困然,特別是公司在早起階段硬件資源十分有限,這兩個(gè)問(wèn)題特別突出。我們?yōu)榱私鉀Q這個(gè)問(wèn)題,做了很多努力和嘗試。TalkingData最近開(kāi)源的Fregata項(xiàng)目[4],就是我們?cè)谶@方面取得的一些成果的總結(jié)。

二. Fregata的優(yōu)點(diǎn)

Fregata是TalkingData開(kāi)源的大規(guī)模機(jī)器學(xué)習(xí)算法庫(kù),基于Spark,目前支持Spark 1.6.x, 很快會(huì)支持Spark 2.0。目前Fregata包括了Logistic Regression, Softmax, 和Random Decision Trees三中算法。

三種算法中Logistic Regression, Softmax可以看作一類(lèi)廣義線(xiàn)性的參數(shù)方法,其訓(xùn)練過(guò)程都依賴(lài)于凸優(yōu)化方法。我們提出了Greedy Step Averaging[5]優(yōu)化方法,在SGD優(yōu)化方法基礎(chǔ)上實(shí)現(xiàn)了學(xué)習(xí)率的自動(dòng)調(diào)整,免去了調(diào)參的困擾,大量的實(shí)驗(yàn)證明采用GSA 優(yōu)化方法的Logstic Regression和Softmax算法的收斂速度和穩(wěn)定性都是非常不錯(cuò)的,在不同數(shù)據(jù)規(guī)模,不同維度規(guī)模和不同稀疏度的問(wèn)題上都能取得很好的精度和收斂速度。

基于GSA優(yōu)化方法,我們?cè)赟park上實(shí)現(xiàn)了并行的Logistic Regression和Softmax算法,我們測(cè)試了很多公開(kāi)數(shù)據(jù)集和我們自己的數(shù)據(jù),發(fā)現(xiàn)在絕大部分?jǐn)?shù)據(jù)上都能夠掃描一遍數(shù)據(jù)即收斂。這就大大降低了IO開(kāi)銷(xiāo)和通信開(kāi)銷(xiāo)。

其中Logsitic Regression算法還有一個(gè)支持多組特征交叉的變種版本,其不同點(diǎn)是在訓(xùn)練過(guò)程中完成維度交叉,這樣就不需要在數(shù)據(jù)準(zhǔn)備過(guò)程中將多組特征維度預(yù)先交叉準(zhǔn)備好,通常這意味著數(shù)據(jù)量級(jí)上的數(shù)據(jù)量膨脹,給數(shù)據(jù)存儲(chǔ)和IO帶來(lái)極大壓力。而這種多組特征交叉的需求在計(jì)算廣告和推薦系統(tǒng)中又是非常常見(jiàn)的,因此我們對(duì)此做了特別的支持。

而Random Decision Trees[6][7]算法是高效的非參數(shù)學(xué)習(xí)方法,可以處理分類(lèi),多標(biāo)簽分類(lèi),回歸和多目標(biāo)回歸等問(wèn)題。而且調(diào)參相對(duì)也是比較簡(jiǎn)單的。但是由于樹(shù)結(jié)構(gòu)本身比較復(fù)雜而龐大,使得并行比較困難,我們采用了一些Hash Trick使得對(duì)于二值特征的數(shù)據(jù)可以做到掃描一遍即完成訓(xùn)練,并且在訓(xùn)練過(guò)程中對(duì)內(nèi)存消耗很少。

總結(jié)起來(lái),F(xiàn)regata的優(yōu)點(diǎn)就兩個(gè),第一是速度快,第二是算法無(wú)需調(diào)參或者調(diào)參相對(duì)簡(jiǎn)單。這兩個(gè)優(yōu)點(diǎn)降低了減少了計(jì)算資源的消耗,提高了效率,同時(shí)也降低了對(duì)機(jī)器學(xué)習(xí)工程師的要求,提高了他們的工作效率。

三. GSA算法介紹

GSA算法是我們最近提出的梯度型隨機(jī)優(yōu)化算法,是Fregata采用的核心優(yōu)化方法。它是基于隨機(jī)梯度下降法(SGD)的一種改進(jìn):保持了SGD易于實(shí)現(xiàn),內(nèi)存開(kāi)銷(xiāo)小,便于處理大規(guī)模訓(xùn)練樣本的優(yōu)勢(shì),同時(shí)免去了SGD不得不人為調(diào)整學(xué)習(xí)率參數(shù)的麻煩。

事實(shí)上,最近幾年關(guān)于SGD算法的步長(zhǎng)選取問(wèn)題也有一些相關(guān)工作,像Adagrad, Adadelta, Adam等。但這些方法所聲稱(chēng)的自適應(yīng)步長(zhǎng)策略其實(shí)是把算法對(duì)學(xué)習(xí)率的敏感轉(zhuǎn)移到了其他參數(shù)上面,并未從本質(zhì)上解決調(diào)參的問(wèn)題,而且他們也引入了額外的存儲(chǔ)開(kāi)銷(xiāo)。GSA和這些算法相比更加輕量級(jí),易于實(shí)現(xiàn)且易于并行,比起SGD沒(méi)有額外的內(nèi)存開(kāi)銷(xiāo),而且真正做到了不依賴(lài)任何參數(shù)。 

 

 

 

我們把GSA算法應(yīng)用于Logistic回歸和Softmax回歸,對(duì)libsvm上16個(gè)不同類(lèi)型規(guī)模不等的數(shù)據(jù)集,和SGD,Adadelta,SCSG(SVRG的變種)這些目前流行的隨機(jī)優(yōu)化算法做了對(duì)比實(shí)驗(yàn)。結(jié)果顯示,GSA算法在無(wú)需調(diào)任何參數(shù)的情況下,和其他算法做參數(shù)調(diào)優(yōu)后的最佳表現(xiàn)不相上下。此外,GSA比起這些流行的方法在計(jì)算速度和內(nèi)存開(kāi)銷(xiāo)方面也有一定的優(yōu)勢(shì)。

GSA算法的核心原理非常簡(jiǎn)單:在迭代的每一步對(duì)單個(gè)樣本的損失函數(shù)做線(xiàn)搜索。具體來(lái)說(shuō),我們對(duì)邏輯回歸和softmax回歸的交叉熵?fù)p失函數(shù),推導(dǎo)出了一套僅用當(dāng)前樣本點(diǎn)的梯度信息來(lái)計(jì)算精確線(xiàn)搜索步長(zhǎng)的近似公式。我們把利用這套近似公式得到的步長(zhǎng)做時(shí)間平均來(lái)計(jì)算當(dāng)前迭代步的學(xué)習(xí)率。這樣做有兩方面的好處:基于精確線(xiàn)搜索得到的步長(zhǎng)包含了當(dāng)前迭代點(diǎn)到全局極小的距離信息——接近收斂時(shí)步長(zhǎng)比較小,反之則更大,因而保證收斂速度;另一方面平均策略使算法對(duì)離群點(diǎn)更魯棒,損失下降曲線(xiàn)不至劇烈抖動(dòng),為算法帶來(lái)了額外的穩(wěn)定性。

四. GSA算法Spark上的并行化實(shí)現(xiàn)

GSA算法是基本的優(yōu)化方法,在Spark上還需要考慮算法并行化的問(wèn)題。機(jī)器學(xué)習(xí)算法的并行化有兩種方式,一種是數(shù)據(jù)并行,另一種是模型并行。但是Spark只能支持?jǐn)?shù)據(jù)并行,因?yàn)槟P筒⑿袝?huì)產(chǎn)生大量細(xì)粒度的節(jié)點(diǎn)間通信開(kāi)銷(xiāo),這是Spark采用的BSP同步模式無(wú)法高效處理的。

數(shù)據(jù)并行模式下進(jìn)行機(jī)器學(xué)習(xí)算法的并行化又有三種方法,分別是梯度平均,模型平均,以及結(jié)果平均。梯度平均是在各個(gè)數(shù)據(jù)分片上計(jì)算當(dāng)前的梯度更新量然后匯總平均各分片上的梯度更新量總體更新模型。模型平均是各分片訓(xùn)練自己的模型,然后再將模型匯總平均獲得一個(gè)總體的模型。而結(jié)果平均實(shí)際上就是Ensemble Learning, 在大規(guī)模問(wèn)題上因?yàn)槟P鸵?guī)模的問(wèn)題,并不是一個(gè)好的選擇。

實(shí)際上是目前采用得最多的是梯度平均,當(dāng)前Parameter Server各種實(shí)現(xiàn)上主要還是用來(lái)支持這種方式,Spark MLLib的算法實(shí)現(xiàn)也是采用的該方式。但是在Spark上采用梯度平均在效率上也有比較大的瓶頸,因該方法計(jì)算當(dāng)前的梯度更新量是要依賴(lài)于當(dāng)前的最新模型的,這就帶來(lái)了在各數(shù)據(jù)分片之間頻繁的模型同步開(kāi)銷(xiāo),這對(duì)Map Reuce計(jì)算模式的壓力是較大的。

模型平均一直被認(rèn)為其收斂性在理論上是沒(méi)有保證的,但是最近Rosenblatt[8]等人證明了模型平均的收斂性。而我們?cè)诖罅康臏y(cè)試中,也發(fā)現(xiàn)模型平均通常能取得非常好的模型精度。考慮到模型平均的計(jì)算模式更適合Map Reduce計(jì)算模型,我們?cè)贔regata中對(duì)于GSA算法的并行方法采用的就是模型平均方法。模型平均的并行方法中,每個(gè)數(shù)據(jù)分片在Map階段訓(xùn)練自己的模型,最后通過(guò)Reduce操作對(duì)各個(gè)分片上的模型進(jìn)行平均,掃描一次數(shù)據(jù)僅需要做一次模型同步。而且在大量的實(shí)驗(yàn)中,該方法在掃描一次數(shù)據(jù)后,模型的精度就可達(dá)到很高的水平,基本接近于更多次迭代后的最好結(jié)果。

五. Fregata與MLLib對(duì)比

Fregata是基于Spark的機(jī)器學(xué)習(xí)算法庫(kù),因此與Spark內(nèi)置算法庫(kù)MLLib具有很高的可比性。我們這里簡(jiǎn)要介紹了三個(gè)數(shù)據(jù)集,兩種算法(Logistic Regression和Softmax)上的精度和訓(xùn)練時(shí)間對(duì)比。精度指標(biāo)我們采用的是測(cè)試集的AUC。對(duì)于精度和訓(xùn)練時(shí)間,算法每掃描完一次數(shù)據(jù)記錄一次。

Fregata的算法不需要調(diào)參,因此我們都只做了一次實(shí)驗(yàn)。而對(duì)于MLLib上的算法,我們?cè)诟鞣N參數(shù)組合(包括優(yōu)化方法的選擇)中進(jìn)行了網(wǎng)格搜索,選取了測(cè)試集AUC能達(dá)到最高的那組參數(shù)作為對(duì)比結(jié)果。

Lookalike是一個(gè)基于Fregata平臺(tái)運(yùn)用比較成熟的服務(wù),其目標(biāo)在于根據(jù)種子人群進(jìn)行人群放大以尋找潛在客戶(hù)。我們將Lookalike作為二分類(lèi)問(wèn)題來(lái)處理,因此可以采用Logistic Regression算法來(lái)處理。在訓(xùn)練模型時(shí)以種子人群為正樣本,其他為負(fù)樣本,通常種子人群的數(shù)量不會(huì)很多,因此Lookalike通常是正樣本比例非常少的class imblance問(wèn)題。 在一個(gè)大規(guī)模數(shù)據(jù)集(4億樣本,2千萬(wàn)個(gè)特征)上的Lookalike問(wèn)題的模型訓(xùn)練中,我們對(duì)比了Fregata LR和MLLib LR的性能。 

 

 

 

從圖4中可以看到Fregata的LR算法掃描一次數(shù)據(jù)即收斂達(dá)到AUC(測(cè)試集上)的最高值0.93。在這個(gè)數(shù)據(jù)樣本中 而MLLib的LR算法,即使我們通過(guò)調(diào)參選取了最好的AUC結(jié)果,其AUC也僅為0.55左右。模型預(yù)測(cè)精度差別非常大。另外,MLLib的訓(xùn)練時(shí)間(達(dá)到最高精度的時(shí)間)也是Fregata大的6倍以上。

在公開(kāi)數(shù)據(jù)集eplison[9]上(40萬(wàn)訓(xùn)練集,2000特征), Fregata LR無(wú)論從收斂速度還是模型效果與MLLib LR相比也有較大的優(yōu)勢(shì)。從圖5中可以看到,在這個(gè)數(shù)據(jù)集上Fregata LR在迭代一次以后就在測(cè)試集上非常接近最好的結(jié)果了,而MLLib LR需要5次迭代而且最高的精度比Fregata LR相差很大,而訓(xùn)練時(shí)間MLLib LR也是Fregata LR的5倍以上。 

 

 

另外圖6展示了Fregata LR與MLLib LR在6個(gè)不同問(wèn)題上的測(cè)試集AUC曲線(xiàn),可以看到Fregata LR算法在不同問(wèn)題上收斂速度和穩(wěn)定性相較于MLLib LR都是有較大的優(yōu)勢(shì)。Fregata LR在第一次迭代后,AUC就已經(jīng)基本收斂,即使與最高值還有一些差距,但是也是非常接近了。

我們也在公開(kāi)數(shù)據(jù)集MNIST上測(cè)試了Softmax算法。 從圖7中可以看到, Fregata Softmax也是一次掃描數(shù)據(jù)后在測(cè)試集上的AUC就非常接近最好的結(jié)果, 而MLLib Softmax需要掃描數(shù)據(jù)多達(dá)40多次以后才接近Fregata Softmax一次掃描數(shù)據(jù)的結(jié)果。對(duì)比兩個(gè)算法在達(dá)到各自最優(yōu)結(jié)果所花的時(shí)間,MLLib Softmax是Fregata Softmax的50倍以上。 

 

 

六. Fregata的使用簡(jiǎn)介

前面簡(jiǎn)要介紹了Fregata算法庫(kù)涉及到的一些技術(shù)原理和性能對(duì)比,我們?cè)賮?lái)看看Fregata的使用方式。可以通過(guò)3種不同的方式來(lái)獲取Fregata如果使用Maven來(lái)管理工程,則可以通過(guò)添加如下代碼在pom.xml中進(jìn)行引入, 

  1. <dependency> 
  2.      <groupId>com.talkingdata.fregata</groupId> 
  3.       <artifactId>core</artifactId> 
  4.       <version>0.0.1</version> 
  5.   </dependency> 
  6.   <dependency> 
  7.       <groupId>com.talkingdata.fregata</groupId> 
  8.       <artifactId>spark</artifactId> 
  9.       <version>0.0.1</version> 
  10.   </dependency>  

如果使用SBT來(lái)管理工程,則可以通過(guò)如下代碼在build.sbt中進(jìn)行引入,

  1. // 如果手動(dòng)部署到本地maven倉(cāng)庫(kù),請(qǐng)將下行注釋打開(kāi) 
  2.     // resolvers += Resolver.mavenLocal 
  3.     libraryDependencies += "com.talkingdata.fregata" % "core" % "0.0.1" 
  4.     libraryDependencies += "com.talkingdata.fregata" % "spark" % "0.0.1"  

如果希望手動(dòng)部署到本地maven倉(cāng)庫(kù),可以通過(guò)在命令中執(zhí)行如下命令來(lái)完成: 

  1. git clone https://github.com/TalkingData/Fregata.git 
  2. cd Fregata 
  3. mvn clean package install  

接下來(lái),讓我們以L(fǎng)ogistic Regression為例來(lái)看看如何快速使用Fregata完成分類(lèi)任務(wù):

1.引入所需包

  1. import fregata.spark.data.LibSvmReader 
  2. import fregata.spark.metrics.classification.{AreaUnderRoc, Accuracy} 
  3. import fregata.spark.model.classification.LogisticRegression 
  4. import org.apache.spark.{SparkConf, SparkContext}  

2. 通過(guò)Fregata的LibSvmReader接口加載訓(xùn)練及測(cè)試數(shù)據(jù)集,訓(xùn)練及測(cè)試數(shù)據(jù)集為標(biāo)準(zhǔn)LibSvm格式,可參照[10] 

  1. val (_, trainData)  = LibSvmReader.read(sc, trainPath, numFeatures.toInt) 
  2. val (_, testData)  = LibSvmReader.read(sc, testPath, numFeatures.toInt)  

3. 針對(duì)訓(xùn)練樣本訓(xùn)練Logsitic Regression 模型

  1. val model = LogisticRegression.run(trainData) 

4. 基于已經(jīng)訓(xùn)練完畢的模型對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè)

  1. val pd = model.classPredict(testData) 

5. 通過(guò)Fregata內(nèi)置指標(biāo)評(píng)價(jià)模型效果

  1. val auc = AreaUnderRoc.of( pd.map{ 
  2.     case ((x,l),(p,c)) => 
  3.       p -> l 
  4.   })  

在Fregata中,使用breeze.linalg.Vector[Double]來(lái)存儲(chǔ)一個(gè)樣本的特征,如果數(shù)據(jù)格式已經(jīng)是LibSvm,則只需通過(guò)Fregata內(nèi)部的接口LibSvmReader.read(…)來(lái)加載即可。否則,可以采用如下的方法將代表實(shí)例的一組數(shù)據(jù)封裝成breeze.linalg.Vector[Double]即可放入模型中進(jìn)行訓(xùn)練及測(cè)試。

  1. // indices  Array類(lèi)型,下標(biāo)從0開(kāi)始,保存不為0的數(shù)據(jù)下標(biāo) 
  2. // values  Array類(lèi)型, 保存相應(yīng)于indices中對(duì)應(yīng)下標(biāo)的數(shù)據(jù)值 
  3. // length  Int類(lèi)型,為樣本總特征數(shù) 
  4. // label   Double類(lèi)型,為樣本的標(biāo)簽。如果是測(cè)試數(shù)據(jù),則不需該字段 
  5. sc.textFile(input).map{ 
  6. val indicies  = ... 
  7. val values   = ... 
  8. val label    = ... 
  9. ... 
  10. (new SparseVector(indices, values, length).asInstanceOf[Vector], asNum(label)) 
  11.  

七. Freagata的發(fā)展目標(biāo)

Fregata目前集成的算法還不多,未來(lái)還會(huì)繼續(xù)擴(kuò)充更多的高效的大規(guī)模機(jī)器學(xué)習(xí)算法。Fregata項(xiàng)目追求的目標(biāo)有3個(gè):輕量級(jí),高性能,易使用。

輕量級(jí)是指Fregata將盡可能在標(biāo)準(zhǔn)Spark版本上實(shí)現(xiàn)算法,不另外搭建計(jì)算系統(tǒng),使得Fregata能夠非常容易的在標(biāo)準(zhǔn)Spark版本上使用。雖然Spark有一些固有的限制,比如對(duì)模型規(guī)模的限制,但是作為目前大數(shù)據(jù)處理的基礎(chǔ)工具,F(xiàn)regata對(duì)其的支持能夠大大降低大規(guī)模機(jī)器學(xué)習(xí)的應(yīng)用門(mén)檻。畢竟另外搭建一套專(zhuān)用大規(guī)模機(jī)器學(xué)習(xí)計(jì)算平臺(tái),并整合到整個(gè)大數(shù)據(jù)處理平臺(tái)和流程中,其成本和復(fù)雜性也是不可忽視的。

高性能就是堅(jiān)持高精度和高效率并舉的目標(biāo),盡可能從算法上和工程實(shí)現(xiàn)上將算法的精度和效率推到極致,使得大規(guī)模機(jī)器學(xué)習(xí)算法從笨重的牛刀變成輕快的匕首。目前對(duì)Fregata一個(gè)比較大的限制就是模型規(guī)模的問(wèn)題,這是基于Spark天生帶來(lái)的劣勢(shì)。未來(lái)會(huì)采用一些模型壓縮的方法來(lái)緩解這個(gè)問(wèn)題。

易使用也是Fregata追求的一個(gè)目標(biāo),其中最重要的一點(diǎn)就是降低調(diào)參的難度。目前的三個(gè)算法中有兩個(gè)是免調(diào)參的,另一個(gè)也是相對(duì)來(lái)說(shuō)調(diào)參比較友好的算法。降低了調(diào)參的難度,甚至是免去了調(diào)參的問(wèn)題,將大大降低模型應(yīng)用的難度和成本,提高工作效率。

另一方面我們也會(huì)考慮某些常用場(chǎng)景下的特殊需求,比如LR算法的特征交叉需求。雖然通用的LR算法效率已經(jīng)很高,但是對(duì)于特征交叉這種常見(jiàn)需求,如果不把特征交叉這個(gè)過(guò)程耦合到算法中去,就需要預(yù)先將特征交叉好,這會(huì)帶來(lái)巨大的IO開(kāi)銷(xiāo)。而算法實(shí)現(xiàn)了對(duì)特征交叉的支持,就規(guī)避了這個(gè)效率瓶頸。未來(lái)在集成更多的算法的同時(shí),也會(huì)考慮各種常用的場(chǎng)景需要特殊處理的方式。

Fregata項(xiàng)目名稱(chēng)的中文是軍艦鳥(niǎo),TalkingData的開(kāi)源項(xiàng)目命名都是用的鳥(niǎo)名,而軍艦鳥(niǎo)是世界上飛得最快的鳥(niǎo),最高時(shí)速達(dá)到418km/小時(shí),體重最大1.5公斤,而翼展能夠達(dá)到2.3米,在全球分布也很廣泛。我們希望Fregata項(xiàng)目能夠像軍艦鳥(niǎo)一樣,體量輕盈,但是能夠支持大規(guī)模,高效的機(jī)器學(xué)習(xí),而且具有很強(qiáng)的適用性。目前Fregata還是只雛鳥(niǎo), 期望未來(lái)能夠成長(zhǎng)為一只展翅翱翔的猛禽。

引用

[1] Cheng T. Chu, Sang K. Kim, Yi A. Lin, Yuanyuan Yu, Gary R. Bradski, Andrew Y. Ng, Kunle Olukotun, Map-Reduce for Machine Learning on Multicore, NIPS, 2006.

[2]

[3] https://www.zhihu.com/question/48282030

[4] https://github.com/TalkingData/Fregata

[5] http://arxiv.org/abs/1611.03608

[6] http://www.ibm.com/developerworks/cn/analytics/library/ba-1603-random-decisiontree-algorithm-1/index.html

[7] http://www.ibm.com/developerworks/cn/analytics/library/ba-1603-random-decisiontree-algorithm-2/index.html

[8] Rosenblatt J D, Nadler B. On the optimality of averaging in distributed statistical learning[J]. Information and Inference, 2016: iaw013 MLA

[9] https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#epsilon

[10] https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/

作者介紹

張夏天:TalkingData首席數(shù)據(jù)科學(xué)家,12年大規(guī)模機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘經(jīng)驗(yàn),對(duì)推薦系統(tǒng)、計(jì)算廣告、大規(guī)模機(jī)器學(xué)習(xí)算法并行化、流式機(jī)器學(xué)習(xí)算法有很深的造詣;在國(guó)際頂級(jí)會(huì)議和期刊上發(fā)表論文12篇,申請(qǐng)專(zhuān)利9項(xiàng);前IBM CRL、騰訊、華為諾亞方舟實(shí)驗(yàn)室數(shù)據(jù)科學(xué)家;KDD2015、DSS2016國(guó)際會(huì)議主題演講;機(jī)器學(xué)習(xí)開(kāi)源項(xiàng)目Dice創(chuàng)始人。

責(zé)任編輯:龐桂玉 來(lái)源: 大數(shù)據(jù)雜談
相關(guān)推薦

2016-02-25 09:31:02

2017-10-09 16:51:34

機(jī)器學(xué)習(xí)No Free Lun

2021-11-15 10:00:22

模型人工智能NLP

2017-11-06 10:15:36

機(jī)器學(xué)習(xí)框架Tensorflow

2019-05-07 14:42:03

深度學(xué)習(xí)編程人工智能

2020-11-16 08:54:05

Google 開(kāi)源技術(shù)

2020-03-31 20:57:50

負(fù)載均衡Web服務(wù)器開(kāi)源

2021-11-03 15:01:50

算法開(kāi)源技術(shù)

2019-03-10 20:55:11

瀏覽器Midori開(kāi)源

2019-04-07 16:30:54

開(kāi)源技術(shù) 軟件

2017-09-11 15:19:05

CoCoA機(jī)器學(xué)習(xí)分布式

2017-06-27 15:35:02

機(jī)器學(xué)習(xí)Spark微博應(yīng)用

2016-01-15 09:59:12

機(jī)器學(xué)習(xí)數(shù)據(jù)集

2023-06-27 16:42:18

Tinygrad深度學(xué)習(xí)工具

2022-06-01 09:28:43

??Umami??開(kāi)源

2025-06-09 10:08:00

KubernetesGo容器

2015-08-17 14:13:52

Ansible輕量自動(dòng)化部署工具

2022-09-05 09:37:38

Linux發(fā)行版

2020-08-04 14:18:56

算法開(kāi)源Github

2022-12-09 14:07:11

框架開(kāi)源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 特级毛片www| 亚洲在线一区 | 91av在线电影 | 国产黄色大片在线观看 | 日韩欧美网 | 女人精96xxx免费网站p | 97精品超碰一区二区三区 | 伊人免费视频二 | 欧美日韩在线免费 | 日日夜夜免费精品视频 | 欧美bondage紧缚视频 | 久久91精品 | 欧美中文一区 | 不卡一二三区 | 欧美男人天堂 | 欧美福利视频 | 国产精品一区二区电影 | 国产成人精品综合 | 久久亚洲国产 | 91高清免费观看 | 欧美美乳 | 欧美aaa级 | 亚洲久久一区 | 欧美一级片在线 | 蜜臀91视频 | 狠狠操狠狠搞 | 99精彩视频| 成人免费观看男女羞羞视频 | 中文字幕成人av | 91精品国产综合久久久亚洲 | 欧美一级黄色网 | 欧美一级欧美一级在线播放 | 亚洲精品视频在线 | 欧美a∨| 欧美日批 | 国产精品日韩欧美一区二区 | 久久久国产精品 | 国产精品中文字幕一区二区三区 | 久久久青草婷婷精品综合日韩 | 97人人澡人人爽91综合色 | 精品一区二区久久久久久久网精 |