天天看點

機器學習自學指南

事實上有許多的途徑可以了解 機器學習

,也有許多的資源例如書籍、公開課等可為所用,一些相關的比賽和工具也是你了解這個領域的好幫手。本文我将圍繞這個話題,給出一些總結性的認識,并為你由程式員到機器學習高手的蛻變旅程中提供一些學習指引。

機器學習的四個層次

根據能力可以将學習過程分成四個階段。這也是一個有助于我們将所有學習資源進行分類的好方法。

  1. 初學階段
  2. 新手階段
  3. 中級階段
  4. 進階階段

我之是以把初學階段和新手階段區分開來,是因為我想讓那些完全初學者(對這個領域感興趣的程式員)在初學階段對機器學習有一個大緻的認識,以便決定是否繼續深入。

我們将分别探讨這四個階段,并推薦一些能夠幫助我們更好地了解機器學習和提高相關技能的資源。對學習階段進行這樣的分類隻是我個人的建議,也許每個分類的前後階段中也有一些适合目前階段的資源。

我認為對機器學習有一個整體性的認識是非常有幫助的,我也希望能聽聽你們的想法,通過在下面評論告訴我吧!

機器學習自學指南

初學者是指那些對機器學習感興趣的程式員。他們或許已經接觸過一些相關的書籍、wiki網頁,或者是已經上過幾節機器學習課程,但是他們并沒有真正地了解機器學習。他們在學習過程感到沮喪是因為他們得到的建議往往是針對中級或進階階段的。

初學者需要的是一個感性的認識而不是純粹的代碼、教科書、課程。他們首先需要對機器學習有一個是什麼、為什麼、怎麼做的認識以此為接下來的階段學習奠定基礎。

新手是指那些已經對機器學習有一定了解的人,他們已經閱讀過一些專業書籍或者是接受過完整地課程學習,并且對這個東西有很大的興趣想做更深入的了解,想通過進一步學習去解決他們所面臨的問題。

下面是給新手的一些資料或者建議:

  • 完成一門課程:完整地學習一門機器學習的課程,例如斯坦福大學的機器學習課程。多做課程筆記,盡可能地完成課程作業,多問問題。
  • 閱讀一些書籍:這裡指的不是教科書,而是為上面所列舉的為程式員初學者所準備的書籍。
  • 掌握一門工具:學會使用一門分析工具或者類庫,例如python的機器學習包 Scikit-Learn 、java的機器學習包 WEKA R語言 或者其他類似的。具體地說,學習如何使用你在課程或書本上學來的算法,看看它們處理問題的實際效果。
  • 寫一寫代碼:動手實作一些簡單的算法,例如感覺機、K近鄰、線性回歸。試圖寫一些小程式去闡述你對這些算法的了解。
  • 學習相關教程:完整地跟一門教程,為你所完成的小項目建立一個檔案夾,其中包含資料集、腳本代碼等,以便你可以随時回顧并有所收獲。

在新手階段已經閱讀過一些專業書籍并完成了一些專業課程,這些人已經懂得如何使用機器學習相關的工具,并且也已經為實作機器學習算法和完成一些教程寫過不少的代碼了。中級階段其實是一個自我突破的過程,可以通過建立自己的項目去探索新的技巧并在社群的交流互動中擷取更多的知識。

中級階段的目标是學習如何實作并使用準确、合适、健壯機器學習算法。同樣,他們也在資料預處理、資料清洗、歸納總結上花了不少時間,并思考這些資料能解決什麼問題。

下面是給中級學習者的一些資料或者建議:

  • 建立自己的小項目:自己設計小型的程式設計項目或者是應用機器學習算法解決問題的小實驗。這就像是為探索你自己所感興趣的技術而設計一些教程。你可以自己實作一個算法或者是提供一些實作這些算法類庫的連結。
  • 資料分析:習慣于從資料集中探索并總結。知道什麼時候該用什麼工具,擷取用于探索、學習相關技術的資料。
  • 閱讀教科書:閱讀并消化機器學習相關的教科書。這可能對了解用數學方式描述相關技術的能力有一定的要求,并且需要了解用公式的方式去對描述問題和算法。
  • 編寫你自己的工具:為開源的機器學習平台或類庫編寫插件和相關的程式包。這是學習如何實作健壯的、能用于生産環境下的算法的一個很好的鍛煉機會。将你的程式包運用到項目中,将代碼送出給社群進行代碼稽核,如果可能的話,努力将你的程式釋出到開源的平台上,從大家的回報中進一步學習。
  • 競賽:參加與機器學習有關的比賽,比如與機器學習會議有關的,或者是提供像Kaggle這樣的平台的比賽。參與讨論、提問題,學習其他參賽者是如何解決問題的。将這些項目、方法和代碼添加到你的項目庫中。

機器學習的進階玩家是那些已經整理過大量機器學習算法或者是自己獨立實作算法的人。他們或許參加過機器學習的競賽又或許寫過機器學習的程式包。他們已經閱讀過許多書籍、學習過許多相關課程,對這一領域有較充分的認識,同時對自己研究的幾個關鍵技術有很深入的了解。

這些進階使用者平時負責生産環境下的機器學習系統的建立、部署和維護。他們能時刻緊跟這個行業的最新動态,通過自己或他人的一線開發經驗發現并了解每一種機器學習技術的細微差距。

下面是給進階階段學習者的一些資料:

  • 定制開發算法:根據業務需求定制開發算法,實作會議、期刊論文中關于某個相似問題的算法。
  • 自己設計算法:設計全新的算法去解決工作中 遇到的問題,這樣做的目的更多的是為工作中所面臨的困難找到最佳的解決方案,而不是進行該領域的前沿研究。
  • 案例學習:閱讀甚至是重新設計機器學習競賽或者是其他參賽者所提供的實際案例。這些一直在談“我是如何做到”的論文或文章中總是塞滿了關于資料準備、工程實踐以及使用技術的微妙技巧。
  • 方法論:總結處理問題的過程并系統化,可以正式地分享出來也可以僅僅是作為個人總結。他們總有一套自己解決問題的思路并且不斷地提煉和改進處理過程,試圖用更好的技術來或得最佳實踐。
  • 學術研究:參加學術會議,閱讀研究論文和學術專著,與機器學習領域的專家交流學習。他們會記錄工作中所積累的經驗釋出到相關的期刊或者自己部落格上,然後回到工作崗位繼續研究。

知識在不斷地收獲,但學習永無止境。在機器學習的征途中遇到問題時你可以随時停住腳步自己鑽研問題自行解決,或者繞道而行查閱資料借用群體智慧,事實上,我希望繞道而行成為一種常态。

這樣的學習階段劃分是以程式員的角度來規劃的,這可以作為技術人員實作從入門到精通的一條線性學習路線。我很樂意收到對于這篇文章的批評建議,這樣可以使文章變得更好。在特定的學習階段你可以得到更多的學習資源,因為針對每個階段所推薦的學習資源也僅僅是我個人的建議。