機(jī)器學(xué)習(xí)研究與開發(fā)平臺的選擇
目前機(jī)器學(xué)習(xí)可以說是百花齊放階段,不過如果要學(xué)習(xí)或者研究機(jī)器學(xué)習(xí),進(jìn)而用到生產(chǎn)環(huán)境,對平臺,開發(fā)語言,機(jī)器學(xué)習(xí)庫的選擇就要費(fèi)一番腦筋了。這里就我自己的機(jī)器學(xué)習(xí)經(jīng)驗(yàn)做一個建議,僅供參考。
首先,對于平臺選擇的第一個問題是,你是要用于生產(chǎn)環(huán)境,也就是具體的產(chǎn)品中,還是僅僅是做研究學(xué)習(xí)用?
1. 生產(chǎn)環(huán)境中機(jī)器學(xué)習(xí)平臺的搭建
如果平臺是要用于生產(chǎn)環(huán)境的話,接著有一個問題,就是對產(chǎn)品需要分析的數(shù)據(jù)量的估計(jì),如果數(shù)據(jù)量很大,那么需要選擇一個大數(shù)據(jù)平臺。否則的話只需要一個單機(jī)版的平臺就可以了。
1.1 生產(chǎn)環(huán)境中機(jī)器學(xué)習(xí)大數(shù)據(jù)平臺的搭建
生產(chǎn)環(huán)境里面大數(shù)據(jù)平臺,目前最主流的就是Spark平臺,加上輔助的分布式數(shù)據(jù)處理容器,比如YARN,或者M(jìn)esos.如果需要實(shí)時的收集在線數(shù)據(jù),那么就加上Kafka。簡言之,一個通用的大數(shù)據(jù)處理平臺就是集成Spark + YARN(Mesos) + Kafka. 我現(xiàn)在做的產(chǎn)品項(xiàng)目都是基于Spark + YARN+ Kafka的,目前來看,這個平臺選擇基本上是主流的方向。
當(dāng)然,有人會說,這么多開源軟件,一起集成起來好麻煩,大坑肯定不少,有沒有一個通用的平臺,可以包括類似Spark + YARN+ Kafka的大數(shù)據(jù)平臺功能呢?目前據(jù)我所知,做的比較好的有CDAP(http://cdap.io)。它對Spark, YARN, Kafka還有一些主流的開源數(shù)據(jù)處理軟件進(jìn)行了集成,開發(fā)者只需要在它上面封裝的一層API上做二次開發(fā)就可以了。這應(yīng)該是一個不錯的點(diǎn)子,不過目前還沒有看到商用的成功案例,所以我們在構(gòu)架選型的時候就沒有考慮CDAP。
因此,圍繞Spark + YARN+ Kafka的大數(shù)據(jù)平臺還是首選。由于Spark MLlib的機(jī)器學(xué)習(xí)算法并不豐富好用,因此如果你的產(chǎn)品中需要一些MLlib中沒有的算法,就需要自己去找開源實(shí)現(xiàn)了。
1.2 生產(chǎn)環(huán)境中機(jī)器學(xué)習(xí)單機(jī)數(shù)據(jù)平臺的搭建
生產(chǎn)環(huán)境里面如果數(shù)據(jù)里不大,大數(shù)據(jù)平臺就顯得有點(diǎn)over design了,此時我們有更多的選擇。首選,仍然是Spark平臺,不過我們不需要分布式的容器YARN和分布式數(shù)據(jù)分發(fā)的路由Kafka了。為什么首選還是Spark呢?因?yàn)槲覀円紤]擴(kuò)展,現(xiàn)在數(shù)據(jù)量不大,不代表以后數(shù)據(jù)量不大。這也是我參與的一些小型數(shù)據(jù)分析項(xiàng)目也是選擇Spark的原因。當(dāng)然我覺得還有一些原因是Spark同時支持了Python, Java, Scala和R。這降低了很多程序員的參與門檻。我參與的Spark項(xiàng)目中,開發(fā)語言主要是Java和Scala。Python沒有選擇是因?yàn)橐恍┧俣鹊脑蚝拖到y(tǒng)其它部分都是用Java寫的。
第二個選擇是以scikit-learn為主的一系列python工具,包括 numpy, scipy, pandas, MatplotLib等等。特點(diǎn)是類庫豐富,尤其是scikit-learn的機(jī)器學(xué)習(xí)庫,可以說是十八般武器,樣樣都有。另外就是由于可以交互式的編寫程序,方便快速開發(fā)原型。我參與的有兩個項(xiàng)目在可行性分析階段,都是用scikit-learn來做原型和給客戶做demo。
因此,生產(chǎn)環(huán)境中機(jī)器學(xué)習(xí)單機(jī)數(shù)據(jù)平臺, Spark是做產(chǎn)品首選,而scikit-learn家族適合做快速的原型開發(fā)驗(yàn)證。
2. 研究環(huán)境中機(jī)器學(xué)習(xí)平臺的搭建
如果只是做研究,那么選擇就很多了,主流的有三種。
第一種是基于Spark MLlib來學(xué)習(xí)。好處是學(xué)到的東西用到生產(chǎn)環(huán)境可以無縫切換,但是壞處也很明顯,Spark東西很多,在自己的單機(jī)上跑很吃內(nèi)存,比較慢,而且MLlib的類庫并不豐富,很多算法需要自己再去找類庫。根據(jù)周圍同事的反饋,比較吃力,因此基于