使用Python開始機器學習

目前機器學習紅遍全球。男女老少都在學機器學習模型,分類器,神經網路和吳恩達。你也想成為一份子,但你該如何開始?

在這篇文章中我們會講Python的重要特徵和它適用於機器學習的原因,介紹一些重要的機器學習包,以及其他你可以獲取更詳細資源的地方。

為什麼用Python做機器學習

Python很適合用於機器學習。首先,它很簡單。如果你完全不熟悉Python但是有一些其他的編程經驗(C或者其他編程語言),要上手是很快的。其次,Python的社區很強大。這使得Python的文檔不僅條理性好,而且容易讀。你還可以在StackOverFlow上找到關於很多問題詳細解答(學習基石)。再次,一個強大的社區帶來的副產品就是大量有用程序庫(Python內部自帶的和第三方軟體),基本上可以解決你所有的問題(包括機器學習)。

但我聽說Python很慢

Python是很慢。它不是執行最快的語言,擁有那麼多好用的抽象是要付出代價的。

但這是個可以解決的問題:程序庫可以把計算量繁重的部分外包給其他更高效(但更難使用)的語言,例如C和C++。比如NumPy這個提供數值運算的程序庫,就是用C寫的,運行速度超快。在實際運用中,幾乎所有程序庫都會使用NumPy去完成計算繁重的部分。如果你看到Numpy,你應該想到它很快。

所以你是可以讓程序的運行速度跟它的低層語言實現的運行速度相比擬的。你沒有必要擔心程序的運行速度。

值得知道的Python程序庫

Scikit-learn

你剛開始學機器學習嗎?如果你需要一個涵蓋了特徵工程,模型訓練和模型測試所有功能的程序庫,scikit-learn是你的最佳選擇!這個優秀的免費軟體提供了機器學習和數據挖掘所需要的所有工具。它是目前Python機器學習的標準庫。要使用任何成熟的機器學習演算法都推薦使用這個庫。

這個程序庫支持分類和回歸,實現了基本所有的經典演算法(支持向量機,隨機森林,樸素貝葉斯等等)。程序庫的設計讓遷移演算法十分容易,使用不同的演算法做實驗非常輕鬆。這些經典演算法可用性很強,能用於大量不同的情況。

但這並不是Scikit-learn的全部功能,它同樣可以用來做降維,聚類等等任何你所能想到的。由於它構建在Numpy和Scipy之上(所有的數值計算都是由C語言來完成的),它的運行速度也超快。

這些例子可以告訴你這個庫的功能,如果你想學習如何使用它,可以閱讀教程。

NLTK

NLTK不算是一個機器學習的程序庫,但它是做自然語言處理(NLP)必須的一個庫。除了用於文字處理的功能,例如聚類,分詞,詞幹提取,標記,解析等,它還包含了大量的數據集和其他關於詞法的資源(可用於模型訓練)。

把所有這些打包在一起的好處就不用再多說了。如果你對NLP感興趣,可以看看這些教程!

Theano

Theano被廣泛應用於工業界和學術界,它是所有深度學習架構的鼻祖。Theano是用Python,結合Numpy實現的。你可以用它來構建用多維數組實現神經網路。Theano會處理所有數學計算,你不需要知道底層的數學公式實現。

早在支持使用GPU進行計算不像今天這樣普及的時候,Theano就已經提供了對GPU計算的支持。這個程序庫目前已經非常成熟,能夠支持很多不同類型的操作。這使得Theano可以在和其他庫比較的時候勝出。

目前關於Theano最大的問題是API不是很好用,對於新手來說上手困難。不過市面上已經有了解決這個問題的封裝包,比如Keras, Blocks 和 Lasagne,都可以簡化Theano的使用。

TensorFlow

谷歌大腦團隊為了內部使用創造了TensorFlow,2015年將其開源化。設計初衷是取代他們已有的封閉機器學習框架DistBelief,據說該構架太過於依賴Google的整體構架,也不夠靈活,在分享代碼的時候非常不方便。

