機器學習入門階段程式設計師易犯的5個錯誤

jobbole發表於2014-04-23

  怎樣進入機器學習領域沒有定式。我們的學習方式都有些許不同,學習的目標也因人而異。

  但一個共同的目標就是要能儘快上手。如果這也是你的目標,那麼這篇文章為你列舉了程式設計師們在通往機器學習高手道路上常見的五種錯誤。

  1.將機器學習看得高不可攀

  機器學習不過是另一堆技術的集合,你可以用它來解決複雜問題。這是一個飛速發展的領域,因此,機器學習的學術交流一般出現在學術期刊及研究生的課本里,讓它看起來高不可攀又難於理解。

  要想高效掌握機器學習,我們需要轉變觀念,從技術轉到方法,由精確變為“足夠好”,這也同樣適用於程式設計師感興趣的其它複雜技術。

  2.編寫機器學習程式程式碼

  由編碼開始入門機器學習會很困難,因為你需要解決的問題從一個變成兩個:瞭解一項技術以便你實現它以及對於給定問題如何應用該項技術。一次解決一個問題,並利用機器學習、統計分析環境以及演算法庫來學習如何將一項技術應用於某一問題,這樣就會容易很多。這能讓你對於若干演算法進行相對快速的抽查和調整,而無需花上大量時間閱讀研究論文中含糊的演算法描述再將其編碼。

  實現一個演算法可以作為一個單獨的專案晚些再完成,比如作為一個練習或是等到原型系統需要投入執行時。一時只學一事,我建議從有GUI的機器學習框架開始入門,不論你是不是程式設計師。

  3.手動搞定工作

  實用機器學習包括問題定義、資料準備、結果表達等步驟,它們與演算法的測試和調整都能夠並應該實現自動化。

  在現代軟體開發的編譯、測試和部署中,自動化操作佔有重要地位。對資料準備、演算法測試除錯、結果的表達編寫自動指令碼可以在準確性和改進速度方面獲得巨大的優勢。在專業軟體開發課程中學習的知識要牢記於心並不斷應用。

  可能很多學習機器學習的程式設計師看的書、上的課對於這一領域的應用本質關注不多,導致很多人入門階段沒有使用自動化手段。實際上,將自動化技術應用到實用機器學習的方方面面會是程式設計師的巨大機遇。

  4.對常見問題重複求解

  你正要實現的演算法,或是與你正在求解的問題相似的問題,可能早有千百人解決了,就利用他們的經驗吧。

  解決機器學習問題的知識非常多,當然它們可能都在書本或學術出版物中,但你可以訪問它們。做好你的功課,在谷歌谷歌圖書谷歌學術上搜尋,還可以去機器學習的網路社群。

  如果你正要實現一個演算法:

  • 必須實現它嗎?可不可以在某個庫或工具中找到開源的實現複用呢?
  • 你的實現必須從頭做起嗎?可不可以對現有的開源實現進行程式碼審查,從中學習或是移植呢?
  • 你必須對標準演算法描述編碼嗎?在其它書論文或是帖子中沒有別的演算法描述可供程式碼審查及借鑑呢?

  如果你正要求解某個問題:

  • 你必須測試針對這個問題的所有演算法嗎?這一問題或是同一大類相似問題有沒有研究成果顯示一些演算法或演算法類表現良好可供利用?
  • 你必須自己蒐集資料嗎?有沒有公開的資料集或是API你可以直接使用或是作為你問題的替代,以快速弄清哪種方法可以有良好表現?
  • 你必須優化演算法的引數嗎?在對演算法的研究和論文中有沒有可用的啟發式方法來配置演算法呢?

  如果你在程式設計函式庫或是特定某一資料結構方面遇到問題,你會選擇什麼策略,在機器學習領域就用相同的策略吧。參與網路社群並尋求可供利用的資源,可以加速你的學習和專案開發程式。入門階段可以考慮論壇和問答網站,之後可以與學者和專家聯絡。

  5.忽視數學

  起步階段你並不需要數學理論,但是數學在機器學習中地位重要。因為它能提供最有效、最清晰的方法描述問題及系統的行為。

  忽略演算法中的數學方法會導致諸多問題,如對某一方法理解有限或是對演算法編碼時受到限制。舉個例子,很多機器學習演算法的核心優化是增量式的演進。如果你能明白優化的本質(凸函式),你就能利用這些知識來使用高效的優化演算法。

  將演算法的數學方法內化於心過程緩慢,但你的功力卻也隨之提升。特別是如果你要從零開始實現高階演算法,包括演算法的內部優化,多多花時間從數學角度來理解演算法吧。

  總結

  你從本帖學到了程式設計師在機器學習的入門階段容易犯的5個錯誤。5個教訓是:

  • 別把機器學習看得高不可攀
  • 別寫機器學習的程式碼
  • 別手動搞定一切
  • 別對常見問題重複求解
  • 別忽視數學

  原文連結: machine learning mastery   翻譯: 伯樂線上 - toolate

相關文章