如何編寫易被複用的,高質量的機器學習演算法代碼?有哪些這樣的代碼示例?請舉例:代碼,原文,你發表的文獻。

什麼樣的代碼會讓你願意嘗試在自己的數據集上測試,並與之比較。或者說你在科研過程中遇到過哪些非常好用的代碼,它們的哪些特色吸引了你,讓你去試用,測試,比較並引用其原始文獻的?


前面幾個答案看起來都有點答非所問?

個人感覺題主就是在研究怎麼放code出去才會增加自己文章引用。

其實相對成熟的研究主題里對比方法都挺容易確定的,因為大家都比那幾個,基本就是:1)幾個經典的+2)和自己的特別像的+3)近兩年的state of the art. (三者可能有重合)

從樓主的問題判斷,我估計你想要的答案在2) 3)里,因為不確定性最大。

於是,從我做對比試驗的習慣來回答這個問題好了,「讓你去試用,測試,比較並引用其原始文獻的」代碼大概有這麼幾個特點:

1、最重要的,文章本身檔次高。CV方向就是三個會議兩個期刊。鑒於只是會議就一年收上千篇,於是就又有兩個標準:

1)oral。

2)從大組or某些牛X人物手下來的。

2、代碼質量。這個其實很次要。按尋找過程來,標準大概是這樣。

1)好找 能下載的(都是淚啊)。 主頁上文章後面弄出來個能下載的鏈接是最愛~

2)體積小的。 嗯,說這條是因為,我干過把奇奇怪怪的data弄進去結果壓縮包巨大的2X事。

3)README寫的清楚的。 格式混亂語法錯誤一堆看起來就不專業直接扔掉。

4)依賴的東西好找的。 -_-經常就要去下載奇奇怪怪的東西了,有的還要求版本。

5)如果需要編譯,能在各種詭異平台上搞定的。

6)組織形式,我喜歡那種有個demo,然後完成具體功能的是個函數,按照demo根據自己的數據集改一下調用那個函數直接就能搞定的。

舉例什麼的,題主饒過我吧,都下載了我才不要再找一遍。而且方向不一樣估計沒用吧。。。嚶嚶嚶,我就是懶了。。。我狂找過的大概就那麼幾類:image feature, saliency, hashing。都是code爆多的。


SVM方面,首選的肯定是LIBSVM這個庫,應該是應用最廣的機器學習庫了。

下面主要推薦一些DeepLearning的GitHub項目吧!

1. convnetjs - Star:2200+

實現了卷積神經網路,可以用來做分類,回歸,強化學習等。

2. DeepLearn Toolbox - Star:1000+

Matlab實現中最熱的庫存,包括了CNN,DBN,SAE,CAE等主流模型。

3. Deep Learning(yusugomo) - Star:800+

實現了深度學習網路,從演算法與實現上都比較全,提供了5種語言的實現:Python,C/C++,Java,Scala,實現的模型有DBN/CDBN/RBM/CRBM/dA/SdA/LR等。

4. Neural-Networks-And-Deep-Learning - Star:500+

這是同名書的配套代碼,語言是Python。

5. rbm-mnist - Star:200+

這個是hinton matlab代碼的C++改寫版,還實現了Rasmussen的共軛梯度Conjugate Gradient演算法。


我從computer vision的角度進行下推薦下vision必備的工具庫吧。

1、vlfeat

vlfeat是一個有MATLAB和C interface的視覺演算法庫。它用C實現了絕大多數vision演算法(從經典的SIFT到比較新的Fisher encoding),提供非常非常傻瓜化的MATLAB interface。非常好用和友善。裡面提供的演算法也基本足夠滿足一般的vision應用了。

2、theano

如樓上所說,theano是一個Python的deep learning package,我現在在做RNN,

剩下的我基本用MATLAB自帶函數庫就能解決了……

不推薦的

1、caffe

愛過……caffe安裝過程太麻煩,而且個人感覺沒theano好用。如果你實在想用caffe提取pre-train feature的話可以去這裡利用VT的伺服器提取CloudCV,第一不用自己本機計算第二省得安裝。

2、libsvm和liblinear

上面很多人提到了這兩個tool,但是出於某種迷之原因libsvm和liblinear在多種同等設置下的準確度還比不上vlfeat自帶的vlsvm,而且這不是我們一個vision實驗室的問題。


由入門到進階

svmsgd,基礎的線性模型,簡單的梯度下降演算法,基礎的c++

caffe,blas介面的使用,基本的模版,基本的多態,基本的cuda

mshadow,大量的複雜模版

cuda-convnet2,高水平的cuda


推薦閱讀:

隱馬爾可夫模型是如何應用於語音識別?
AI產品,科學家和程序員分別做什麼,是怎麼分工的?
深度強化學習中如何從已有的好行為中快速學習策略?

TAG:Python | 編程 | 軟體工程 | MATLAB | 機器學習 |