如何通過自學,成為數據挖掘“高手”?
基礎篇:
1. 讀書《Introduction to Data Mining》,這本書很淺顯易懂,沒有復雜高深的公式,很合適入門的人。另外可以用這本書做參考《Data Mining : Concepts and Techniques》。第二本比較厚,也多了一些數據倉庫方面的知識。如果對算法比較喜歡,可以再閱讀《Introduction to Machine Learning》。
2. 實現經典算法。有幾個部分:
a. 關聯規則挖掘 (Apriori, FPTree, etc.)
b. 分類 (C4.5, KNN, Logistic Regression, SVM, etc.)
c. 聚類 (Kmeans, DBScan, Spectral Clustering, etc.)
d. 降維 (PCA, LDA, etc.)
e. 推薦系統 (基于內容的推薦,協同過濾,如矩陣分解等)
然后在公開數據集上測試,看實現的效果。可以在下面的網站找到大量的公開數據集:http://archive.ics.uci.edu/ml/
3. 熟悉幾個開源的工具: Weka (用于上手); LibSVM, scikit-learn, Shogun
4. 到 https://www.kaggle.com/ 上參加幾個101的比賽,學會如何將一個問題抽象成模型,并從原始數據中構建有效的特征 (Feature Engineering).
到這一步的話基本幾個國內的大公司都會給你面試的機會。
進階篇:
1. 讀書,下面幾部都是大部頭,但學完進步非常大。
a.《Pattern Recognition and Machine Learning》
b.《The Elements of Statistical Learning》
c.《Machine Learning: A Probabilistic Perspective》
第一本比較偏Bayesian;第二本比較偏Frequentist;第三本在兩者之間,但我覺得跟第一本差不多,不過加了不少新內容。當然除了這幾本大而全的,還有很多介紹不同領域的書,例如《Boosting Foundations and Algorithms》,《Probabilistic Graphical Models Principles and Techniques》;以及理論一些的《Foundations of Machine Learning》,《Optimization for Machine Learning》等等。這些書的課后習題也非常有用,做了才會在自己寫Paper的時候推公式。
2. 讀論文。包括幾個相關會議:KDD,ICML,NIPS,IJCAI,AAAI,WWW,SIGIR,ICDM;以及幾個相關的期刊:TKDD,TKDE,JMLR,PAMI等。跟蹤新技術跟新的熱點問題。當然,如果做相關research,這一步是必須的。例如我們組的風格就是上半年讀Paper,暑假找問題,秋天做實驗,春節左右寫/投論文。
3. 跟蹤熱點問題。例如最近幾年的Recommendation System,Social Network,Behavior Targeting等等,很多公司的業務都會涉及這些方面。以及一些熱點技術,例如現在很火的Deep Learning。
4. 學習大規模并行計算的技術,例如MapReduce、MPI,GPU Computing。基本每個大公司都會用到這些技術,因為現實的數據量非常大,基本都是在計算集群上實現的。
5. 參加實際的數據挖掘的競賽,例如KDDCUP,或 https://www.kaggle.com/ 上面的競賽。這個過程會訓練你如何在一個短的時間內解決一個實際的問題,并熟悉整個數據挖掘項目的全過程。
6. 參與一個開源項目,如上面提到的Shogun或scikit-learn還有Apache的Mahout,或為一些流行算法提供更加有效快速的實現,例如實現一個Map/Reduce平臺下的SVM。這也是鍛煉Coding的能力。
到這一步國內的大公司基本是想哪去哪,而且待遇也不差;如果英語好,去US那邊的公司難度也不大了。
2條討論
1bitbp 2012-09-22 11:57
支持者: ifas 張小耳 Candy Two shuimuyuan 白色羽毛筆 更多
本人談不上什么高手,下面是個人的一點看法。
一,可以先找一些數據挖掘方面優秀教材來看,把一些基礎且重要的東西理解清楚。R/matlab/SAS之類是都是一些工具,雖然學會使用工具挺重要,但關鍵還是工具后面的思想。關于自學,不知lz是否看過下面的帖子。其中,我挺贊同帖子中pongba的‘只看好書’的看法。
http://www.guokr.com/question/132920/?bsh_bid=98365272
二,個人覺得非常重要的一點,盡量參與一些真實的實踐項目,從實際項目/問題出發學得更快,也學得更好!數據挖掘是個很寬泛的概念,涉及面很廣,不同應用領域的數據挖掘也不一樣。從一些項目作為切入點,你可以了解到哪些知識是最欠缺的,哪些最需要學的,然后再逐漸擴充相關的知識。
三,估計學什么都差不多,需要不斷堅持和積累吧。
數據挖掘這個東西,要看你追求的是什么?
注意到你是想自學?那一幫情況下,就可以理解為不是奔科研去的,看起來應該是追求實用。
那么作為一個帶了N年數據分析團隊,算是有點經驗的人,建議你找點實際的項目去做。
首先是要弄明白你想挖點什么出來?如果你說不知道,抱歉,你可能還是在追科研的路。
實際的項目中:
首先就是要明確你希望挖的東西能產生什么業務價值,而非用什么挖掘算法,那是手段,可以在后面再關注;要能夠具體描繪你的挖掘目標、價值,以及挖掘成果的預期展現形式,說服力如何,等等;
其次,和相關的小伙伴討論,為了挖出你想要的成果,需要利用到哪些數據?這些數據中,哪些是已經有的,哪些還得想辦法去收集?其中是否有些數據根本是不可能收集到的?這些收集不到的數據對于你想挖的成果會有什么影響?如果是致命影響,直接導致你的挖掘成果缺乏說服力,那就此歇菜,另找其他方向吧。反之,則安排計劃和資源,把能收集到的數據盡快收集起來;
再次,根據收集到的數據的特點和收集過程的質量情況,清洗收集到的數據;
根據挖掘目標的情況和收集到的數據的特點,制定挖掘規劃,選擇合適的挖掘算法;
然后,就開始挖吧;
第一輪挖完,看看成果如何?有道理嗎?有說服力嗎?大多數情況,你會發現,哦,暈,忘了應該把這幾個因素考慮進去了,還應該加進去這幾方面的數據才能看出來。好,繼續轉向第2步,繼續收集數據、清洗、調算法/參數,挖出來后再評估,一般情況得這么循環N個回合;
馬馬虎虎出來個差不多靠譜、勉強能自圓其說的初胚,這個成果看上去像那么回事兒了。
總結一個說法(分析成果)出來,為了你的說法,把數據再針對性地洗上幾遍,給出一個更加干凈的分析成果,這個版本基本上有說服力了。
講究一點的,再畫個信息圖什么的,圖文并茂,就可以初步交作業了;
在真實的項目中,還有一步,就是選取重要的評估視角和指標,根據具體的業務特點,把你的分析過程做成每周/每日/每小時都能給個角度固定的分析報告的服務。
再往前一步,如果你對這塊業務真的很熟的話,還可以針對不同類型的分析結果,能給出相應的建議應對措施(Action),這樣這此挖掘的業務價值就真正明確了。你做的活兒也沒有停留在“活兒”這個份兒上,而是決策支持這個級別上了。
磨刀不誤砍柴工。在學習數據挖掘之前應該明白幾點:
數據挖掘目前在中國的尚未流行開,猶如屠龍之技。
數據初期的準備通常占整個數據挖掘項目工作量的70%左右。
數據挖掘本身融合了統計學、數據庫和機器學習等學科,并不是新的技術。
數據挖掘技術更適合業務人員學習(相比技術人員學習業務來的更高效)
數據挖掘適用于傳統的BI(報表、OLAP等)無法支持的領域。
數據挖掘項目通常需要重復一些毫無技術含量的工作。
如果你閱讀了以上內容覺得可以接受,那么繼續往下看。
學習一門技術要和行業靠攏,沒有行業背景的技術如空中樓閣。技術尤其是計算機領域的技術發展是寬泛且快速更替的(十年前做網頁設計都能成立公司),一般人沒有這個精力和時間全方位的掌握所有技術細節。但是技術在結合行業之后就能夠獨當一面了,一方面有利于抓住用戶痛點和剛性需求,另一方面能夠累計行業經驗,使用互聯網思維跨界讓你更容易取得成功。不要在學習技術時想要面面俱到,這樣會失去你的核心競爭力。
一、目前國內的數據挖掘人員工作領域大致可分為三類。
1)數據分析師:在擁有行業數據的電商、金融、電信、咨詢等行業里做業務咨詢,商務智能,出分析報告。
2)數據挖掘工程師:在多媒體、電商、搜索、社交等大數據相關行業里做機器學習算法實現和分析。
3)科學研究方向:在高校、科研單位、企業研究院等高大上科研機構研究新算法效率改進及未來應用。
二、說說各工作領域需要掌握的技能。
(1).數據分析師
需要有深厚的數理統計基礎,但是對程序開發能力不做要求。
需要熟練使用主流的數據挖掘(或統計分析)工具如Business Analytics and Business Intelligence Software(SAS)、SPSS、EXCEL等。
需要對與所在行業有關的一切核心數據有深入的理解,以及一定的數據敏感性培養。
經典圖書推薦:《概率論與數理統計》、《統計學》推薦David Freedman版、《業務建模與數據挖掘》、《數據挖掘導論》、《SAS編程與數據挖掘商業案例》、《Clementine數據挖掘方法及應用 》、《Excel 2007 VBA參考大全》、《IBM SPSS Statistics 19 Statistical Procedures Companion》等。
(2).數據挖掘工程師
需要理解主流機器學習算法的原理和應用。
需要熟悉至少一門編程語言如(Python、C、C++、Java、Delphi等)。
需要理解數據庫原理,能夠熟練操作至少一種數據庫(Mysql、SQL、DB2、Oracle等),能夠明白MapReduce的原理操作以及熟練使用Hadoop系列工具更好。
經典圖書推薦:《數據挖掘概念與技術》、《機器學習實戰》、《人工智能及其應用》、《數據庫系統概論》、《算法導論》、《Web數據挖掘》、《 Python標準庫》、《thinking in Java》、《Thinking in C++》、《數據結構》等。
(3).科學研究方向
需要深入學習數據挖掘的理論基礎,包括關聯規則挖掘 (Apriori和FPTree)、分類算法(C4.5、KNN、Logistic Regression、SVM等) 、聚類算法 (Kmeans、Spectral Clustering)。目標可以先吃透數據挖掘10大算法各自的使用情況和優缺點。
相對SAS、SPSS來說R語言更適合科研人員The R Project for Statistical Computing,因為R軟件是完全免費的,而且開放的社區環境提供多種附加工具包支持,更適合進行統計計算分析研究。雖然目前在國內流行度不高,但是強烈推薦。
可以嘗試改進一些主流算法使其更加快速高效,例如實現Hadoop平臺下的SVM云算法調用平臺--web 工程調用hadoop集群。
需要廣而深的閱讀世界著名會議論文跟蹤熱點技術。如KDD,ICML,IJCAI,Association for the Advancement of Artificial Intelligence,ICDM 等等;還有數據挖掘相關領域期刊:ACM Transactions on Knowledge Discovery from Data,IEEE Transactions on Knowledge and Data Engineering,Journal of Machine Learning Research Homepage,IEEE Xplore: Pattern Analysis and Machine Intelligence, IEEE Transactions on等。
可以嘗試參加數據挖掘比賽培養全方面解決實際問題的能力。如Sig KDD ,Kaggle: Go from Big Data to Big Analytics等。
可以嘗試為一些開源項目貢獻自己的代碼,比如Apache Mahout: Scalable machine learning and data mining ,myrrix等(具體可以在SourceForge或GitHub.上發現更多好玩的項目)。
經典圖書推薦:《機器學習》 《模式分類》《統計學習理論的本質》《統計學習方法》《數據挖掘實用機器學習技術》《R語言實踐》,英文素質是科研人才必備的《Machine Learning: A Probabilistic Perspective》《Scaling up Machine Learning : Parallel and Distributed Approaches》《Data Mining Using SAS Enterprise Miner : A Case Study Approach》《Python for Data Analysis》等。
三、以下是通信行業數據挖掘工程師的工作感受。
真正從數據挖掘項目實踐的角度講,溝通能力對挖掘的興趣愛好是最重要的,有了愛好才可以愿意鉆研,有了不錯的溝通能力,才可以正確理解業務問題,才能正確把業務問題轉化成挖掘問題,才可以在相關不同專業人才之間清楚表達你的意圖和想法,取得他們的理解和支持。所以我認為溝通能力和興趣愛好是個人的數據挖掘的核心競爭力,是很難學到的;而其他的相關專業知識誰都可以學,算不上個人發展的核心競爭力。
說到這里可能很多數據倉庫專家、程序員、統計師等等都要扔磚頭了,對不起,我沒有別的意思,你們的專業對于數據挖掘都很重要,大家本來就是一個整體的,但是作為單獨一個個體的人來說,精力有限,時間有限,不可能這些領域都能掌握,在這種情況下,選擇最重要的核心,我想應該是數據挖掘技能和相關業務能力吧(從另外的一個極端的例子,我們可以看, 比如一個迷你型的挖掘項目,一個懂得市場營銷和數據挖掘技能的人應該可以勝任。這其中他雖然不懂數據倉庫,但是簡單的Excel就足以勝任高打6萬個樣本的數據處理;他雖然不懂專業的展示展現技能,但是只要他自己看的懂就行了,這就無需什么展示展現;前面說過,統計技能是應該掌握的,這對一個人的迷你項目很重要;他雖然不懂編程,但是專業挖掘工具和挖掘技能足夠讓他操練的;這樣在迷你項目中,一個懂得挖掘技能和市場營銷業務能力的人就可以圓滿完成了,甚至在一個數據源中根據業務需求可以無窮無盡的挖掘不同的項目思路,試問就是這個迷你項目,單純的一個數據倉庫專家、單純的一個程序員、單純的一個展示展現技師、甚至單純的一個挖掘技術專家,都是無法勝任的)。這從另一個方面也說明了為什么溝通能力的重要,這些個完全不同的專業領域,想要有效有機地整合在一起進行數據挖掘項目實踐,你說沒有好的溝通能力行嗎?
數據挖掘能力只能在項目實踐的熔爐中提升、升華,所以跟著項目學挖掘是最有效的捷徑。國外學習挖掘的人都是一開始跟著老板做項目,剛開始不懂不要緊,越不懂越知道應該學什么,才能學得越快越有效果。我不知道國內的數據挖掘學生是怎樣學的,但是從網上的一些論壇看,很多都是紙上談兵,這樣很浪費時間,很沒有效率。
另外現在國內關于數據挖掘的概念都很混亂,很多BI只是局限在報表的展示和簡單的統計分析,卻也號稱是數據挖掘;另一方面,國內真正規模化實施數據挖掘的行業是屈指可數(銀行、保險公司、移動通訊),其他行業的應用就只能算是小規模的,比如很多大學都有些相關的挖掘課題、挖掘項目,但都比較分散,而且都是處于摸索階段,但是我相信數據挖掘在中國一定是好的前景,因為這是歷史發展的必然。
講到移動方面的實踐案例,如果你是來自移動的話,你一定知道國內有家叫華院分析的公司(申明,我跟這家公司沒有任何關系,我只是站在數據挖掘者的角度分析過中國大多數的號稱數據挖掘服務公司,覺得華院還不錯,比很多徒有虛名的大公司來得更實際),他們的業務現在已經覆蓋了絕大多數中國省級移動公司的分析挖掘項目,你上網搜索一下應該可以找到一些詳細的資料吧。我對華院分析印象最深的一點就是2002年這個公司白手起家,自己不懂不要緊,一邊自學一邊開始拓展客戶,到現在在中國的移動通訊市場全面開花,的確佩服佩服呀。他們最開始都是用EXCEL處理數據,用肉眼比較選擇比較不同的模型,你可以想象這其中的艱難吧。
至于移動通訊的具體的數據挖掘的應用,那太多了,比如不同話費套餐的制訂、客戶流失模型、不同服務交叉銷售模型、不同客戶對優惠的彈性分析、客戶群體細分模型、不同客戶生命周期模型、渠道選擇模型、惡意欺詐預警模型,太多了,記住,從客戶的需求出發,從實踐中的問題出發,移動中可以發現太多的挖掘項目。最后告訴你一個秘密,當你數據挖掘能力提升到一定程度時,你會發現無論什么行業,其實數據挖掘的應用有大部分是重合的相似的,這樣你會覺得更輕松。