經常聽到這樣的話:
“我是一名軟件開發工程師,閱讀過一些關於機器學習方面的書籍和博客文章,也學習過一些在線的關於機器學習的公開課。但是,我仍然不知道怎麼應用到工程實踐中……”
在這一篇文章中,我分享一下對這個話題的深入思考:
- 你會發現傳統的學習機器學習的方法,對你並不起作用;
- 你會發現如何更好的理解所有的模型;
- 你會發現我的簡單而高效的方法,對你在工程中應用機器學習很奏效。
- 熱愛機器學習的軟件工程師
你是一名軟件開發工程師,現在,機器學習、大數據很熱門、快速增長,你想進入這個領域。
你閱讀過一些關於機器學習方面的博客,現在,你想做的更深入一點,但是,大部分書籍和論文,要麼是側重理論研究,要麼是側重算法、數學公式推導。
你可能參加過一些在線公開課,比如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!
下面一幅圖結束本文:
希望通過這篇文章,解答大家對機器學習的畏懼和疑惑