怎麼從一個有演算法基礎但是沒有項目經驗的學生,成長為數據挖掘工程師?

看了數據挖掘工程師的實習要求,都要求有相關項目經驗,要求如下「

  • 有自然語言處理,數據挖掘,搜索引擎 相關經驗
  • 有機器學習,圖像處理與挖掘經驗
  • 熟悉常用演算法,足夠靠譜的編碼和工程能力

」自己研一的時候自學過c++,看過數據結構,劍指offer等書,覺得劍指offer上的題自己能理解。但是研究生專業不是計算機等方面,更沒有相關項目經驗。本人考研時數一考了139,所以覺得自己的數學功底還是比較紮實的。想請問知乎的友人們,接下來我該看什麼書,才能一步步成長為數據挖掘工程師,本人覺得編程還是挺有趣的,想立志成為一名高級的軟體開發工程師。


雖然我現在不做數據挖掘了,但做的是Quant,也算是更寬泛的數據分析吧……所以只能從我的個人經驗上給題主一點幫助吧……可能會打擊到題主的積極性,還望諒解……

我先來解析一下「數據挖掘工程師的實習要求」吧:

  1. 數據挖掘,搜索引擎,圖像處理:這三個詞語,出現在數據挖掘工程師的要求裡面,基本可以說明這樣一件事情,就是這個工作要做的基本事情是什麼。細說起來,「數據挖掘」這是一個很寬泛的範圍,可能包含很多種內容,比如製作推薦系統的演算法之類都在其列;「搜索引擎」,所涉及的範圍稍窄,但也是一個大門類,至少需要了解現在常用的開源搜索引擎的開發平台和開發工具,比如 Apache Lucene、Sphinx 之類;「圖像處理」,也是一個專業性很強的門類,我了解不多,圖像融合、降噪什麼的都是需要十分專業的知識的,甚至包括硬體知識,另外,聽聞某些軟體公司針對圖像處理的數據挖掘人員還需要了解 OpenCV ,而我接觸過的,也只是用Rapidminer實踐過一個小的圖像挖掘的演算法,但也只是淺嘗輒止,畢竟這個門類的內容也十分廣泛、龐雜。
  2. 機器學習:這個是最最最最基本的數據挖掘、數據分析的基礎了吧?機器學習包含很廣泛的內容,神經網路、統計學習等等無數內容在這裡面。如果是實習要求裡面出現,這至少說明需要應聘者了解其中的一個方面或者幾個方面,為什麼說是了解而不是精通呢?君不見SVM一個演算法就能寫一本書嗎?支持向量機導論 (豆瓣) 。所以,想要精通機器學習我覺得真得數年之功啊…… 而且現在發展來看,機器學習的發展速度超級快,常用的 機器學習 方法之外, 深度學習 也是一個新開的深坑內容哦~也是越基礎的,越難哦……另外一點,機器學習的內容需要很好的數學基礎,恕我直言,考研數一139,這個在機器學習里,真的不足道,不要怪我打擊題主的積極性啊……
  3. 自然語言處理:這也是一類智能演算法的總稱了。可能回用於分析搜索關鍵詞、處理文本的機器翻譯、用於推薦系統的關鍵詞彙提取等等等等內容,這個實用向很強,當然,我了解的更少了……唯一了解的也僅限於 Python自然語言處理 (豆瓣) 一書。
  4. 熟悉常用演算法:這個,根據應聘的工作的實際工作內容不同而不同,比如從一個巨大的客戶數據集里提取一些特徵,這些特徵能反映客戶對目標產品的喜好,這個問題需要使用那些方法來解決呢?你選擇的方法又要如何評價呢?或者,如果通過客戶往期的發言中提取他的語言習慣(或者常用詞)呢?為解決這些問題的模型方法,最最基本簡單的那些,就是所謂常用演算法了。而這個常用演算法,也就是你在應聘的時候,需要注意的調整的,除非各個領域常用的演算法題主都懂了,那就算我多言了……(*/ω\*)還有一點就是……數據結構、劍指offer這都不叫演算法基礎……好歹看過 演算法導論 (豆瓣) ,做過上面的習題,再說有一定的演算法基礎比較好……
  5. 挖掘經驗:這個啊……我覺得,真的是一個很好的剔除不喜歡這個工作的應聘者的方法,因為你喜歡的話,就會學習,學習就要實踐,實踐就會有經驗……更進一步的項目經驗,如果小打小鬧的事情做多了,就會自己不自覺地開始搞自己的業餘項目了,我和我基友就搞過十幾個版本的包含各種類型的計算機交易系統……所以千萬千萬不要說自己沒有項目經驗,只能說你沒有準備好……
  6. 足夠的編碼能力:同樣是要看,數據挖掘使用的主要平台是什麼,你的目標是什麼。比如,我現在常用的程序語言(有使用頻率從高到低)有:R、Python、FORTRAN、Haskell。當然不是說C++不好,只是各有千秋。關於數據挖掘所涉及的平臺和語言,詳細可以看 我的這個回答 。編碼能力其實就是和你是用什麼平臺、什麼語言相關的,C++需要你自己寫出所有代碼,想想SVM一本書就講一個演算法就可見這個的難度。但是,轉換到R語言,就簡單了不止千百倍了。但是R語言運行效率真心怎麼優化都不會有質的飛躍,所以,在面對任務的時候,需要懂得如何從多門編程語言中取捨,也是一個數據挖掘人員的必要的編碼能力的一個部分。

