貼上671coder的一篇帖子 :java
原址見 :http://blog.csdn.net/liuqiyao_01/article/details/37904611 python
前言
事實上有許多的途徑能夠了解機器學習,也有許多的資源例如書籍、公開課等可爲所用,一些相關的比賽和工具也是你瞭解這個領域的好幫手。本文我將圍繞這個話題,給出一些總結性的認識,併爲你由程序員到機器學習高手的蛻變旅程中提供一些學習指引。程序員
機器學習的四個層次
根據能力能夠將學習過程分紅四個階段。這也是一個有助於咱們將全部學習資源進行分類的好方法。
初學階段
新手階段
中級階段
高級階段
我之因此把初學階段和新手階段區分開來,是由於我想讓那些徹底初學者(對這個領域感興趣的程序員)在初學階段對機器學習有一個大體的認識,以便決定是否繼續深刻。
咱們將分別探討這四個階段,並推薦一些可以幫助咱們更好地理解機器學習和提升相關技能的資源。對學習階段進行這樣的分類只是我我的的建議,也許每一個分類的先後階段中也有一些適合當前階段的資源。
我認爲對機器學習有一個總體性的認識是很是有幫助的,我也但願能聽聽大家的想法,經過在下面評論告訴我吧!
初學階段
初學者是指那些對機器學習感興趣的程序員。他們或許已經接觸過一些相關的書籍、wiki網頁,或者是已經上過幾節機器學習課程,可是他們並無真正地瞭解機器學習。他們在學習過程感到沮喪是由於他們獲得的建議每每是針對中級或高級階段的。算法
初學者須要的是一個感性的認識而不是純粹的代碼、教科書、課程。他們首先須要對機器學習有一個是什麼、爲何、怎麼作的認識以此爲接下來的階段學習奠基基礎。
入門書籍:閱讀一些爲程序員而寫的數據挖掘與機器學習的入門書籍,例如《機器學習:實用案例解析 》、《集體智慧編程》、《數據挖掘:實用機器學習工具和技術》,這些都是很好的入門書籍,推薦一篇進一步討論這個話題的文章:《機器學習的最佳入門學習資源》
相關概述視頻:也能夠看一些科普性質的機器學習演講。例如: 《採訪Tom Mitchel》、《Peter Norvig 在Facebook的大數據演講》
與人交談:與機器學習領域的老手交流,問問他們是如何入門的,有什麼資源值得推薦,是什麼讓他們對機器學習如此狂熱。
機器學習課程101:我總結了一些關於入門的觀點,《爲初學者準備的機器學習課程101》,若是你喜歡能夠看一看。編程
新手階段
新手是指那些已經對機器學習有必定了解的人,他們已經閱讀過一些專業書籍或者是接受過完整地課程學習,而且對這個東西有很大的興趣想作更深刻的瞭解,想經過進一步學習去解決他們所面臨的問題。小程序
下面是給新手的一些資料或者建議:
完成一門課程:完整地學習一門機器學習的課程,例如斯坦福大學的機器學習課程。多作課程筆記,儘量地完成課程做業,多問問題。
閱讀一些書籍:這裏指的不是教科書,而是爲上面所列舉的爲程序員初學者所準備的書籍。
掌握一門工具:學會使用一門分析工具或者類庫,例如python的機器學習包Scikit-Learn、java的機器學習包WEKA、R語言或者其餘相似的。具體地說,學習如何使用你在課程或書本上學來的算法,看看它們處理問題的實際效果。
寫一寫代碼:動手實現一些簡單的算法,例如感知機、K近鄰、線性迴歸。試圖寫一些小程序去闡述你對這些算法的理解。
學習相關教程:完整地跟一門教程,爲你所完成的小項目創建一個文件夾,其中包含數據集、腳本代碼等,以便你能夠隨時回顧並有所收穫。機器學習
中級階段
在新手階段已經閱讀過一些專業書籍並完成了一些專業課程,這些人已經懂得如何使用機器學習相關的工具,而且也已經爲實現機器學習算法和完成一些教程 寫過很多的代碼了。中級階段實際上是一個自我突破的過程,能夠經過創建本身的項目去探索新的技巧並在社區的交流互動中獲取更多的知識。工具
中級階段的目標是學習如何實現並使用準確、合適、健壯機器學習算法。一樣,他們也在數據預處理、數據清洗、概括總結上花了很多時間,並思考這些數據能解決什麼問題。
下面是給中級學習者的一些資料或者建議:
創建本身的小項目:本身設計小型的編程項目或者是應用機器學習算法解決問題的小實驗。這就像是爲探索你本身所感興趣的技術而設計一些教程。你能夠本身實現一個算法或者是提供一些實現這些算法類庫的連接。
數據分析:習慣於從數據集中探索並總結。知道何時該用什麼工具,獲取用於探索、學習相關技術的數據。
閱讀教科書:閱讀並消化機器學習相關的教科書。這可能對理解用數學方式描述相關技術的能力有必定的要求,而且須要瞭解用公式的方式去對描述問題和算法。
編寫你本身的工具:爲開源的機器學習平臺或類庫編寫插件和相關的程序包。這是學習如何實現健壯的、能用於生產環境下的算法的一個很好的鍛鍊機會。 將你的程序包運用到項目中,將代碼提交給社區進行代碼審覈,若是可能的話,努力將你的程序發佈到開源的平臺上,從你們的反饋中進一步學習。
競賽:參加與機器學習有關的比賽,好比與機器學習會議有關的,或者是提供像Kaggle這樣的平臺的比賽。參與討論、提問題,學習其餘參賽者是如何解決問題的。將這些項目、方法和代碼添加到你的項目庫中。學習
高級階段
機器學習的高級玩家是那些已經整理過大量機器學習算法或者是本身獨立實現算法的人。他們或許參加過機器學習的競賽又或許寫過機器學習的程序包。他們已經閱讀過許多書籍、學習過許多相關課程,對這一領域有較充分的認識,同時對本身研究的幾個關鍵技術有很深刻的瞭解。大數據
這些高級使用者平時負責生產環境下的機器學習系統的創建、部署和維護。他們能時刻緊跟這個行業的最新動態,經過本身或他人的一線開發經驗發現並瞭解每一種機器學習技術的細微差距。
下面是給高級階段學習者的一些資料:
定製開發算法:根據業務需求定製開發算法,實現會議、期刊論文中關於某個類似問題的算法。
本身設計算法:設計全新的算法去解決工做中 遇到的問題,這樣作的目的更多的是爲工做中所面臨的困難找到最佳的解決方案,而不是進行該領域的前沿研究。
案例學習:閱讀甚至是從新設計機器學習競賽或者是其餘參賽者所提供的實際案例。這些一直在談「我是如何作到」的論文或文章中老是塞滿了關於數據準備、工程實踐以及使用技術的微妙技巧。
方法論:總結處理問題的過程並系統化,能夠正式地分享出來也能夠僅僅是做爲我的總結。他們總有一套本身解決問題的思路而且不斷地提煉和改進處理過程,試圖用更好的技術來或得最佳實踐。
學術研究:參加學術會議,閱讀研究論文和學術專著,與機器學習領域的專家交流學習。他們會記錄工做中所積累的經驗發佈到相關的期刊或者本身博客上,而後回到工做崗位繼續研究。
知識在不斷地收穫,但學習永無止境。在機器學習的征途中遇到問題時你能夠隨時停住腳步本身鑽研問題自行解決,或者繞道而行查閱資料借用羣體智慧,事實上,我但願繞道而行成爲一種常態。
這樣的學習階段劃分是以程序員的角度來規劃的,這能夠做爲技術人員實現從入門到精通的一條線性學習路線。我很樂意收到對於這篇文章的批評建議,這樣可使文章變得更好。在特定的學習階段你能夠獲得更多的學習資源,由於針對每一個階段所推薦的學習資源也僅僅是我我的的建議。
好了,如今想一想你在哪一個學習階段呢?接下來你該怎麼作?