程序員初學機器學習的四種方式

http://blog.jobbole.com/67621/html

本文由 伯樂在線 - XiaoxiaoLi 翻譯。未經許可,禁止轉載!
英文出處:Jason Brownlee。歡迎加入翻譯組程序員

學習機器學習有不少方法,大多數人選擇從理論開始。算法

若是你是個程序員,那麼你已經掌握了把問題拆分紅相應組成部分及設計小項目原型的能力,這些能力能幫助你學習新的技術、類庫和方法。這些對任何一個職業程序員來講都是重要的能力,如今它們也能用在初學機器學習上。數據庫

要想有效地學習機器學習你必須學習相關理論,可是你能夠利用你的興趣及對知識的渴望,來激勵你從實際例子學起,而後再步入對算法的數學理解。編程

經過本文你能夠學習到程序員初學機器學習的四種方式。這是給技術人員設計的實用方法,並以實驗爲依據,你須要作調研而且完成實驗才能創建本身的感性知識。網絡

這四種方法分別是:架構

  1. 學習一個機器學習工具
  2. 學習一個機器學習數據集
  3. 學習一個機器學習算法
  4. 實現一個機器學習算法

你應該通讀一下這些方法的策略,而後選擇你以爲最適合本身的一個,而且有選擇性地執行。機器學習

1. 學習一個機器學習工具

選一個你喜歡的工具或者類庫,而後學着用好它。編程語言

我推薦你從一個自帶數據預處理工具,機器學習算法而且能呈現結果的工做平臺開始學習。學習這樣一個工做平臺能讓你更熟悉機器學習從頭至尾的整個過程,這比學習一個特定的數據處理技術或者一個機器學習算法更有價值。工具

或者,也許你感興趣的是一個特定技術或者一類技術。你能夠利用這個機會更深刻地學習一個提供這些方法的類庫或工具,掌握了提供這些技術的類庫能幫助你掌握相應的技術。

一些你能夠採起的策略有:

  • 比較一些可選的工具。
  • 總結你選定的那個工具的能力。
  • 閱讀並總結這個工具的文檔。
  • 完成學習這個工具的文字或視頻教程,而且總結每一個教程中你重點學到了什麼。
  • 製做關於這個工具的功能或者特性的教程。選一些你不太瞭解的功能,而後寫下獲得結果的過程,或者把如何使用這個功能的過程錄個五分鐘的截屏視頻。

一些值得考慮的工做平臺有:RWekascikit-learnwaffles, 和 orange.

2. 學習一個機器學習數據集

選一個數據集,而後深刻地理解它,發掘究竟哪類算法最適合處理它。

我推薦你選擇一箇中等大小的,內存能放下的,可能被不少人研究過的數據集。如今有不少很是好的包含數據的類庫,你能夠瀏覽它們而且從中選擇。你的目的是嘗試理解這個數據集背後的問題,它的結構,和哪些種類的解決方法最適合這個問題。

用一個機器學習或者統計的工做平臺來研究這個數據集。這樣你能專心解答關於這個數據集你要研究的問題,而不是分心去學習某個特定的技術或者如何寫代碼來實現它。

一些能夠幫助你學習實驗性的機器學習數據集的策略有:

  • 清晰地描述這個數據集所呈現的問題。
  • 用描述性的統計數據來總結數據。
  • 描述你從數據中觀察到的結構,而且提出對數據間關係的假設。
  • 簡單地在這個數據集上測試一些經常使用的機器學習算法,而後發掘哪些類別的算法比其餘的表現好
  • 調整表現好的算法的參數,而後發掘什麼算法及算法參數設置在這個問題上表現得好

你能夠從這些包含高質量數據集的庫中選擇: UCI ML Repository,Kaggle 和 data.gov.

3. 學習一個機器學習算法

選擇一個算法,深刻理解它,發掘什麼樣的參數設置在不一樣數據集上都穩定。

我推薦你從一箇中等複雜度的算法開始學起。選一個已經被人充分理解了的,有許多可選的開源實現,而且須要你探索的參數數目較少的算法。你的目的是創建有關這個算法在不一樣問題和不一樣參數設定下表現如何的直覺。

使用一個機器學習平臺或者類庫。這樣能讓你把這個算法當成一個「系統」,專心研究它的表現,而不是分心研究數學公式描述或者相關論文。

一些學習你選定的機器學習算法時可採起的策略有:

  • 總結系統的參數,及它們對算法可能有什麼影響
  • 選一系列適合這個算法,可能致使不一樣表現的數據庫
  • 選擇一些你認爲能致使不一樣結果的算法的參數設置,而後列出你認爲系統可能的表現
  • 考慮在迭代過程或不一樣時間段內能被監察到的算法表現
  • 用一個或多個數據集,算法設置和結果衡量方式來設計解決特定問題的小實驗,而且彙報結果

