1. 程式人生 > >【推薦】資料探勘工程師就該有這樣的學習線路

【推薦】資料探勘工程師就該有這樣的學習線路

不管是資料分析師還是資料探勘工程師,我們的目標都是認識資料,從資料中發現需要的資訊。

 

資料探勘的技術過程:

資料清理(消除噪音或不一致資料)

資料整合(多種資料來源可以組合在一起)

資料選擇(從資料庫中提取與分析任務相關的資料)

資料變換(資料變換或統一成適合挖掘的形式;如,通過彙總或聚集操作)

資料探勘(基本步驟,使用智慧方法提取資料模式)

模式評估(根據某種興趣度度量,識別提供知識的真正有趣的模式)

知識表示(使用視覺化和知識表示技術,向用戶提供挖掘的知識)

所需要的技能

對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解

想學習的同學歡迎加入大資料學習qq群:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家

並且有清華大學畢業的資深大資料講師給大家免費授課,給大家分享目前國內最完整的大資料高階實戰實用學習流程體系 。

 

做資料分析,統計的知識肯定是需要的,Excel、SPSS、R等是需要掌握的基本技能。

我是做資料探勘的,所以重點講一下資料探勘方面的技能。我本身是學數學專業的,接觸數學比較多。資料探勘要從海量資料中發現規律,這就需要一定的數學知識,最基本的比如線性代數、高等代數、凸優化、概率論等。

舉個栗子,比如樸素貝葉斯演算法需要概率方面的知識,SKM演算法需要高等代數或者區間論方面的知識。當然,你可以直接套模型,R、Python這些工具有現成的演算法包,可以直接套用。但如果你想深入學習這些演算法,最好去學習一些數學知識,也會讓你以後的路走得更順暢。

我們經常會用到的語言包括Python、Java、C或者C++,我自己用Python或者Java比較多。有時用MapReduce寫程式,再用Hadoop或者Hyp來處理資料,如果用Python的話會和Spark相結合。

可以挖掘的資料型別:

關係資料庫、資料倉庫、事務資料庫、空間資料庫、時間序列資料庫、文字資料庫和多媒體資料庫。

關係資料庫:是表的集合,每個表都賦予一個唯一的名字。每個表包含一組 屬性(列或欄位),並通常存放大量 元組(記錄或行)。關係中的每個元組代表一個被唯一關鍵字標識的物件,並被一組屬性值描述。

資料倉庫:通過資料清理、資料變換、資料整合、資料裝入和定期資料重新整理構造 

工作內容

 

資料分析更偏向統計分析,出圖,作報告比較多,做一些展示。知乎上有一個叫團支書的答主,他就比較偏向於資料分析。

資料探勘更偏向於建模型。比如,我們做一個百貨的資料分析。萬達電商的資料非常大,具體要做什麼需要專案組自己來定。百貨資料能給我們的業務什麼樣的推進,我們從這一點入手去思考。我們從中挑出一部分進行使用者分群。

消費者在商場購物消費會有一個刷卡的資料記錄,萬達會員卡的卡號資訊以及購物記錄也會在資料中呈現,資料體量是很大的。我們用這些資料做一個聚類,分成幾個使用者群,比如偏向親子的、時尚女裝和奢侈品的、汽車配飾的,分群之後再去給他們做推薦就相對更加容易。

我們做使用者分群會用到一些聚類模型,比如K-means、K-means++等,處理資料的維度特別大,是300w*142維,如果全部拿來聚類,效果不太好,因為有一些是沒有含義的,所以我們會進行降維。

降維一般會用到主成分分析,我們用的是深度學習的一個演算法——Auto Encoder。它有一個輸入層,一個隱含層,一個輸出層,資料從輸入層進去時會進行編碼,從輸出層出來時解碼,比如我們把142維資料灌進去,在隱含層降成50維資料,輸出還是142維資料。也就是說把一開始的142維資料投射到50維資料之後,再還原成142維,這142維與之前的142維資料之間的對映關係是一樣的,那麼我們就可以用中間50維的資料做聚類分析。

最後我們得到了一個評價指標,你可以理解為這個指標數值越小越好,越小代表各個值離中心越近。如果不用深度學習演算法,得出的評價指標是20萬左右,而降維之後得出的指標是600多,效果是很顯著的。

我講這個例子也是想告訴大家,如果你不具備數學知識,只是去套模型也可以做,但永遠只是停留在入門階段。

大家如果想做資料探勘工程師的話,我建議程式語言至少要會一門,數學方面至少需要線性代數、概率論和凸優化的知識,瞭解一些機器學習演算法的推導,以及深度學習的演算法。這個學習起來並不是特別難,我從畢業到現在有一年的時間,一些基本的演算法已經瞭解的差不多了。

發展的建議

每個人都有自己的偏好。有的人會說,數學太難了,我不想做挖掘,就想做一些資料分析,做一些酷炫的分析圖,這個當然可以。如果想要自己的職業生涯有長足發展的話,不要貪多貪雜,在某一個領域深入進去。你可以結合自己的興趣,在那一個領域成為專家。

