首先這個問題問的很廣。作機器學習方向不少,有些公司更偏重於數據挖掘,而有些更傾向於深度學習。同理,相對應的崗位有些偏重理論也有些偏重實踐。這些因素疊加形成了機器學習相關的崗位分佈廣,如數據分析師,算法工程師,機器學習科學家等,很難一律而論。面試
大概從實習生的時候就開始跟着老闆招聘面試機器學習方向的候選人,到如今前先後後大概也參與了 20 個左右機器學習求職者的技術面試。其中有在讀的研究生(實習生崗位),也有已經工做了多年或者學術背景深厚的名校博士(相對高級的「科學家」崗位)。算法
不談具體崗位的前提下,我想回答如下幾個問題: 1.爲何要避免學科性的偏見 2. 如何測試面試者的知識廣度 3. 怎樣測試面試者的知識深度 4. 爲什麼須要確認基本的編程和數據分析能力 5. 怎麼提升機器學習面試成功率編程
1. 避免學科間的偏見與歧視小程序
機器學習做爲一個交叉廣度大,各學科融合深的學科,各類背景的面試者都有。我建議必定不要預設立場,不管是數學、統計、物理、計算機,或是其餘學科的面試者都有獨特的知識儲備。好比機器學習其實和統計學習有很大部分是重疊的,甚至和優化(如運籌學)、數學(線代等)也有不少相關的地方。而不一樣領域的人對於同一件事情的描述多是類似但不相同的,甚至連叫法都不一樣。舉個簡單的例子,統計學將變量叫作 predictors 而機器學習傾向於將其叫作 feature(特徵)。我據說過不少面試官就由於對方不能徹底的使用他能聽懂的術語就拒掉了候選人,我以爲這個是愚蠢的。機器學習
以咱們團隊爲例,個人老闆是統計學博士和教授(偏計量),而我是純粹的計算機科學出身。他喜歡用 R 來建模而我只擅長 Python 和 C++。但正是這種差別性讓咱們能夠更好的合做,他在無監督學習中很喜歡用各類密度分析(density estimation)或者對分佈直接進行擬合,而我能夠給他介紹不少機器學習方向比較流行的算法,好比 Isolation Forests。同理,Python 和 R 都有各自擅長的領域,好比 Python 作時序分析的難度就遠遠大於 R,由於 R 有很是成熟的 package。編程語言
所以,咱們不要由於領域不一樣,叫法不一樣,編程語言不一樣,或者模型的解釋思路不一樣就輕易的否認一個面試者。久而久之,咱們的思路會愈來愈窄,而必定程度的包容能拓展思路。函數
2. 經過廣度測試劃定面試者的知識面學習
機器學習的項目通常都牽扯數據處理,建模,評估,可視化,和部署上線等一系列流程,咱們但願面試者對於每一個步驟都有最基本的瞭解。由於其範圍很廣,咱們但願首先在短期內瞭解一個面試者的知識範圍。有不少基本但經典的問題能夠用於瞭解面試者的素質,給出一些例子:測試
以如何處理缺失數據爲例,可能的回答有:1. 分析缺失比例決定是否移除 2. 用均值,衆數,迴歸代替 3. 用 0 代替等。好比深度學習是否比別的模型好,咱們就期待面試者能說「分狀況討論」,如果能提到「沒有免費的午飯定理」更是加分。在這個階段,咱們不會深刻追問,僅想對面試人的知識範圍有一個瞭解。優化
這類問題的共性就是不管你是在校學生仍是資深科學家都應該有一個基本的水準在,不過沒有必要百分之百的回答正確,由於自己不少答案都沒有標準答案。大部分時候,這個環節咱們對因而否錄用這我的就已經有了答案。若是面試者答錯或者不知道其中百分之八十的概念,錄取的機率就很低了。
3. 根據崗位和求職者背景進行深刻挖掘
在通過上一階段之後,咱們已經對求職者的素養有了大概的判斷,下一步就須要進行深刻了解,通常根據兩點進行追問:
進入這個環節其實就已經沒有模板了。假設咱們如今要爲保險公司招聘一個機器學習工程師來自動化」騙保檢測」,咱們的求職者是一位計算機系剛畢業的碩士生。那咱們可能深刻詢問的話題包括:
這一類問題的特色是隨機應變,通常都是在一個方向上深刻。好比其餘答案提到的 L1 和 L2 正則化,咱們可能但願面試者在白板上畫圖介紹爲何 L1 能夠獲得稀疏解,以及和嵌入式特徵選擇有什麼聯繫。這一類問題咱們不期待求職者徹底答對或者講得清楚無誤,咱們同時也想觀察其在壓力和追問下的心理素質。由於整個過程當中確定會有一些知識盲點,咱們會盡可能避免尷尬的氣氛,因此做爲求職者沒必要過度緊張。同時,經過和麪試者一塊兒瞭解他 / 她曾作過的項目,能夠看出其對於這個專業的興趣 — 興趣是很難演出來的。
在這個環節,若是一個面試者能夠有能力進入深刻交談,甚至提到一些咱們歷來沒想過的思路,都是加分的表現。
4. 基本的編程能力和數據挖掘能力
機器學習崗位,無論你是統計出身仍是計算機出身,都避不開建模的過程,所以基本的編程能力是必須的。通常對於數學或者統計學出身的面試者,咱們會額外給出一個簡單的小程序測試。這種小程序可能簡單如將讀取數據後並保存爲矩陣。這倒不是由於咱們喜歡沒事找事,而是由於機器學習太容易成爲紙上談兵,而從業者缺少最基本的編程能力。
類似的,咱們也但願面試者談談從模型中能夠獲得什麼結論。咱們曾把 Kaggle 上泰坦尼克的那個數據集處理過之後,讓面試者談談倖存率到底和什麼有關,如何分析。一樣的,咱們不追求完美答案,只是但願看到求職者能夠解釋一些簡單的模型結果,從中攫取商業價值。
5. 讓面試者有所收穫 & 如何準備機器學習面試
面試不應是一場單純的考試,在參加面試的過程當中,也是一個學習過程。拋磚引玉,對於機器學習的崗位面試我有幾點小建議:
5.1. 根據崗位,準備一份項目策劃書。
這個乍聽下來有點虛,但我曾無數次使用這個小技巧獲得良好的面試反饋和機會。假設你今天面試的崗位是我提到的保險公司的反詐騙組,那麼若是你能夠寫一個如何使用機器學習進行反詐騙的項目策劃書。這個過程對於面試者也是一個練習: a. 閱讀論文和新聞收集材料的能力 b. 總結分析的能力 c. 總結的能力。
在策劃書中,你能夠分析項目需求,提出相關解法,並建議後續計劃和列出相關文獻。這樣的行爲不只可讓僱主看到你的誠意,並看到你的的領域知識和獨立分析問題能力。
在適當的時機(好比開始面試的時候或者談到崗位職責的時候),你拿出準備好的策劃書,開始談你的思路。這種作法我曾作過幾回,效果都很驚豔,由於反被動爲主動,從被考察變成了講解你所瞭解的知識。做爲一個面試官,若是被面試者能作到這個程度,我會在心裏對錄取他比較有信心。
5.2. 真誠而且實事求是
你們都是理工科出身,行家一出手便知有沒有。在這種技術性比較強的學科,徹底沒有必要僞裝本身瞭解一個知識點。同理心告訴咱們,大部分人都有知識盲區,咱們不期待完美的回答。當你真的不知道一個問題的答案時候,真誠的但願對方能講得更明白或者認可本身不太瞭解。
若是你僞裝本身很瞭解一個不明白的領域,咱們通常會問的更深刻。你成功的引發了個人注意,那個時候就真的收不了場了。類似的,簡歷上請真的不要誇大其詞的描述本身的經歷。我見過不少人只用過 Naive Bayes 就在簡歷上號稱本身是機器學習專家,我如今還記得他們被面試到面紅耳赤的樣子。在這個浮躁的年代,對於高薪的機器學習崗位,但願你們都能守住最起碼的誠信底線。
5.3. 確保本身對基本的概念有所瞭解
再一次,保證對基本知識的瞭解(有基本的廣度)是對面試者本身和麪試官的尊重。什麼程度就算基本瞭解呢?個人感覺是:
其中每一條都說來簡單,但都是血與淚的過程,請勿操之過急。如何就能保證本身有了足夠的基礎知識呢?我以爲能基本看懂周志華老師《機器學習》的前十章,並相對熟練的使用 Sklearn 中基礎的 API 進行建模就能夠了。也請勿矯枉過正,若是你面試的崗位不是理論性科學家崗位,不要和數學推導死磕。這也是爲何我說寫一個項目策劃書頗有幫助,在查閱文獻和總結的過程當中,你對想要面試的領域有了更加深入的瞭解,有助於提升信心和知識。
5.4. 享受面試
請不要把技術面試當作一場噩夢,或是一個難關。做爲一個冉冉升起的新領域,咱們你們都是這麼一路摸爬滾打過來的,至少我本身是很理解這一路的不容易。
由於機器學習領域的人才稀缺,通常而言你的面試官的時間都是很寶貴的,即便你最終沒有經過面試,請抓住機會從他們身上有所學習的機會。從個人角度來看,你不只能夠藉此發現本身知識點上的缺失,也能夠聽到在特定領域的流行的算法和模型,這些都是從書上很難學到的。若是你爲了準備面試還閱讀了相關領域的論文和總結,那我想來面試這件事已經遠遠超過了你是否被錄取的意義。