於是就有了TensorFlow。谷歌從以前的錯誤中吸取了教訓。許多人認為TensorFlow是Theano的改進版,它提供了更靈活和好用的API。可以用於科研和工業界,同時支持使用大量的GPU進行模型訓練。TensorFlow支持的操作沒有Theano多,但是它的計算可視化比Theano好。

TensorFlow目前非常流行。如果今天這篇文章裡面提到的名字你只聽說了一個,那很有可能是這個。每天都有新的提到TensorFlow的博文或學術文章發表。這個流行度提供了大量的用戶和教程,新人很容易上手。

Keras

Keras是一個提供更高層神經網路API的庫,它可以基於Theano或者TensorFlow。它擁有這兩個庫強大的功能卻又同時大大地簡化了使用難度。它將用戶的體驗放在首要地位,提供簡單的API和很有用的錯誤信息。

同時Keras的設計基於模塊,這就使得你能自由組合不同的模型(神經層,成本函數等等),而且模型的可擴展性很好,因為你只需要簡單的將新模塊跟已有的連起來即可。

有人覺得Keras太好用了,簡直就是在作弊。如果你開始用深度學習,可以看看例子 和 文檔,對於你可以用它做什麼有個數。如果你要學習使用它,可以從 這個教程開始。

兩個類似的庫有Lasagne 和 Blocks, 但它們只支持Theano。如果你試過了Keras但是你不喜歡它你可以試試這些其他的庫,也許它們更適合你。

PyTorch

還有一個有名的深度學習架構是Torch,它是用Lua實現的。Facebook用Python實現了Torch,叫做PyTorch,並將它開源了。用這個庫你可以使用Torch使用的低層的庫,但是你可以使用Python而不是Lua。

PyTorch對查錯的支持很好,這是因為Theano和TensorFlow使用符號計算而PyTorch則不是。使用符號計算就表明在一行代碼被解釋的時候,一個操作(x+y)並不會被執行,在那之前,它必須先被編譯(解釋成CUDA或者C語言)。這就讓用Theano和TensorFlow的時候很難查錯,因為很難把報錯跟當前的代碼聯繫起來。這樣做有它的好處,不過查錯簡單不在其中。

如果你想開始學PyTorch,官方文檔適合初學者也會包含有難度的內容。

機器學習的第一步?

你講了這麼多機器學習的包,我應該用哪一個?我怎樣比較它們?我從哪裡開始?

你可以試用我們面向初學者的平台Ape Advice?,就不用煩細節的問題了。如果你完全沒有接觸過機器學習,從scikit-learn開始。你可以了解標記,訓練和測試是怎樣工作的,以及一個模型是如何被建立的。

如果你想試試深度學習,從 Keras開始,畢竟這是大家公認的最簡單的框架。你可以先試試,找找感覺。當你有點經驗之後,你可以開始考慮你最需要的是什麼:速度,不同的API,或者別的什麼,之後你就能更好地決定了。

目前有海量的文章比較Theano,Torch和TensorFlow。沒有人能說哪個最好。你要記住的是所有包都支持很多東西,而且也在不斷改進,想相互比較它們也越來越難。六個月前的標準有可能已經過時了,一年前的評價說框架X沒有Y功能也不一定還有效。

最後,如果你想用NLP,可以試試MonkeyLearn!我們的這個平台所提供的用戶界面讓建造模型,訓練模型和改進NLP模型都非常容易試下。你可以用事先訓練好的模型處理常見問題(意見挖掘,話題探測或者提取關鍵字),也可以為你特有的問題設計一個新的演算法。你不需要擔心底層實現或者發布你的模型,我們可擴展的雲系統會幫你完成這些。你可以免費註冊,馬上開始試用我們超棒的API。

想知道更多?評論區等你!

Python學習群:593088321

推薦閱讀:

TAG:Python | 人工智能 | 机器学习 |