標籤:

如何從數據挖掘入門到數據挖掘高手?

首先說明一下,我在一家金融企業銷售部門工作,有一定IT背景,平時愛好編程。因為工作原因,需要學習一些數據挖掘和統計分析的知識,主要是做一些市場分析和公司內部控制管理的分析,我想問幾個問題:

1、對於商務應用而言,sas、spss、r語言等,哪種數據挖掘工具較好,優勢在哪裡?(編程不是難題,日常我喜歡編程)。

2、對於數據挖掘,除了工具以外,數學、統計學知識需要達到哪種程度?有無較好的學習路徑。

3、數據挖掘的演算法很多,如何才能掌握這些演算法?


我自己就這麼來回答了??

  • 數據挖掘的各種商業應用,其實都是各有千秋的,尤其是每種軟體都有自己的擅長領域,就這麼說吧:

    • SAS:這可以說是非常昂貴的數據分析軟體了,很大程度上,除非是特別約定的行業,比如醫療、生物化學領域,或者是某些傳統慣性較強的企業,這個軟體使用的我見到的已經不多了。
    • SPSS:這個很容易操作,界面很友好。算是很傳統的統計分析軟體。因為最初是爲社會統計學而設計的軟體,所以在傳統統計分析方面表現還是很不錯的,再加上易用性,我覺得如果數據分析的目標已經有較確定的模型可遵循,使用SPSS會很不錯。
    • WEKA:這是一個免費的數據挖掘軟體,模型方法等等方面,都很全面。是構建在Java上的軟體,因為這一點對於方法模型的擴展其實是有一定局限性的,從我的使用體驗上看,WEKA在解決回歸類型模型和神經網路模型上,效率不高。WEKA的Experimenter環境提供的方法對比等等方面的使用功能,是我覺得比較好的。
    • SNNS:也就是Stuttgart Neural Network Simulator的縮寫。是神經網路專門方向的數據挖掘軟體。如果說,某一個軟體對於神經網路的支持最全面、最具可用性的話,那我一定會推薦這個專門向軟體SNNS。
    • Rapidminer:AGPL版本的Rapidminer是開源免費的,同樣基於Java編寫而成。但是,相比WEKA而言,Rapidminer提供了R和Groovy的插件,在擴展性和靈活性方面,比WEKA要好。另外就是,Rapidminer更集中於機器學習模型方法的實現。在數據視圖方面我覺得是前面我說到的這幾個數據分析、挖掘的軟體中最好的。
    • R/S:對於最最傳統的數據分析/統計分析來說,R語言或者是S語言,是使用最多,支持最多的數據分析語言了。眾多的Package,使得R/S幾乎可以完成任意的數據挖掘、分析的任務。不過,R/S也是有一個很麻煩的問題的,那就是很依賴內存以及CPU。內存太小,在計算巨大數量的數據時,產生內存不足的錯誤;運行效率一方面依賴於挖掘程序的編寫,更依賴於CPU的運行效率。基於R/S的數據分析、統計分析教材也是最多的。
    • Python:通過NumPy、SimPy、Matplotlib等等類庫(添加包?),也能讓Python俱有很強大的數據分析能力,但是,幾乎所有演算法都需要自己實現了,雖然也有一些專門的數據分析類庫,但是,面對不同問題的函數修正,是一個很麻煩的事情,但是,Python優秀的運算能力,要比R/S,亦或者是上面所提到的各種軟體來說,要快速多了。自然語言處理方面的書籍,有不少使用Python的。
    • Ruby:元編程的代表語言。雖然沒有專門爲數據分析開發的各種類庫,但是,評介不俗的元編程能力,在解決某些快速問題上還是不錯的,尤其是對於需要應用MCMC方法的模擬分析的問題方面,得天獨厚。
    • FORTRAN:函數編程和數值分析方面的祖宗級語言。對於大型機、超級機支持的最好。而且,由於在併行計算和高性能計算方面性能特別突出,當我們的挖掘任務所使用的數據集又極其巨大的時候,使用FORTRAN是最最最最正確的選擇了。另外,因為FORTRAN最最接近數學公式的自然描述方式的語法,對於複雜的模型運算,其實很多時候都能有意外的編寫驚喜的??
    • Julia:感覺Julia一直致力於超越Python w/NumPy在數值計算方面的性能,但是苦於現在類庫(添加包)還太少,使用上需要完全手動編寫每一個挖掘模型,這是一個十分巨大的任務量,再加上繪圖能力遠遜Python,我也是淺嘗輒止之後就很少使用了。
    • Haskell:是純函數編程的典範。再加上,Haskell所推崇的「證明即程序,命題為類型」的理念,除非是我理解最為清楚的模型(而且也不是太複雜),我一般不會考慮使用Haskell來自己找虐的????
    • C/C#:最最最根本的程序語言了。我幾乎沒有使用過這類編程語言來解決數據分析問題。但是,我有不少同學、同事,是使用這一類方式來做數據分析的。我個人感覺上來說,使用C語言做數據分析,是很繁瑣的,而且也需要很精深的Debug知識。(我才不會告訴你,我最討厭Debug的這個過程呢??)
    • Twitter Storm:這個已經不能繼續稱作專門的數據分析軟體了,Storm準確來說,應該算是一種對流數據進行分析的框架。它也是剛剛開始嶄露頭角、並伴隨大數據開始流行起來的一類數據處理工具了。我也是剛剛開始接觸並使用Storm,最讓我喜歡的地方是,Storm的實時數據處理能力,尤其是在我對期貨市場做研究的時候,一邊用Python把實時的期貨tick數據寫入硬盤,一邊就能實時的把tick數據整理成任意我需要的形態,甚至簡單的數據預處理方法也能實時完成更新。不過,沒有什麼便利的數據分析開發包來減輕寫數據分析演算法的任務強度,但是,對比他的特性,這點缺憾我還是能接受的。(其實幸好Storm默認支持Python,要不我一定不會堅持把它使用下來的??_(:3」∠)_)
    • Apache Spark:同Twitter Storm類似,但是實時處理能力略差,不過Spark有數據分析的開發包,總體使用的感覺,似乎它更適合對實時數據分析要求不高的任務。而且要使用Java或者Scala語言,在書寫數據分析方法的時候,難度也無形加大了不少,所以感覺這個更偏向於簡單的數據分析任務的處理。
  • 需要的數學、統計學知識,關於這一點,就要完全取決於你要面對怎樣的數據挖掘的需求,或者是取決於你希望達到怎麼的數據挖掘的處理層次。簡單來說:

    • 只是處於市場分析、內部管理之用的數據分析,只需要能看懂各種模型的數學/統計學只是就足夠了。對於這類數據分析任務,和業務員更深入的溝通,和相關人員更深入的探討,更精準的總結出問題關鍵,這才是更重要的部分,實質的數據分析只是在驗證,或者是黑箱式實用的。
    • 如果想一直以此維生,那麼,了解模型的來龍去脈是很重要的,因為你可能面對的將是不同的問題,不同的數據,有的時候不僅僅要單純的使用模型,修改模型,有機的結合模型來處理問題,都需要對各個模型有足夠的了解和認知。而這樣的了解、認知,有的時候不僅僅涉及數學知識、統計學知識,就比如神經網路的模型、ROC檢驗的來由(陰性陽性的定義由來)等等。
    • 那到底需要多深刻的數學知識呢?這個還真不好說。就我個人來說,從最最簡單的各種類型的概率模型,到隨機漫步,到混沌理論,到隨機微積分,各種線性、非線性的統計方法都有深入學習過。似乎應該說,足夠自己去理解各種數據模型的數學知識,就足夠了。(才不是為了炫學什麼的呢??瓦是真的不知道這個程度應該怎麼表達了啦??)
  • 看書+實踐,這似乎就是我覺得,最好的學習數據挖掘的方法了吧?或者是學習路徑?我當時大概是這麼開始學的:

    • 先從統計學依賴最少的機器學習方法開始的。比如神經網路、遺傳演算法、隨機森林、模擬退火演算法等等開始的。雖然相應的數學模型可能會遇到個別艱澀的地方,但是,學起來還是十分興趣盎然的啊!尤其是,能接觸到很多有趣的例子,總之,對我自己來說,這個起步點是從自己興趣點開始的。
    • 然後,開始接觸各種時間序列分析的方法。這時候統計的東西開始多了。假設檢驗啦、概率分布啦,都是遵從一種解決問題的思路的。
    • 在此之後,我才開始全面接觸統計分析(這麼看起來,我就是那個倒練經脈的異類啊!)。然後就是,各種豁然開朗和原來如此!
    • 統計分析接觸一段時間之後,我個人的一個感覺,就是分形、代數拓撲等等內容,在數據分析方面也是由隱隱相互關聯的地方(最後還是轉回到自己所學的專業方面了啊??無力趴),於是又去找了很多相關的書來看,但是這些內容,更多的就開始偏向金融領域了。
    • 總之,對於數據分析/數據挖掘,我覺得,應該不斷提醒自己,「統計研究應該是由問題或者數據驅動的,而不是由模型驅動的。」只有這樣才能讓自己一直保持在對模型的學習中,不會被那些優美的數學結構所欺騙。
  • 掌握演算法,除了靠一個還算OK的腦袋瓜,我覺得,更更重要的是,不斷的練習和在練習中做筆記。一個數據集,可以用無數種模型來接近,有的時候,甚至有數個模型都不能否定零假設。那又要怎麼從中選擇呢?類似這樣的問題,一個一個記錄下來,一個一個解決,一個一個再否定再修改。慢慢的,模型的各個方面就會越來越理解的深刻了。而且,練習也才能感受到最貼近實際使用的那種成功的喜悅。

