乾貨|程序員到機器學習工程師飛躍的實戰經驗

經常聽到這樣的話:

“我是一名軟件開發工程師,閱讀過一些關於機器學習方面的書籍和博客文章,也學習過一些在線的關於機器學習的公開課。但是,我仍然不知道怎麼應用到工程實踐中……”

在這一篇文章中,我分享一下對這個話題的深入思考:

  1. 你會發現傳統的學習機器學習的方法,對你並不起作用;
  2. 你會發現如何更好的理解所有的模型;
  3. 你會發現我的簡單而高效的方法,對你在工程中應用機器學習很奏效。
  • 熱愛機器學習的軟件工程師

你是一名軟件開發工程師,現在,機器學習、大數據很熱門、快速增長,你想進入這個領域。

你閱讀過一些關於機器學習方面的博客,現在,你想做的更深入一點,但是,大部分書籍和論文,要麼是側重理論研究,要麼是側重算法、數學公式推導。

你可能參加過一些在線公開課,比如Coursera、Edx,但是,除了完成課後練習,獲得畢業證書,對你的工程實踐來說,也幫助不大。

你可能參加過一些競賽,比如,Kaggle,使用過一些小型的數據集。最大的問題是,你不能把書籍、論文中學到的理論知識和實際工程問題連接起來。那麼你應該怎麼做才能突破這個障礙?

  • 機器學習工程師

當你思考未來,你掌握了目前最熱門的機器學習,你的工作將會發生什麼樣的變化?如果,在你的日常生活中,可以熟練應用機器學習的技能,你的生活將會發生什麼改變?

  • 傳統的方法是完全錯誤的

試想一下,這種“自下而上”教授機器學習的方法,是嚴格而且系統化的。聽起來表面上是正確的,它怎麼可能是錯誤的呢?

  • 自下而上的方法

假如你原來對機器學習很感興趣,但是,學完那些晦澀難懂的理論,枯燥無謂的數學推導,你對機器學習的興趣大打折扣,而面對實際的問題,你又不知道如何入手?對開發更智能化的系統畏懼。

  • 最佳的解決方法

與計算機科學一樣,它不能只是自上而下轉換模型和教授相同的材料。

究其原因,就像計算機科學一樣,它們從來不討論涵蓋軟件開發和交付的實際問題。機器學習課程和書籍,僅僅停留在算法討論層面。

你需要一種“自上而下”的學習機器學習的方法。這種方法是,專注於你實際想要的結果,藉助合適的機器學習工具解決你的實際問題。

  • 可以重複實驗的系統性流程

一旦你瞭解一些工具,簡單的調用裏面的算法,然後,你就認爲完成了任務。這可能是一種很危險的想法。

你怎麼知道你做了什麼,你怎麼知道結果好麼?你怎麼知道結果是建立在可靠的數據集上的呢?

當你解決實際機器學習問題時,你需要系統化。這是一個項目,就像軟件項目一樣,一個規範化的流程,可以實現高質量的、結果可重複性的項目。

考慮這樣一個流程,比如:

  • 能引導你從端到端,從分析實際問題,到解決實際問題、到模型的部署。像軟件開發一樣,從PM提出產品需求到RD開發再到QA測試上線一樣,它是一個標準化、規範化的流程。
  • 一個循序漸進的過程,這樣你永遠知道下一步該做什麼,不知道下一步做什麼,對項目而言是很危險的。
  • 一個可以保證好的結果的流程,這對於一個項目而言是很重要的,它的結果是需要可信、可解釋的。
  • 與具體使用的工具、使用的編程語言、使用的算法沒有關係,新工具會誕生、新算法會出現。

下面列舉一些常用的流程,有些已經過時,但是,根據你的需要,選擇合適的處理流程。比如:

  • Knowledge Discovery in Databases (KDD)
  • CRISP-DM
  • OSEMN
  • others…
  • 選擇最適合你流程的工具

機器學習工具和庫,比較多,更新比較快,選擇一個最合適你工作流程的工具,首先,調研工具和庫的優缺點,根據你目前要解決的問題,選擇合適的工具。

通常,你去諮詢你的朋友,他們建議你選擇最新的工具。但是,我喜歡用不同的工具,解決不同的實際問題。

比如,在這些場景下,我建議選擇這些工具:

  • 初學者&緊急任務 我建議選擇,Weka這樣的工具,對於初學者來說,比較容易上手,而且是圖形化操作,方便快捷,集成許多算法。對於,特殊、緊急的任務需求也是不錯的選擇。
  • 小數據量、高精度任務

我建議選擇,像R的工具包,它是統計學家最喜歡的工具包,裏面集成好多,最新的學術的算法。Python的機器學習庫,scikit-learn也是目前和熱門的機器學習庫,它的社區比較活躍,也有完整的可以參考學習的文檔,它可移植性也強,可以部署到實際生產環境中。

  • 大數據時代的智能系統

我建議選擇,像mahout,Spark這樣的工具,它是分佈式處理,對於海量數據處理是一個不錯的選擇,它的缺陷是,算法迭代速度慢,機器學習庫還不是很完善。

實際上,在工作中,這些工具都有需要:

  • 針對實際問題,開發小項目

你應該通過解決一些實際的問題,反覆的練習,熟悉工具包,更好的使用自上而下的方法,提高你在解決問題中應用機器學習的技能。

首先,你應該選擇一些實際生產環境好的數據集,如果,沒有,選擇一些公開的數據集也不錯,比如:UCI Machine Learning Repository、KDD比賽提供的數據集。

然後,你申請GitHub帳號,分享自己的項目,對提高自己也是不錯的選擇。在你的博客中,指明你的github鏈接。

對程序員來說,這是一個很好的方法:

你不需要寫太多的代碼,因爲有Weka這樣的工具包;你不需要懂太多的數學理論知識,已經有實現好的庫;你不需要很高的學歷,因爲這不是做科研工作;你不需要很大的數據集,Excle的數據就可以;你不要很高性能的計算機,有一臺筆記本就可以;你不需要大量的時間,你每天抽出半個小時就OK。

我經常給人們提上面這些建議,但是,實際中,還是犯這些錯誤,希望你能避免:

  • Not Taking Action:
  • Picking Problems that are TooBig:
  • Implementing Algorithms fromScratch:
  • Not Sticking to a Process:
  • Not Using Resources:
  • 下一步你應該幹什麼?
  • Select a process.
  • Select a tool or platform.
  • Select your first dataset .
  • Report back in the comment below andexecute!

下面一幅圖結束本文:

希望通過這篇文章,解答大家對機器學習的畏懼和疑惑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章