提高自己的技術和業務能力。技術能力相對來說是比較好提高的,學R或者Python這類簡單的語言是很快的,Java或者C++會比較慢。當技術能力提高到一定程度的時候,就很難跟別人有技術上的差別了。可能工作一年的時候你只會R,等兩三年之後相關的工具技術你都會了,這個時候你跟其他同事的區別就在於業務能力。

很多做技術的一開始會覺得技術就是特別牛特別厲害,但是光有技術並不能讓你成為公司的核心成員,必須要提高自己的業務能力。如果你做的技術出的結果跟業務不相關,對公司無法產生效益,領導是不會要這個結果的,除非你是研究人員。

但無論是機器學習,還是資料探勘,你一定聽說過很多很多,名字叼炸天的傳說中的,“演算法”,比如:SVM,神經網路,Logistic迴歸,決策樹、EM、HMM、貝葉斯網路、隨機森林、LDA... ....其實還是很多很多!無論你排十大演算法還是二十大演算法,總感覺只觸及到了冰山一角!真是學海無涯啊- -!!

當然,學習機器學習看書是必備的,總不能靠冥想吧。。。

學習書籍推薦

有的書介紹機器學習,會是這樣一種思路:就是單獨的一個一個的演算法介紹,介紹個十幾個,一本書的篇幅差不多也就完了。

李航博士的那本《統計學習方法》基本屬於這種套路。當然,該書在國內是備受推崇的一本。客觀上講,國人寫這方面的書很少,而李博士的著作也不像其他那種大學教材一樣東拼西湊,可謂良心之作。但就本書的思路來說,我認為:如果讀者就單獨的某一個演算法想有所瞭解,參考該書應該會有收穫。但系統化上還是優化空間的,比如從一個演算法到另外一個演算法,之間的聯絡是什麼,推動演算法更新和升級的需求又在哪裡?

另外一種該型別的書,會把演算法按照它們的實現的功能和目的,分成比如 Regression、Classification、Clustering等等等等的幾類,然後各種講可以實現聚類的演算法有A、B、C,可以實現迴歸的有D、E、F。。。而且我們也知道,機器學習又可分為有監督、無監督以及半監督的,或者又可分為貝葉斯派和概率派兩大陣營,所以按類別來介紹其中的演算法也是一種很常見的思路。

這樣的書代表作是Pang-Ning Tan, Michael Steinbach 和Vipin Kumar的那本《資料探勘導論》,這樣的書基本上對於構建一個大概的機器學習體系還是有裨益的。但是就初學者而言,其實這個體系還可以再優化。這也是我根據個人的一些經驗想向各位介紹的一個基本的學習路線圖,在我看來知識應該是有聯絡的,而不是孤立的, 找到這種內部隱藏的線索就如同獲得了阿里巴巴的口訣,才能開啟更大的寶藏。

當然,正式學習之前,你所需要的預備知識(主要是數學)應該包括:微積分(偏導數、梯度等等)、概率論與數理統計(例如極大似然估計、中央極限定理、大數法則等等)、最優化方法(比如梯度下降、牛頓-拉普什方法、變分法(尤拉-拉格朗日方程)、凸優化等等)——如果你對其中的某些名詞感到陌生,那麼就說明你尚不具備深入開展資料探勘演算法學習的能力。你會發現到處都是門檻,很難繼續進行下去。

學習路徑

第一條線路:

(基於普通最小二乘法的)簡單線性迴歸 -> 線性迴歸中的新進展(嶺迴歸和LASSO迴歸)->(此處可以插入Bagging和AdaBoost的內容)-> Logistic迴歸 ->支援向量機(SVM)->感知機學習 -> 神經網路(初學者可先主要關注BP演算法)-> 深度學習

之所以把它們歸為一條線路,因為所有這些演算法都是圍繞著 y = Σxiβi,這樣一條簡單的公式展開的,如果你抓住這條線索,不斷探索下去,就算是抓住它們之間的繩索了。其中藍色部分主要是迴歸,綠色部分主要是有監督的分類學習法。

基於普通最小二乘的線性迴歸是統計中一種有著非常悠久歷史的方法,它的使用甚至可以追溯到高斯的時代。但是它對資料有諸多要求,例如特徵之間不能有多重共線性,而且嶺迴歸和LASSO就是對這些問題的修正。

當沿著第一條路線學完的時候,其實你已經攻克機器學習的半壁江山了!當然,在這個過程中,你一定時刻問問自己後一個演算法與前一個的聯絡在哪裡?最初,人們從哪裡出發,才會如此設計出它們的。

第二條路線:

K-means  -> EM  -> 樸素貝葉斯 -> 貝葉斯網路 -> 隱馬爾科夫模型(基本模型,前向演算法,維特比演算法,前向-後向演算法) (->卡爾曼濾波)