PS:其實一提到金融企業,我腦袋裡直接就想到了:Ruey S. Tsay!這一定是被那本《金融時間序列分析》折磨了一個季度之後留下的後遺症???_?

(增加了點有關大數據分析相關的東西??5.3.2014增)


SAS 是比較昂貴的商業軟體,如果不是在立法規定必須使用 SAS 的行業(比如醫藥研發),SAS 不一定是最佳選擇。

開源不代表就不好、不能用,尤其在數據挖掘領域,去 http://Rseek.org 看看有多少人寫過相關的 packages 就知道了。有些用 C 寫的 package 確實可能會限制運算性能,但這不絕對。

SPSS 易操作,就不多言了。另外像 Weka、Rapidmind 也都是各有千秋的不錯的工具,我接觸不深也不多言了。

至於理論,如果你想深入研究某一演算法的來龍去脈,只能從最基礎的統計學和部分數值學理論開始。但如果僅限於工作需要,我覺得弄明白一個演算法大致能解決什麼樣的問題、是怎樣解決的就足夠了,至於為什麼這樣可以解決、為什麼這樣的解決辦法會優於別的演算法,就留給寫 paper 的人吧。

最後給你個小 tip:去 http://Rseek.org 看看,那裡有些不錯的集合多種常見演算法的 package,比如這個 http://cran.r-project.org/web/packages/mlr/mlr.pdf 。然後去 wikipedia 大致了解下每個演算法,做些筆記。每週專注了解一種演算法,有興趣的話用你手上能利用的數據做做看,體會會不一樣。寫到這裡我才發現原來我還是最推崇用 R 學數據挖掘,哈哈。那就再附贈一個好的編輯器吧,支持多平台:RStudio - Home。


