機器學習的入門「秘籍」
摘要: 機器學習已經成為當下最火熱的技術之一,對於初學者來說,如何快速入門機器學習是至關重要的。本文屬於入門級寶典,高手請繞道!
由於人工智慧的發展,機器學習越來越受到大家的追捧。很多新的計算機科學家和工程師開始跨入機器學習這個美好的世界。不幸的是,理論,演算法,應用,論文,書籍,視頻等的數量是如此之大,以至於無法清楚地了解到底那些才是他們想要/需要學習提高他/她的技能的知識。
在這篇文章中,我想分享一下我的經驗,提出一條可行的途徑,快速學習基本概念,並準備好深入討論最複雜的話題。當然這只是個人建議:每個朋友都可以根據自己的經驗,選擇更多地關注一些更有趣的話題。畢竟適合自己才是最好的路!
先決條件(基礎)
機器學習是非常依賴數學的一門科學。這不是一個可以選擇的選項,而是必選項,因為沒有數學就沒有機器學習,數學是一個不可拋棄的根本支柱。如果您是計算機工程師,每天使用UML,ORM,設計模式和許多其他軟體工程工具/技術,請閉上眼睛,忘記幾乎所有內容。這並不意味著所有的這些概念都不重要。但機器學習需要一種不同的方法。Python在這個領域越來越受歡迎的原因之一就是它的「原型設計速度」。在機器學習中,一種允許您使用幾行代碼(無類,介面和所有其他OO基礎架構)對演算法進行建模的語言是絕對要掌握的。無疑,Python是最佳的選擇,如果你有很深厚的Python基礎,那麼這將成為你的優勢。
微積分,概率理論和線性代數是幾乎任何演算法所必需的數學技能。如果你已經有了很好的數學背景,你可以跳過這個部分,選擇刷新一些重要的概念是一個不錯的主意。考慮到數學理論,我不鼓勵從頭開始進行通透性學習。在完成特定的任務時也可以突擊式的學習它們,數學的使用要由淺入深,一開始就注重簡單的任務。
另外機器學習,有很多好的在線資源(如Coursera,Khan Academy或Udacity)。學習過程中盡量採用適合自己學歷背景的務實方法。我的建議是使用一個簡短的綱要,其中最重要的概念需要一一自己親自搞明白,並且在需要的時候通過搜索和研究繼續深入的學下去。這不是一個非常系統的方法,但替代方案有一個顯著的缺點:大量的數學概念可以阻止和迷失所有沒有深厚學術背景的人。
一個入門的「武林秘籍」:
概率論:
- 離散和連續的隨機變數(Discrete and continuous random variables)
- 重要的分布(伯努利,分類,二項式,正態,指數,泊松,貝塔,伽馬)
- 貝葉斯統計(Bayes statistics)
- 相關和協方差(correlation and covariance)
線性代數:
- 向量和矩陣(Vectors and matrics)
- 矩陣的決定因素(determinant of a matrix)
- 特徵向量和特徵值(eigenvectors and eigenvalues)
- 矩陣分解(像SVD)(Matrix factorization)
微積分:
- 函數
- 積分
網上有很多免費資源,如:
- 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 人工智慧軟體工程師,數據科學家,技術傳播與顧問。
博客:https://www.bonaccorso.eu
譯者:袁虎 審閱:主題曲哥哥
文章為簡譯,更為詳細的內容,請查看原文
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※論文查重用了什麼演算法?
※九章演算法 | Amazon 面試題 : 反轉母音字母
※求交換兩個整數最簡單的寫法?
※最全演算法工程師面試題目整理(一)
※對於社交網路的數據挖掘應該如何入手,使用哪些演算法?