這條線路所涉及的基本都是那些各種畫來畫去的圖模型,一個學術名詞是 PGM 。這條線的思路和第一條是截然不同的!貝葉斯網路、HMM(隱馬爾科夫模型),也就是綠色字型的部分是這個線路中的核心內容。而藍色部分是為綠色內容做準備的部分。K-means 和 EM 具有與生俱來的聯絡,認識到這一點才能說明你真正讀懂了它們。而EM演算法要在HMM的模型訓練中用到,所以你要先學EM才能深入學習HMM。所以儘管在EM中看不到那種畫來畫去的圖模型,但我還把它放在了這條線路中,這也就是原因所在。樸素貝葉斯里面的很多內容在,貝葉斯網路和HMM裡都會用到,類似貝葉斯定理,先驗和後驗概率,邊緣分佈等等(主要是概念性的)。最後,卡爾曼濾波可以作為HMM的一直深入或者後續擴充套件。儘管很多machine learning的書裡沒把它看做是一種機器學習演算法(或許那些作者認為它應該是訊號處理中的內容),但是它也確實可以被看成是一種機器學習技術。而且參考文獻[4]中,作者也深刻地揭示了它與HMM之間的緊密聯絡,所以紅色的部分可以作為HMM的後續擴充套件延伸內容。

幾個小tips

 

學歷重要嗎?

校招渠道比較看重學歷,但是隨著工作經驗的增加,你的技術達到了一定的水平,你是二本三本實際上和985畢業的人並沒有太大區別。當然,對於應屆畢業生來說,學歷高學校好更有優勢,這是大廠的敲門磚。

也有人會問需不需要考研。考研要跟你以後的工作道路結合起來,如果想做資料探勘,就可以選擇考數學類專業的研究生,可以提高自己的競爭力。

以我的經歷來說,我本科是在湖北一個很普通的學校,研究生報考武漢大學的計算數學專業。但因為兩分之差,調劑到了基礎數學。當時家人勸我服從調劑,好歹研究生是武大出來的。不過我的興趣不在基礎數學,這個專業也並不能給我想要從事的資料探勘加分,還不如先在工作中積累一些實踐經驗,所以就放棄了讀研。如果我工作幾年之後需要提升能力,可以再去考個研究生,不一定非要現在就考。

轉行可不可以學?

現在這個行業越來越火,很多人想要轉行做資料分析。轉行學資料分析師是可以的,但最好先去看一下招聘單位的工作內容,如果招聘要求懂PPT、Excel之類的就可以不要考慮了,因為這種通常招的是統計員,不是分析師,對你的職業道路不會有太大的幫助。如果要求會Python、R或者建模,你可以去嘗試一下。可能別人不一定會要你,但如果你表現出足夠的誠意和自學能力的話,依然有被錄用的機會。

我大學讀數學專業時只學了MATLAB,學了不到一年,當時在學校參加MATLAB建模比賽得了一等獎,覺得自己挺牛。但是在找工作時發現很多公司不用MATLAB或者SAS,因為比較貴,很多都會用開源的R。面試的時候,我說我不知道R是什麼,領導說,給你兩個星期,學。後來在工作裡一點點看書,也就入門了。

跳到第四個問題,選資料分析還是資料探勘?

很多人覺得資料探勘很厲害,但是一轉行就跳到資料探勘是不太可能的。資料探勘要求比較深的程式碼功底。

一開始我也不會寫程式碼,畢業之後我去了一家公司,Title是中級資料分析師,但乾的是資料探勘的事兒。剛入職的一個月內,老闆讓我用Python出結果。之前沒學過Python,我邊學邊做,這樣把Python也學會了。後來在這家公司做過一個垃圾文字分類的專案,這個方面以前也沒有接觸過,就一邊查資料一邊自己做。一開始用公式套,但是準確率只有80%左右,我就開始看公式的推導,看懂公式原理之後就知道某些地方是可以挑優的,自己可以對演算法做一些改進。不要只套公式,也要弄明白其中的公式推導,搞懂原始碼,慢慢提高自己的程式碼能力。

怎麼選公司

大公司當然是最好的。大公司一般走校招,如果你通過校招進了大公司,但是非核心的崗位,比如百度搜索方面的挖掘,當然是最好的,如果進入不了這樣的崗位,不如去一些新發展起來的公司,比如美團、滴滴,這樣的公司有一定的資料量,也會有一些比較強的人。

第三類公司是創業公司。如果是剛畢業最好不要選創業公司,風險比較大。你比較難以從表面上判斷這家公司能不能存活下來,有沒有牛人值得跟。而一些二線公司的業務骨幹大多是從BAT過來的,具有比較豐富經驗,跟著他們學習能讓自己快速成長。

怎麼面試

一定要誠實。不要造假工作經驗和年限,沒有必要,對自己也沒有好處。畢業生求職時可以表現得真誠一點,不能說一上手就能做很多工作,但是可以展示自己的學習能力。

我也不是一開始就做資料探勘,也是在工作中慢慢轉。如果你真的想做這一行,就要有決心,不能著急。

附資料探勘腦圖

對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解

想學習的同學歡迎加入大資料學習qq群:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家

並且有清華大學畢業的資深大資料講師給大家免費授課,給大家分享目前國內最完整的大資料高階實戰實用學習流程體系 。