我換個角度簡單答一下!

首先你要選擇的是業務領域,因為不同領域從事數據挖掘工作的內容差異是非常大的!!!

所以千萬不要抱著反正我是搞數據挖掘的,在哪個領域都一樣。

在很多領域,什麼SAS, SPSS,這些玩意兒根本就上不了戰場; 而在有些領域,幾乎沒有機會讓你自己去寫代碼實現演算法的,這就是差異。

所以從入門到高手的前提是你選擇了一個或幾個業務領域,然後沿著這個領域的同行經驗,去深入; 先學會日常工作的工具和問題解決方法,然後逐步深入,發揮你的知識背景。


補充:

前面幾位同學都提到了工具和演算法,也提到了對具體業務的理解,即 business sense。今天聽課時恰好重溫了一個經典的例子,寫下來跟大家分享,作為對 business sense 的支撐。

都知道啤酒和尿布,那麼,有了這個發現以後,我們可以把這兩件商品安排在較近的貨架上。還可以怎麼樣呢?

在尿布搞促銷的時候,把擺在它附近的啤酒的價格提高一些。

有同學可能會指出,這個是什麼意思?不就是把這兩件商品放在一起嗎?嗯.. 我們反過來思考,如果啤酒搞促銷,尿布提價,會是什麼樣的結果呢?結果銷量可能是讓人失望的。對啤酒和尿布的一種解釋是:人們因為家裡有小寶寶要照顧,就減少了去外面消費酒水的次數,同時買啤酒回家喝了。