你能夠學簡單點,也能夠學複雜點。想多學一點的話,你能夠探索所謂的啓發式規則或經驗法則來使用算法,而且以實驗爲依據來展現它們好很差用,及若是好用的話在什麼條件下他們與成功的結果有關聯。

一些你能夠考慮學習的算法有:最小平方線性迴歸,邏輯迴歸,K最近鄰分類算法,感知器算法。

4. 實現一個機器學習算法

選一個算法,而後選一個編程語言來實現它,或者把一個已有的實現移植到你選定的編程語言上。

你應選擇一箇中等複雜度的算法來實現。我推薦你仔細研究你想要實現的算法,或選擇一個你喜歡的已有實現而後把它移植到你選定的編程語言。

從頭開始實現一個算法,是學習那些關於把算法描述轉換成一個可行的系統的過程當中必需要作的無數的小決定的好方法。在不一樣算法上重複這個過程,很快你就能對讀懂論文和書裏面算法的數學描述有感受了。

五個能幫助你從頭開始實現機器學習算法的策略有:

  •  從代碼移植開始。把開源的算法實現從一種語言移植到另一種語言能教會你算法是如何實現的,而且你能擁有並掌握它。這是開始學習的最快的途徑,很是值得推薦。
  • 從一個算法描述開始,而後採集一些其餘的描述來幫助你排除歧義而且理解主要的那個參考材料。
  • 多讀該算法的不一樣實現。學習不一樣程序員是如何理解算法描述而且如何把它轉換成代碼的。
  • 不要陷入過炫的方法太深。許多機器學習算法的內核用的都是高級優化算法。不要嘗試從新實現這些方法,除非這就是你作這個項目的本意。你應該用一個提供優化算法的類庫,或者用一個更容易實現的或者類庫裏就有的簡單點的優化算法(如梯度降低算法)。

小型項目方法論

以上四個策略屬於我稱爲「小型項目」的方法論。你用這個方法能夠很快創建在技術領域(好比機器學習)方面的實用技能。大意就是你設計而且親手完成解決特定問題的小項目。

小型項目在幾個方面應該足夠小,才能保證你能完成它們而且從中學習,而後好步入到下一個項目中去。下面是一些你應該考慮加在項目上的一些限制:

  • 時間短:一個項目從頭到最後能有可展示的結果不該超過5-15小時。這樣利用一週中不上班的晚上和週末時間你就能完成一個小項目。
  • 範圍小:一個項目應該有意義,但同時應該是你感興趣的問題的範圍最小的版本。舉個例子,與其解決廣義的「寫一個能告訴我微博是否會被轉發的程序」,還不如去研究這個問題在一個特定的帳號在一個特定的時間段內的表現。
  • 所需資源少:一個項目應該能用你的可聯網的臺式或者筆記本電腦完成。你不該該須要奇葩的軟件,網絡架構,或者第三方數據或者服務。你應蒐集須要的數據,讀入內存,用開源工具來解決你那個小問題。

額外有關項目的小貼士

這些策略的原則是讓你利用你的程序員技能開始行動。下面是三條幫助你調整思惟模式,有助你開始行動的小貼士:

  • 寫下你學到的東西。我推薦你每一個步驟都產生一個有形的勞動成果。它能夠是本子裏的筆記,微博,博客文章或者是開源項目。每一個勞動成果均可以做爲一個里程碑或錨。
  • 除非項目的目的是寫代碼,不然不要寫。這條不是那麼顯而易見,但倒是最能幫助你加快理解機器學習的速度的建議。
  • 目的是學到東西,而不是產生獨一無二的資源。不要管是否有人讀你關於一個算法的研究、教程或是筆記。這些都是你的觀點,是你的勞動成果,他們證實你如今掌握到了知識。

總結

下面是這些策略的一句話清晰總結,能夠幫助你選擇適合本身的那個。

  1. 學習一個機器學習工具:選擇一個你喜歡的工具或類庫,學習如何很好的使用它。。
  2. 學習一個機器學習數據集:選擇一個數據集,深刻地離家它,發掘哪類算法處理它最有效。
  3. 學習一個機器學習算法:選擇一個算法,深刻理解它,發掘什麼樣的參數設置在不一樣數據集上都穩定。
  4. 實現一個機器學習算法:選擇一個算法,用你選定的語言實現它或者是把已有的實現移植到你選定的語言上。

選一個吧!

PDF指導手冊

若是你喜歡這篇自學策略文章,做者建立了一個32頁的有關學習並實踐應用機器學習的PDF指導手冊。看這裏:

小項目方法論:學習並實踐應用機器學習

做者還建立了一個包含90個項目想法的清單,做爲附加福利加在這個指導裏面了。

相關文章
相關標籤/搜索