1. 程式人生 > >資料探勘工程師的面試問題與答題思路

資料探勘工程師的面試問題與答題思路

一個Java程式可以認為是一系列物件的集合,而這些物件通過呼叫彼此的方法來協同工作。下面簡要介紹下類、物件、方法和例項變數的概念。

  • 物件:物件是類的一個例項,有狀態和行為。例如,一條狗是一個物件,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
  • :類是一個模板,它描述一類物件的行為和狀態。
  • 方法:方法就是行為,一個類可以有很多方法。邏輯運算、資料修改以及所有動作都是在方法中完成的。
  • 例項變數:每個物件都有獨特的例項變數,物件機器學習、大資料相關崗位根據業務的不同,崗位職責大概分為:

1、平臺搭建類
  資料計算平臺搭建,基礎演算法實現,當然,要求支援大樣本量、高維度資料,所以可能還需要底層開發、平行計算、分散式計算等方面的知識;

2、演算法研究類
  - 文字挖掘,如領域知識圖譜構建、垃圾簡訊過濾等;
  - 推薦,廣告推薦、APP 推薦、題目推薦、新聞推薦等;
  - 排序,搜尋結果排序、廣告排序等;
  - 廣告投放效果分析;
  - 網際網路信用評價;
  - 影象識別、理解。

3、資料探勘類
  - 商業智慧,如統計報表;
  - 使用者體驗分析,預測流失使用者。
  以上是根據求職季有限的接觸所做的總結。有的應用方向比較成熟,業界有足夠的技術積累,比如搜尋、推薦,也有的方向還有很多開放性問題等待探索,比如網際網路金融、網際網路教育。在面試的過程中,一方面要盡力向企業展現自己的能力,另一方面也是在增進對行業發展現狀與未來趨勢的理解,特別是可以從一些剛起步的企業和團隊那裡,瞭解到一些有價值的一手問題。

  
以下首先介紹面試中遇到的一些真實問題,然後談一談答題和麵試準備上的建議。

面試問題
  1、你在研究/專案/實習經歷中主要用過哪些機器學習/資料探勘的演算法?
  2、你熟悉的機器學習/資料探勘演算法主要有哪些?
  3、你用過哪些機器學習/資料探勘工具或框架?
  4、基礎知識
1)無監督和有監督演算法的區別?
2)SVM 的推導,特性?多分類怎麼處理?
3)LR 的推導,特性?
4)決策樹的特性?
5)SVM、LR、決策樹的對比?
6)GBDT 和 決策森林 的區別?
7)如何判斷函式凸或非凸?
8)解釋對偶的概念。
9)如何進行特徵選擇?
10)為什麼會產生過擬合,有哪些方法可以預防或克服過擬合?
11)介紹卷積神經網路,和 DBN 有什麼區別?
12)採用 EM 演算法求解的模型有哪些,為什麼不用牛頓法或梯度下降法?
13)用 EM 演算法推導解釋 Kmeans。
14)用過哪些聚類演算法,解釋密度聚類演算法。
15)聚類演算法中的距離度量有哪些?
16)如何進行實體識別?
17)解釋貝葉斯公式和樸素貝葉斯分類。
18)寫一個 Hadoop 版本的 wordcount。
……
  5、開放問題
1)給你公司內部群組的聊天記錄,怎樣區分出主管和員工?
2)如何評估網站內容的真實性(針對代刷、作弊類)?
3)深度學習在推薦系統上可能有怎樣的發揮?
4)路段平均車速反映了路況,在道路上布控採集車輛速度,如何對路況做出合理估計?採集資料中的異常值如何處理?
5)如何根據語料計算兩個詞詞義的相似度?
6)在百度貼吧裡釋出 APP 廣告,問推薦策略?
7)如何判斷自己實現的 LR、Kmeans 演算法是否正確?
8)100億數字,怎麼統計前100大的?
……

答題思路
1、用過什麼演算法?
  最好是在專案/實習的大資料場景裡用過,比如推薦裡用過 CF、LR,分類裡用過 SVM、GBDT;
  一般用法是什麼,是不是自己實現的,有什麼比較知名的實現,使用過程中踩過哪些坑;
優缺點分析。

2、熟悉的演算法有哪些?
  基礎演算法要多說,其它演算法要挑熟悉程度高的說,不光列舉演算法,也適當說說應用場合;
  面試官和你的研究方向可能不匹配,不過在基礎演算法上你們還是有很多共同語言的,你說得太高大上可能效果並不好,一方面面試官還是要問基礎的,另一方面一旦面試官突發奇想讓你給他講解高大上的內容,而你只是泛泛的瞭解,那就傻叉了。

