機器學習的入門“秘籍”
更多深度文章,請關注:https://yq.aliyun.com/cloud
由於人工智能的發展,機器學習越來越受到大家的追捧。很多新的計算機科學家和工程師開始跨入機器學習這個美好的世界。不幸的是,理論,算法,應用,論文,書籍,視頻等的數量是如此之大,以至於無法清楚地了解到底那些才是他們想要/需要學習提高他/她的技能的知識。
在這篇文章中,我想分享一下我的經驗,提出一條可行的途徑,快速學習基本概念,並準備好深入討論最複雜的話題。當然這隻是個人建議:每個朋友都可以根據自己的經驗,選擇更多地關注一些更有趣的話題。畢竟適合自己才是最好的路!
先決條件(基礎)
機器學習是非常依賴數學的一門科學。這不是一個可以選擇的選項,而是必選項,因為沒有數學就沒有機器學習,數學是一個不可拋棄的根本支柱。如果您是計算機工程師,每天使用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數據科學手冊:使用數據的基本工具,O'Reilly
- 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,O'Reilly
- 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
譯者:袁虎 審閱:主題曲哥哥
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-09-12 16:02:31