機器學習實踐指南
你可能在各種應用中聽說過 機器學習 (ML),比如垃圾郵件過濾、光學字元識別(OCR)和計算機視覺。
開啟機器學習之旅是一個涉及多方面的漫長旅途。對於新手,有很多的書籍,有學術論文,有指導練習,有獨立項目。在這些眾多的選擇裡面,很容易迷失你最初想學習的目標。
所以在今天的文章中,我會列出 7 個步驟(和 50 多個資源)幫助你開啟這個令人興奮的計算機科學領域的大門,並逐漸成為一個機器學習高手。
請注意,這個資源列表並不詳盡,只是為了讓你入門。 除此之外,還有更多的資源。
1、 學習必要的背景知識
你可能還記得 DataCamp 網站上的學習數據科學這篇文章裡面的信息圖:數學和統計學是開始機器學習(ML)的關鍵。 基礎可能看起來很容易,因為它只有三個主題。 但不要忘記這些實際上是三個廣泛的話題。
在這裡需要記住兩件非常重要的事情:
- 首先,你一定會需要一些進一步的指導,以了解開始機器學習需要覆蓋哪些知識點。
- 其次,這些是你進一步學習的基礎。 不要害怕花時間,有了這些知識你才能構建一切。
第一點很簡單:學習線性代數和統計學是個好主意。這兩門知識是必須要理解的。但是在你學習的同時,也應該嘗試學習諸如最優化和高等微積分等主題。當你越來越深入 ML 的時候,它們就能派上用場。
如果是從零開始的,這裡有一些入門指南可供參考:
- Khan 學院 對於初學者是非常好的資源,可以考慮學習他們的線性代數和微積分課程。
- 在 麻省理工學院 OpenCourseWare 網站上學習線性代數 課程。
- Coursera course 網站上對描述統計學、概率論和推論統計學的介紹內容。
統計學是學習 ML 的關鍵之一
如果你更多喜歡閱讀書籍,請參考以下內容:
然而,在大多數情況下,你已經對統計學和數學有了一個初步的了解。很有可能你已經瀏覽過上面列舉的的那些資源。
在這種情況下,誠實地回顧和評價你的知識是一個好主意,是否有一些領域是需要複習的,或者現在掌握的比較好的?
如果你一切都準備好了,那麼現在是時候使用 R 或者 Python 應用這些知識了。作為一個通用的指導方針,選擇一門語言開始是個好主意。另外,你仍然可以將另一門語言加入到你的技能池裡。
為什麼這些編程知識是必需的?
嗯,你會看到上面列出的課程(或你在學校或大學學習的課程)將為你提供關於數學和統計學主題的更理論性的介紹(而不是應用性的)。 然而,ML 非常便於應用,你需要能夠應用你所學到的所有主題。 所以最好再次複習一遍之前的材料,但是這次需要付諸應用。
如果你想掌握 R 和 Python 的基礎,可以看以下課程:
- DataCamp 上關於 Python 或者 R 的介紹性課程: Python 語言數據科學介紹 或者 R 語言編程介紹。
- Edx 上關於 Python 或者 R 的介紹性課程: Python 語言數據科學介紹 和 R 語言數據科學介紹。
- 還有很多其他免費的課程。查看 Coursera 或者 Codeacademy 了解更多。
當你打牢基礎知識後,請查看 DataCamp 上的博客 Python 統計學:40+ 數據科學資源。 這篇文章提供了統計學方面的 40 多個資源,這些資源都是你開始數據科學(以及 ML)需要學習的。
還要確保你查看了關於向量和數組的 這篇 SciPy 教程文章,以及使用 Python 進行科學計算的研討會。
要使用 Python 和微積分進行實踐,你可以了解下 SymPy 軟體包。
2、 不要害怕在 ML 的「理論」上浪費時間
很多人並不會花很多精力去瀏覽理論材料,因為理論是枯燥的、無聊的。但從長遠來看,在理論知識上投入時間是至關重要的、非常值得的。 你將會更好地了解機器學習的新進展,也能和背景知識結合起來。 這將有助於你保持學習積極性。
此外,理論並不會多無聊。 正如你在介紹中所看到的,你可以藉助非常多的資料深入學習。
書籍是吸收理論知識的最佳途徑之一。 它們可以讓你停下來想一會兒。 當然,看書是一件非常平靜的事情,可能不符合你的學習風格。 不過,請嘗試閱讀下列書籍,看看它是否適合你:
- 機器學習教程 , Tom Mitchell 著,書可能比較舊,但是卻很經典。這本書很好的解釋介紹了機器學習中最重要的課題,步驟詳盡,逐層深入。
- 機器學習: 使數據有意義的演算法藝術和科學 (你可以在這裡看到這本書的幻燈片版本):這本書對初學者來說非常棒。 裡面討論了許多實踐中的應用程序,其中有一些是在 Tom Mitchell 的書中缺少的。
- 機器學習之嚮往 :這本書由 吳恩達 編寫的,仍未完本,但對於那些正在學習 ML 的學生來說,這一定是很好的參考資料。
- 演算法與數據結構 由 Jurg Nievergelt 和 Klaus Hinrichs 著。
- 也可以參閱 Matthew North 的 面向大眾的數據挖掘 。 你會發現這本書引導你完成一些最困難的主題。
- 機器學習介紹 由 Alex Smola 和 S.V.N. Vishwanathan 著。
花些時間看書並研究其中涵蓋的資料
視頻和慕課對於喜歡邊聽邊看來學習的人來說非常棒。 慕課和視頻非常的多,多到可能你都很難找到適合你的。 下面列出了最知名的幾個:
- 這個著名的機器學習慕課,是 吳恩達 講的,介紹了機器學習及其理論。 別擔心,這個慕課講的非常好,一步一步深入,所以對初學者來說非常適用。
- 麻省理工學院 Open Courseware 的 6034 課程的節目清單,已經有點前沿了。 在你開始本系列之前,你需要做一些 ML 理論方面的準備工作,但是你不會後悔的。
在這一點上,重要的是要將各種獨立的技術融會貫通,形成整體的結構圖。 首先了解關鍵的概念: 監督學習 和 無監督學習 的區別、分類和回歸等。 手動(書面)練習可以派上用場,能幫你了解演算法是如何工作的以及如何應用這些演算法。 在大學課程里你經常會找到一些書面練習,可以看看波特蘭州立大學的 ML 課程。
3、 開始動手
通過看書和看視頻了解理論和演算法都非常好,但是需要超越這一階段,就要開始做一些練習。你要學著去實現這些演算法,應用學到的理論。
首先,有很多介紹 Python 和 R 方面的機器學習的基礎知識。當然最好的方法就是使用互動式教程:
- Python 機器學習:Scikit-Learn 教程,在這篇教程裡面,你可以學到使用 Scikit-Learn 構建模型的 KMeans 和支持向量機(SVM)相關的知名演算法。
- 給初學者的 R 語言機器學習教程 用 R 中的類和 caret 包介紹機器學習。
- [Keras 教程:Python 深度學習25 涵蓋了如何一步一步的為分類和回歸任務構建多層感知器(MLP)。
還請查看以下靜態的(非互動的)教程,這些需要你在 IDE 中操作:
- 循序漸進:Python 機器學習: 一步一步地學習 Scikit-Learn。
- 循序漸進:使用 Keras 開發你的第一個神經網路: 按這個教程一步一步地使用 Keras 開發你的第一個神經網路。
- 你可以考慮看更多的教程,但是機器學習精要這篇教程是非常好的。
除了教程之外,還有一些課程。參加課程可以幫助你系統性地應用學到的概念。 經驗豐富的導師很有幫助。 以下是 Python 和機器學習的一些互動課程:
- 用 scikit-learn 做監督學習: 學習如何構建預測模型,調整參數,並預測在未知數據上執行的效果。你將使用 Scikit-Learn 操作真實世界的數據集。
- 用 Python 做無監督學習: 展示給你如何從未標記的數據集進行聚類、轉換、可視化和提取關鍵信息。 在課程結束時,還會構建一個推薦系統。
- Python 深度學習: 你將獲得如何使用 Keras 2.0 進行深度學習的實踐知識,Keras 2.0 是前沿的 Python 深度學習庫 Keras 的最新版本。
- 在 Python 中應用機器學習: 將學習者引入到機器學習實踐中,更多地關注技術和方法,而不是這些方法背後的統計學知識。
理論學習之後,花點時間來應用你所學到的知識。
對於那些正在學習 R 語言機器學習的人,還有這些互動課程:
- 機器學習介紹 可以讓你宏觀了解機器學習學科最常見的技術和應用,還可以更多地了解不同機器學習模型的評估和訓練。這門課程剩下的部分重點介紹三個最基本的機器學習任務: 分類、回歸和聚類。
- R 語言無監督學習 ,用 R 語言從 ML 角度提供聚類和降維的基本介紹。 可以讓你儘快獲得數據的關鍵信息。
- 實操機器學習涵蓋了構建和應用預測功能的基本組成部分,其重點是實際應用。
最後,還有很多書籍以偏向實踐的方式介紹了 ML 主題。 如果你想藉助書籍內容和 IDE 來學習,請查看這些書籍:
- Python 機器學習 ,Sebastian Raschka 著。
- 人工神經網路與深度學習導論:Python 應用實用指南 ,Sebastian Raschka 著。
- R 語言機器學習 ,Brett Lantz 著。
4、 練習
實踐比使用 Python 進行練習和修改材料更重要。 這一步對我來說可能是最難的。 在做了一些練習後看看其他人是如何實現 ML 演算法的。 然後,開始你自己的項目,闡述你對 ML 演算法和理論的理解。
最直接的方法之一就是將練習的規模做得更大些。 要做一個更大的練習,就需要你做更多的數據清理和功能工程。
- 從 Kaggle 開始。 如果你需要額外的幫助來征服所謂的「數據恐懼」,請查看 Kaggle 的 Python 機器學習教程 和 Kaggle 的 R 語言機器學習教程。 這些將帶給您快速的提升。
- 此後,你也可以自己開始挑戰。 查看這些網站,您可以在其中找到大量的 ML 數據集:UCI 機器學習倉庫,用於機器學習的公開數據集 和 data.world。
熟能生巧。
5、 項目
雖然做一些小的練習也不錯,但是在最後,您需要做一個項目,可以在其中展示您對使用到的 ML 演算法的理解。
最好的練習是實現你自己的 ML 演算法。 您可以在以下頁面中閱讀更多關於為什麼您應該做這樣的練習,以及您可以從中學到什麼內容:
接下來,您可以查看以下文章和倉庫。 可以從中獲得一些靈感,並且了解他們是如何實現 ML 演算法的。
開始時項目可能會很難,但是可以極大增加你的理解。
6、 不要停止
對 ML 的學習永遠不能停止,即使你在這個領域工作了十年,總是有新的東西要學習,許多人都將會證實這一點。
例如,ML 趨勢,比如 深度學習 現在就很受歡迎。你也可以專註於那些現在不怎麼火,但是將來會火的話題上。如果你想了解更多,可以看看這個有趣的問題和答案。
當你苦惱於掌握基礎知識時,你最先想到的可能不是論文。 但是它們是你緊跟最新研究的一個途徑。 論文並不適合剛剛開始學習的人,但是絕對適合高級人員。
其他技術也是需要考慮的。 但是當你剛開始學習時,不要擔心這些。 例如,您可以專註於 Python 或 R 語言 (取決於你已經知道哪一個),並把它到你的技能池裡。 你可以通過這篇文章來查找一些感興趣的資源。
如果您還想轉向大數據,您可以考慮研究 Spark。 這裡有一些有趣的資源:
- 在 R 語言中使用 sparklyr 來了解 Spark
- Spark 數據科學與工程
- 介紹 Apache Spark
- Apache Spark 分散式機器學習
- 用 Apache Spark 進行大數據分析
- 初學者指南:用 Python 操作 Apache Spark
- PySpark RDD 速查表
- PySpark SQL 速查表
其他編程語言,比如 Java、JavaScript、C 和 C++ 在 ML 中越來越重要。 從長遠來看,您可以考慮將其中一種語言添加到學習列表中。 你可以使用這些博客文章來指導你選擇:
學無止境。
7、 利用一切可以利用的資源
機器學習是一個充滿難度的話題,有時候可能會讓你失去動力。 或者也許你覺得你需要點改變。 在這種情況下,請記住,有很多資源可以讓你打消掉這種想法。 查看以下資源:
播客是可以讓你繼續你的 ML 旅程,緊跟這個領域最新的發展的偉大資源:
當然,還有更多的播客。
文檔和軟體包源代碼是深入了解 ML 演算法的實現的兩種方法。 查看這些倉庫:
- Scikit-Learn:知名的 Python ML 軟體包
- Keras: Python 深度學習軟體包
- caret: 非常受歡迎的用於分類和回歸訓練 R 軟體包
可視化是深入 ML 理論的最新也是最流行的方式之一。 它們對初學者來說非常棒,但對於更高級的學習者來說也是非常有趣的。 你肯定會被下面這些可視化資源所吸引,它們能讓你更加了解 ML 的工作原理:
- 機器學習的可視化介紹
- Distill 使 ML 研究清晰,動態和生動。
- 如果你想玩下神經網路架構,可以看下 Tensorflow - 神經網路遊樂場。
- 更多的看這裡:機器學習演算法最佳的可視化方法是什麼?
學習中的一些變化更加能激勵你。
現在你可以開始了
現在一切都取決於你自己了。學習機器學習是一個持續的過程,所以開始的越早就會越好。 運用你手邊的一切工具開始吧。 祝你好運,並確保讓我們知道你的進步。
這篇文章是我基於 Quora 問題(小白該如何開始機器學習)給出的答案。
作者簡介:
Karlijn Willems,數據科學記者
via: https://medium.freecodecamp.org/how-machines-learn-a-practical-guide-203aae23cafb
作者:Karlijn Willems 譯者:Flowsnow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive