機器學習&數據挖掘方向的計算機研究生該如何整體提升自己的技術水平?

本題已加入知乎圓桌 ?「機器學習 · 學以致用」,更多「機器學習」相關話題討論歡迎關注。

本人是16屆畢業的學碩,剛從某互聯網公司實習三個月回來,實習期間主要是用map-reduce和python做一些數據統計和分析,這三個月除了寫代碼快了一點、了解更多Linux的指令和操作並且感受了一下在公司工作的氛圍之外,沒有很多實質性的技術提升。
個人覺得自己的編程水平在學校(985)里算是中等偏上,寫過不少代碼,在研究生期間也翻了幾本研究相關經典的書,也看過Ng的公開課,讀了不少論文,也向頂會投過論文(未中)。總之就是很多都看過學過了,但都是一些皮毛的東西,沒有真正吸收,覺得自己不適合做學術,想好好找份工作,與我研究方向相關的。

接下來至少有兩個半月的空檔期,我想好好提升一下自己。這兩天看了不少相關的經驗貼,能找到的主要分為兩種:
1、打好數據結果演算法的基礎,深入理解操作系統並熟悉Linux開發等,系統提升自己的編程水平。
如 我的演算法學習之路 和 2016計算機碩士找工作準備以及學習安排? - 編程
2、提升MLDM方面的能力。
如 機器學習,數據挖掘在研究生階段大概要學些什麼? - 學習

我想做一個長遠的學習計劃,同時也能兼顧下學期找工作的事,請問各位我該如何在上面兩點分配時間?

**********

補充一下,大家覺得我現在再去找一份實習好還是集中時間看書順便到POJ或者kaggle之類的平台練練手好呢?


先吐槽,乾貨在最後~~

有勇氣向頂級會議投論文人,竟然連機器學習應用相關崗的實質性工作都沒有撈到!!!

請爆出貴公司的名字,好讓小夥伴們警醒!!!

國內頂級互聯網企業機器學習崗相關工程師的機器學習平均水準,本來就很讓人無奈了!!

企鵝某廣告組(企鵝員工覺得不妥,我可以刪掉):
問:你了解邏輯回歸么?
答:哦,之前在XXX公司寫了一個c++版的多機多線程的深度學習模型。
問:那你寫過邏輯回歸么?
答:啊...我寫的深度學習模型可選的激活函數包括了Sigmoid函數,你可以選擇單層神經網路在頂層使用它來激活,那就成了一個邏輯回歸了。
問:那你懂邏輯回歸的原理么?
答:....不然我怎麼寫出來....

然後,就面!掛!了!......

如果是我,我有空的話,我就寫一個C++的Machine Learning庫啊~~~
當然,很有可能一些面試官根本不會care你的github地址!!

因為他們覺得會OJ的都是大神!!(當然確實有很多大神OJ都很屌!!)
哇~~~~這麼牛!這種題目都能做出來!!!

然後他們就覺得你聰明爆了,然後萬一騙個A+呢~~~

當然選哪條路,取決於你自己。但要專註

——————————————————————————————————
現在講一丟丟找機器學習相關工作乾貨,好吧,其實是乾貨太少....

1. 必要的機器學習知識:

首先,需要明確的是企業內絕大多數機器學習崗,都是機器學習應用崗。所以PAC、VC維基本不會被面到啦(畢竟也沒幾個面試官懂)~~但是我覺得懂VC維好酷啊!!(PS...我不懂)

數據挖掘領域,我不是特別熟悉。但基本不可避免通常都是傳統統計學習方法的應用領域。

Logistics Regression,基本是區分菜鳥和逗逼的第一題啦。
Support Vector Machine,基本是區分進階和菜鳥的第一題啦。
Naive Bayes,離散和連續的差別,可以看出概率基礎喲。
Decision Tree,可以看點資訊理論,然後面試官就對你刮目相看啦。

Expectation Maximization,了解它的應用的模型,不需要背,理解EM就會覺得豁然開朗啦。
Gradient Descent,同上。

Over-fitting,如何避免過擬合?
Regularization,為什麼可以避免過擬合?可以參考下病態問題。

Ensemble Learning,數據挖掘最常用的模型了吧,想想為什麼集成方法是有效的。
Transfer Learning,貌似現在很火啊(圖像識別領域)!!我不是很懂啊~~求懂的大神留言~~為什麼由某一領域訓練模型可以應用到其他領域?又是如何應用的?

2. 必要的機器學習相關領域實踐

當然,任何一個紙上談兵的趙括都是很容易露出馬腳的。所以,沒有任何機器學習相關領域工作的人,我也不信他行啊!除非是ICPC World Final咯!


3. 關於工業界和學術界:

