使用Python開始機器學習

lengyueyijian發表於2018-09-05

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

在這篇文章中我們會講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。


相關文章