機器學習的入門「秘籍」

摘要: 機器學習已經成為當下最火熱的技術之一,對於初學者來說,如何快速入門機器學習是至關重要的。本文屬於入門級寶典,高手請繞道!

由於人工智慧的發展,機器學習越來越受到大家的追捧。很多新的計算機科學家和工程師開始跨入機器學習這個美好的世界。不幸的是,理論,演算法,應用,論文,書籍,視頻等的數量是如此之大,以至於無法清楚地了解到底那些才是他們想要/需要學習提高他/她的技能的知識。

在這篇文章中,我想分享一下我的經驗,提出一條可行的途徑,快速學習基本概念,並準備好深入討論最複雜的話題。當然這只是個人建議:每個朋友都可以根據自己的經驗,選擇更多地關注一些更有趣的話題。畢竟適合自己才是最好的路!

先決條件(基礎)

機器學習是非常依賴數學的一門科學。這不是一個可以選擇的選項,而是必選項,因為沒有數學就沒有機器學習,數學是一個不可拋棄的根本支柱。如果您是計算機工程師,每天使用UML,ORM,設計模式和許多其他軟體工程工具/技術,請閉上眼睛,忘記幾乎所有內容。這並不意味著所有的這些概念都不重要。但機器學習需要一種不同的方法。Python在這個領域越來越受歡迎的原因之一就是它的「原型設計速度」。在機器學習中,一種允許您使用幾行代碼(無類,介面和所有其他OO基礎架構)對演算法進行建模的語言是絕對要掌握的。無疑,Python是最佳的選擇,如果你有很深厚的Python基礎,那麼這將成為你的優勢。

微積分,概率理論和線性代數是幾乎任何演算法所必需的數學技能。如果你已經有了很好的數學背景,你可以跳過這個部分,選擇刷新一些重要的概念是一個不錯的主意。考慮到數學理論,我不鼓勵從頭開始進行通透性學習。在完成特定的任務時也可以突擊式的學習它們,數學的使用要由淺入深,一開始就注重簡單的任務。

另外機器學習,有很多好的在線資源(如Coursera,Khan Academy或Udacity)。學習過程中盡量採用適合自己學歷背景的務實方法。我的建議是使用一個簡短的綱要,其中最重要的概念需要一一自己親自搞明白,並且在需要的時候通過搜索和研究繼續深入的學下去。這不是一個非常系統的方法,但替代方案有一個顯著的缺點:大量的數學概念可以阻止和迷失所有沒有深厚學術背景的人。

一個入門的「武林秘籍」:

概率論:

  1. 離散和連續的隨機變數(Discrete and continuous random variables)
  2. 重要的分布(伯努利,分類,二項式,正態,指數,泊松,貝塔,伽馬)
  3. 貝葉斯統計(Bayes statistics)
  4. 相關和協方差(correlation and covariance)

線性代數:

  1. 向量和矩陣(Vectors and matrics)
  2. 矩陣的決定因素(determinant of a matrix)
  3. 特徵向量和特徵值(eigenvectors and eigenvalues)
  4. 矩陣分解(像SVD)(Matrix factorization)

微積分:

  1. 函數
  2. 積分

網上有很多免費資源,如:

  • Grinstead,Snell,概率介紹,Swarthmore和達特茅斯學院
  • Gallagher,線性代數的介紹(用MATLAB的例子),哥倫比亞
  • Heinbockel,微積分介紹 Old Dominion University

維基百科也是一個非常好的資源,許多公式,理論和定理都以清晰易懂的方式解釋。

機器學習必備技能:

1. 特徵工程:

進入機器學習的第一步是了解如何測量和提高數據集的質量。管理分類和缺失的特徵、歸一化和維數降低(PCA,ICA,NMF)是可以顯著提高任何演算法性能的基本技術。研究如何將數據集分為訓練集和測試集以及如何採用交叉驗證,而不是經典測試方法。如果想清楚的了解什麼是特徵工程,點擊!

2. Numpy:Python的數學之王!

使用Python時,Numpy不僅僅是一個庫。它是幾乎任何機器學習實現的基礎,絕對有必要了解它的工作原理,重點要關注矢量化和廣播機制的概念、利用多線程和SIMD和MIMD架構的優勢。通過掌握這些原理概念,可以加快大多數演算法的學習過程。官方文件完整,但我也建議這些資源:

  • VanderPlas J., Python數據科學手冊:使用數據的基本工具,OReilly
  • LangTangen PH, A Primer on Scientific Programming with Python,Springer

3. 數據可視化

雖然它不是純粹的機器學習主題,重要的是要知道如何可視化數據集。Matplotlib可能是最佳的解決方案,它易於使用,並允許繪製不同類型的圖表。Bokeh和Seaborne提供了非常有趣的選擇。沒有必要對所有軟體包有全面的了解,但是了解每個軟體包的優點/弱點是有用的,因此能夠在需要時選擇正確的軟體包。

學習Matplotlib的一個很好的資源是:

  • McGreggor D.,掌握Matplotlib,Packt Publishing