3、用過哪些框架/演算法包?
  主流的分散式框架如 Hadoop,Spark,Graphlab,Parameter Server 等擇一或多使用瞭解;
  通用演算法包,如 mahout,scikit,weka 等;
  專用演算法包,如 opencv,theano,torch7,ICTCLAS 等。

4、基礎知識
  個人感覺高頻話題是 SVM、LR、決策樹(決策森林)和聚類演算法,要重點準備;
  演算法要從以下幾個方面來掌握:
1)產生背景,適用場合(資料規模,特徵維度,是否有 Online 演算法,離散/連續特徵處理等角度);
2)原理推導(最大間隔,軟間隔,對偶);
3)求解方法(隨機梯度下降、擬牛頓法等優化演算法);
4)優缺點,相關改進;
5)和其他基本方法的對比;
6)不能停留在能看懂的程度,還要對知識進行結構化整理,比如撰寫自己的 cheet sheet,我覺得面試是在有限時間內向面試官輸出自己知識的過程,如果僅僅是在面試現場才開始調動知識、組織表達,總還是不如系統的梳理準備;
7)從面試官的角度多問自己一些問題,通過查詢資料總結出全面的解答,比如如何預防或克服過擬合。

5、開放問題
  由於問題具有綜合性和開放性,所以不僅僅考察對演算法的瞭解,還需要足夠的實戰經驗作基礎;
  先不要考慮完善性或可實現性,調動你的一切知識儲備和經驗儲備去設計,有多少說多少,想到什麼說什麼,方案都是在你和麵試官討論的過程裡逐步完善的,不過面試官有兩種風格:引導你思考考慮不周之處 or 指責你沒有考慮到某些情況,遇到後者的話還請注意靈活調整答題策略;
  和同學朋友開展討論,可以從上一節列出的問題開始。

準備建議
1、基礎演算法複習兩條線
  材料閱讀 包括經典教材(比如 PRML,模式分類)、網上系列部落格(比如 研究者July的“結構之法,演算法之道”),系統梳理基礎演算法知識;
  面試反饋 面試過程中會讓你發現自己的薄弱環節和知識盲區,把這些問題記錄下來,在下一次面試前搞懂搞透。

2、除演算法知識,還應適當掌握一些系統架構方面的知識,可以從網上分享的阿里、京東、新浪微博等的架構介紹 PPT 入手,也可以從 Hadoop、Spark 等的設計實現切入。

3、如果真的是以就業為導向就要在平時注意實戰經驗的積累,在科研專案、實習、比賽(Kaggle,Netflix,天貓大資料競賽等)中摸清演算法特性、熟悉相關工具與模組的使用。

總結
如今,好多機器學習、資料探勘的知識都逐漸成為常識,要想在競爭中脫穎而出,就必須做到:
 保持學習熱情,關心熱點;
 深入學習,會用,也要理解;
 在實戰中歷練總結;
 積極參加學術界、業界的講座分享,向牛人學習,與他人討論。

找好自己的定位:

1、資料分析師,主要技能SQL、Excel,從資料庫裡寫SQL語句得到資料,然後在EXCEL里加工視覺化後做成報表或者報告,利用你的商業敏感度,給出可靠的結論。聽起來很簡單是不是,但這其中需要的商業敏感度,確是最需要積累的。具體方向有3個:資料產品、決策支援、資料運營。其中,資料產品 PK需求把控&專案管控能力;決策支援 PK商業sense(例如做營銷,360網址導航這種每月幾百萬的框架到底要不要籤?);資料運營 PK提煉特徵能力綜上,你會發現在網際網路公司,資料分析師要處理的問題,跟營銷、產品、運營一樣。

2、演算法工程師,主要技能數學功底+統計功底+實打實的寫程式碼能力+看論文讀最新演算法論文的能力。要求相當高。對應崗位推薦演算法工程師、搜尋演算法工程師、文字挖掘、語音識別、影象處理這類演算法工程師。比如阿里,做推薦的演算法工程師基於訪客、商品、商家的線上、離線資訊等等資料庫的資料,來得到一套推薦的邏輯,通俗點說,怎麼給出個公司,給每個商品算個得分,排列出來給買家看到,買家會想要買更多的商品。而這背後的演算法,其實市面上大部分機器學習的書都覆蓋不到,是需要演算法工程師基於演算法基本功(資料結構、核心演算法正規化)+商業感覺(業務邏輯、綜合行業運營、分析師的假設經驗)+利用資料不斷的實驗迭代得到最好的結果、獲得引數、還要擔心本身樣本不隨機帶來的系統偏差等等問題。

以上轉自公眾號:資料探勘DW