這裡指出的是,我們拿到結果之後,對這個現象的理解,即對背後的原因的認識(什麼是因、什麼是果),會讓數據挖掘的效果有不同的體現。這或許就是數據挖掘高手與新手的其中一個區別吧。

*雖然MMSD的老師在授課時是這樣說的,不過我覺得其中還有一些值得再思考的地方:

1. 啤酒的銷量有兩種來源:那些只是為了來買啤酒的 + 因買尿布而順手買啤酒的

2. 啤酒提價會給第一種消費者的消費有哪些影響?

3. 考慮商品組合售的情況,如何搭配會比較好呢?

-----------

老師說,看一個人使用決策樹,就能看出他是不是高手。決策樹模型在行業里的應用應當是最廣泛的了,模型簡單的同時還具有較強的解釋力。我的意思大概是:

  • 數據挖掘高手首先是行業/業務高手。背景知識很重要,你的出來的模型和規則是否能成為一種「知識」,決策樹模型在給出知識這方面做的挺好。你在銷售部門工作,給客戶做presentation的時候,這個模型應該是最容易接受的。

從這個模型說開去,便是統計。老師說,你是不是高手,就看問題不那麼「規範」的時候你怎麼解決。所以你對模型/演算法有清晰的認識,否則具體問題出現以後不知道是哪裡出了問題,有時候是數據的問題(粒度大小,準確性),有時是這種數據分布不適於某個模型。我的意思大概是:

  • 數據挖掘高手必定精通幾個模型/演算法。所以可以看看統計學習方面的書,或者找一下別人的博客。我相信應該是有挺多資源的。


可以列為七部分:

1、統計基礎

2、Excel

3、SQL

4、R語言

5、SPSSSAS

6、Python

7、數據分析數據挖掘


參考這個回答。數據分析師的主要工作有哪些?發展前景如何?需要掌握哪些相關知識?


至於工具:我注意到,有些人只專註於學習數據挖掘 。但最專業的網路數據挖掘人員,應該知道如何使用數據挖掘工具以及何時使用它們。可視化數據挖掘的工具,比如ParseHub就非常強大!


只能先提供入門的方法,至於如何成為高手,等我成為高手時定來分享~~

入門:先刷數據挖掘的相關演算法,在此期間你可能會遇到各種統計學的問題,可以諮詢百度,非常方便,個人認為數據挖掘演算法寫的很好的是《數據挖掘導論》(不要從頭開始看,會覺得雲里霧裡,就是只看演算法),每個演算法都有對應的小數據集示例,比較具體,非常好理解。每刷完一個演算法就對照一個用於數據挖掘的軟體進行練習(我用的是weka),加深理解。。。。。平均每三天左右刷完一個演算法~不快,對菜鳥來說不慢了。。。。等你完成這一步後,你一定會知道下一步怎麼進階了


要想成為專家,請申請PhD研究。


1,都不用,囧

2,看需要了,如果只是調用第三方庫,懂點基礎就好;如果要自己實現演算法的話,高數、高代、概率論是必須紮實的,然後矩陣理論、數值優化(尤其是凸優化)必須了解,最後根據具體業務領域補充相關數學知識,比如隨機過程、時間序列分析、信號與系統等

3,推薦《數據挖掘導論》,學習演算法很重要。不過在實踐中,對數據和業務的理解才是最重要了,演算法常常並不太重要(尤其是監督學習,用RF、SVM、LR一般就夠了)。


建議你看一本書叫大數據挖掘,作者是譚磊,你問的書裡面都有解答。


1、SPSS是圖形化界面,人機互動比較友好,但靈活性、處理大數據能力方面不如SAS。R是開源的,運行效率方面不如SAS,挖掘還是推薦SAS;

2、基礎的知識要結合應用不斷補充,要不學了也會很快忘掉;

3、演算法都比較成熟,除非是做科學研究,否則沒必要扣演算法,重點還是特定業務問題的應用。


成為高手看你自己要怎麼定義了。比如上世紀,隨便和魯迅等大師握過手,等到他們走了,你就是大師了。


推薦閱讀:

數據降維和特徵選取有什麼區別?
如何通俗易懂地解釋支持向量回歸(support vector regression)?
作為數據挖掘研究生需要補充哪些數學知識?
convex optimization 可以用來做哪些有意思的事情(可以是實驗性質)?
機器學習下的各種norm到底是個什麼東西?

TAG:數據挖掘 |