4.線性回歸:

線性回歸是最簡單的模型之一,可以考慮將其作為解決優化問題的首選,它可以解決最小化均方誤差的優化問題。我建議將其研究為貝葉斯問題,其中使用先驗概率表示參數(例如,高斯分布),優化成為MLE(最大似然估計)。即使它似乎更複雜,這種方法提供了一個新的思路,可以和許多其他更複雜的模型共享。

有關貝爾斯統計的非常有用的介紹可在Coursera上獲得:

  • 貝葉斯統計:從概念到數據分析
  • 貝葉斯統計:技術和模型

我建議你選擇這些書:

  • Downey BA, Think Bayes,OReilly
  • Davidson-Pilon C., 貝葉斯方法黑客,Addison-Wesley

5.線性分類:

邏輯回歸通常是最好的起點。這也是學習一些信息理論的好機會,了解熵、交叉熵和互信息等概念。分類交叉熵是深度學習分類中最穩定的成本函數,簡單的邏輯回歸可以展示如何加快學習過程(與均方誤差相比)。另一個重要的話題是正則化(Ridge,Lasso和ElasticNet)。有很多次,它被認為是提高模型準確性的「深奧」方式,但它的真實含義更加精確,應該通過一些具體的例子予以理解。我建議初學者可以以邏輯回歸作為一個簡單的神經網路搭建的開始,可視化(對於2D示例)如何權重向量在學習過程中移動。

超參數網格搜索方法是一個不錯的方法。Grid Search可以評估不同超參數集的性能,而不是完全意識到不同的值。因此,工程師可以將注意力集中在產生最高精度的組合上。

6.支持向量機(SVM):

支持向量機提供了不同的分類方法(線性和非線性)。該演算法非常簡單,學生只需要具有基礎的幾何知識就可以學習。然而,了解kernel-SVM的工作原理是非常有用,因為它們可以幫助你避免在線性方法的任務中頻繁出現失敗。

一些有用的免費資源:

  • Law,支持向量機的簡單介紹,密歇根州立大學
  • 維基百科的內核方法

7.決策樹:

決策樹提供了另一種分類和回歸方法。一般來說,它們不是非常複雜問題的首選,但它們提供了完全不同的方法,即使是非技術人員也可以很容易地理解,並且可以在會議或官方演示中進行可視化。

8.快速瀏覽集成學習(Ensemble learning):

在了解了決策樹之後,研究如何組合樹來提高整體準確度的方法是有用的。隨機森林,梯度提升回歸樹和AdaBoost是複雜性比較低的強大演算法。Scikit-Learn提供了最常見的實現,但是如果您想要充分利用這些演算法,我建議你花一些時間研究XGBoost,這是一個分散式框架,可以與CPU和GPU一起工作,加快訓練過程,即使是非常龐大的數據集。

9.聚類:

研究聚類方法,依我的意見,最好的做法是研究高斯混合演算法(基於EM,期望最大化)。即使K-Means也比較簡單(但必須進行研究),高斯混合提供了一種純貝葉斯方法,這對許多其他類似的任務很有用。其他必須研究的聚類演算法還包括分層聚類,光譜聚類和DBSCAN。了解基於實例的學習的思想也很有用,例如研究了k-Nearest Neighbors演算法,可以用於監督學習和無監督學習任務。

光譜聚類的免費資源是:

  • Von Luxburg U.,A tutorial on Spectral Clustering,Max-Planck Institute

10.神經網路:

神經網路是深度學習的基礎,應該花單獨的時間進行研究。但是,我認為了解Perceptron,Multi-Layer Perceptron和Backpropagation演算法的概念對神經網路的學習是很有用的。Scikit-learn提供了一個非常簡單的神經網路,但是,它是一個好的開始,接著就是了解Keras,這是基於高層次的框架Tensorflow,Theano或CNTK的深度學習包,允許模擬和訓練神經網路。

一些好的神經網路資源:

  • HassounM,人造神經網路基礎,麻省理工學院出版社
  • Gulli A.PalS,Deep Learning with Keras,Packt Publishing

市場上最好的深度學習書可能是:

  • Goodfellow I.,Bengio Y.,Courville A.,Deep Learning,The MIT Press

希望本文能夠幫助到那些打算進入機器學習領域的朋友們!

本文由北郵@愛可可-愛生活老師推薦,@阿里云云棲社區組織翻譯。

文章原標題《An annotated path to start with Machine Learning》

作者:bonaccprso 人工智慧軟體工程師,數據科學家,技術傳播與顧問。

博客:bonaccorso.eu

譯者:袁虎 審閱:主題曲哥哥

文章為簡譯,更為詳細的內容,請查看原文

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

推薦閱讀:

論文查重用了什麼演算法?
九章演算法 | Amazon 面試題 : 反轉母音字母
求交換兩個整數最簡單的寫法?
最全演算法工程師面試題目整理(一)
對於社交網路的數據挖掘應該如何入手,使用哪些演算法?

TAG:机器学习 | 算法 | 神经网络 |