根據上面我說的,我再來總結一下,成為數據挖掘工程師的方法吧。

  1. 先要選擇自己的專精路線:我選擇的是Quant,看題主的樣子似乎喜歡Coding(?),對專業要求不是很高、且Coding很多的,似乎應該就是搜索引擎的數據挖掘方向了吧?我也就是胡亂這麼建議一個,還要題主自己考量自己的興趣,來做決定。
  2. 然後,補充必要的知識:至少演算法、數學、更多的編程語言,這幾樣真的不能少……先看數學吧,統計學、泛函分析、圖論、統計積分,這些學起來吧……然後,演算法導論、各種機器學習演算法,也學起來……最後,學更多的編程語言,至少我覺得R、Scala、Python這三個至少要學兩個……
  3. 然後在專精方向上,努力吧!多用Google,多用Wikipedia……慢慢來不驕不躁就好~

最後的最後,看題主說,立志成為高級的軟體開發工程師,那麼……數據挖掘這條路可能不是最佳選擇,就如那位匿名用戶所回答的,研發工程師的職位或許更容易幫助題主達到這個高級的軟體開發工程師的地步。


考研數一146分怒答。

同養是其他專業想要嘗試轉數據挖掘,我的學習路線如下,供題主參考:

1,coursera上NG的課程

2,李航的統計學習方法(以了解概念為主)

3,斯坦福的NG的課程(比1要深很多,尤其到後面,一定堅持下去)

4,二遍李航的統計學習方法(每一個演算法務必達到手寫推導的水平,以題主數學功底的話手寫最大熵和GMM不是什麼難事,我個人則放棄了增強學習部分的推導),自認為有必要這本書可以三遍,我加上複習是三遍....

5,機器學習實戰(學好python中的開源工具,每個演算法都自己嘗試python實現,這裡代碼是關鍵,另外之前沒掌握的關聯分析則成為重點)

6,嘗試kaggle101的題目(這時候你會感覺到數據預處理的重要性)

7,然後我大致讀了幾篇Hadoop和時間序列等數據挖掘其他方面的碩士與博士論文以及KDDCUP09-12的幾篇論文(主要了解他們做數據挖掘的思想)

8,昨天一天的時間看完了數據挖掘導論準備應付面試(最後才看導論,確實一天就看完了,主要是查漏補缺,感覺書很全面,包括了數據挖掘中的一些關鍵問題,比如數據預處理了的很多問題,過擬合,模型選擇、評估、比較,也注意到了之前一些沒有接觸到的演算法,尤其是各種聚類演算法)

9,今天去面試,雖然題目都答上來了卻被嫌棄項目經驗不足,基本是跪了(哭暈,但是有心裡準備)

10,接下來準備嘗試一下kaggle的更多題目,也準備上手PRML,另一方面也開始回歸自己專業,沒有項目找實習感覺很有難度。

總結一下,雖然數據挖掘雖然不能給我一份實習,甚至不知道自己算不算得上入門,但是到了腦子裡的東西是實實在在的。如果樓主選擇了數據挖掘,那就堅持下去,你有比我好的計算機背景,肯定會有收穫。


我部門一小夥子考研數一拿了145,但演算法該不會還是不會,更別說拿一些機器學習演算法改造成並行形式的演算法…


我現在在一家專門做數字諮詢服務的上市企業實習,從事數據挖掘的工作。從中有下面幾點體會:

1、數據挖掘是一個團隊工作,不是靠著一個人的個人英雄主義就能解決的。

2、想清楚自己真正想從事的是數據挖掘的哪一塊工作,是談需求的、做ETL的、做底層演算法優化的還是做模型構建等等(此處不全,望大牛補充。)

3、從工具上看,暫時我用的較多的有:R語言、Python、OpenRefine、MySQL


項目經驗,有相關的項目經驗在找工作時很有幫助,現在國內互聯網公司招聘時對相關項目經驗很重視


數學考139不能說明你數學學得多好,數學一隻是高數,線代,概率的組合,當你看到真正的機器學習裡面的東西時,你會發現你數學考滿分,也是個渣渣。還要最優化,多元統計,等等數學。另外,編碼能力要強,能將演算法實現的能力很重要。


從你的介紹信息看,只能投 研發工程師 了。去coursera或者網易公開課上搜一下這方面的公開課學一下吧。


數學渣先膜拜下139的數學帝~想從事數據挖掘的工作可以先按照職位要求學習相關的知識~這是最基本的~項目經驗自己要多留意下身邊的機會~問問相關同學和導師


推薦閱讀:

機器學習書籍選擇?
如何做一名優秀的數據產品經理?
數據分析方法論是什麼?
如何看待 CMU New Initiative: CMU AI?
請分享一下數據分析方面的思路,如何做好數據分析?

TAG:演算法 | 數據挖掘 | 工程師 | 數據挖掘工程師 | 項目經驗 |