工業界:一個人享用一台24核、96GB的伺服器,無盡的數據;但不要期待學習到高端大氣上檔次的模型和演算法....
學術界:哇,這個演算法好牛逼啊!哇,這個模型真是屌爆了!但是總是會遇到計算能力和訓練數據的局限。


另,在工業界,他們永遠期待你能在有限時間內,實現「能用的」功能,提供足夠多的代碼,而不在乎這個模型是多麼可笑。

去實習之後,真是越來越愛學術界了。萬惡的KPI是創新的最大阻礙啊!


方向是模式識別和NLP,錯誤之處請指出,也請見諒。
有空了、想到了,再補充吧~~


目前我接觸到的這方面的實習無非是兩類:

  1. 廣告方面的。這個你要知道前人已經做到多麼細緻的地步了,所以工作往往需要對一些演算法專研得很深入,或者有著豐富的調參經驗,也有可能需要時刻緊跟在學術界後面讀paper。一句話來說這個要細活兒。
  2. 數據挖掘方面的。數據挖掘不得不說很多地方都是剛起步,有一大堆原始數據等著你鼓搗,這時候你了解的演算法面的廣度就很重要了,因為你不知道待會又會有哪種形式的數據供你把玩,對深度要求可能沒有廣告方面工作那麼高,無論如何先搞個比較糙的再說,如果需要繼續深入你再深入進去學習。

所以最後看你期望或者預計工作的風格是哪種,如果是面試導向的話先把基礎的演算法都了解推導一下,保證在需要你深入的時候可以很快深入進去,這是我總結的套路~~~

如果你面試的崗位是這個方面的,應該不會有太多OJ向的問題,一般問問計算機演算法基礎的東西就差不多了(按國內來說,畢竟不像某國際企業每輪必問),當然這個前提是是做這方面工作的人在面你


志向遠大,目標明確,成績可度量;然後

? 多學: 信息時代,慕課,wiki,問答,書籍,途徑非常之多;微博上很多機器學習專家也可以關注關注;現在的條件可以選擇頂級的專家和內容來學習;

? 多用:從戰鬥中學習戰鬥,總是最快和最有成效的,推薦kaggle。,像kaggle這種資源的話直接利用起來,多練一練,互相交流一下,我覺得進步應該會挺快的。因為我自己的話,基本沒做過kaggle,但我看kaggle上總結的一些經驗,有時候比我自己總結的還要深。現在的學生的條件比當年好多了,他們完全有能力有機會超越而上,所以只要大膽的去實踐,從實際業務來的一些數據跟問題,那麼他們應該就能夠慢慢理解那些範圍邊界、適用性的一些東西,才能做得很好。

? 反思和效率:經常反思自己做的事情,注重提升自己的效率,常常寫寫小工具, 更多自動化地解決問題。


背景同題主,也是16年畢業小碩,年前剛結束某廠實習,又跳到了某某廠,搜索演算法相關。
我說下題主提出的兩方面自己做過和正在做的一些事情吧,題主可以借鑒下~

  • 基礎代碼能力:刷OJ(leetcode or hackrank)和實現機器學習演算法(如svm、lr、gbdt、random forests等),並且讓代碼規範高效。
  • 領域知識:kaggle比賽、認真讀書(ESL或者PRML)並寫讀書筆記、和大神交流(特徵工程、模型等)、每天找點其他人遇到的問題回答一下(知乎、Quora、StackOverFlow等)

玩kaggle吧,下面鏈接是kaggle上比賽前幾名的代碼,可以學習下。Kaggle 機器學習競賽冠軍及優勝者的源代碼匯總,加油吧,騷年。


數據結構+演算法
機器學習基本模型(注意是基本):LR,SVM,Adaboost,RF,GBDT
刷刷OJ,玩玩阿里天池大賽,Kaggle吧,多積累一些解決實際機器學習問題的能力。
國內機器學習崗位主要還是側重於對業務的理解以及深入了解基本的機器學習演算法吧。


我個人認為實現機器學習演算法是最有效的提高內功的方法,從實際需求出發,比如好的可擴展性,速度,準確度。這樣實現一個模型後,比如random forest,你對它就非常熟悉了,絕對給別人一種專家的感覺


剛找到實習,正準備5月底或者6月初去實習3個月呢,看了這個問題,心瞬間拔涼拔涼的感覺,我心想著能通過這次實習讓自己水平提升一截


推薦閱讀:

最數學的計算機科學方向有哪些?
Kaggle如何入門?
常用的機器學習演算法比較?
不同激活函數(activation function)的神經網路的表達能力是否一致?
實驗室原型到產品,距離、差距有多遠?

TAG:百度 | 阿里巴巴集團 | 數據挖掘 | 機器學習 | 演算法與數據結構 |