1. 程式人生 > >找實習以及面試期間機器學習基礎總結

找實習以及面試期間機器學習基礎總結

部分問題是其他大佬博主總結的,答案大部分是自己的理解,也有面試的時候遇到的問題,不定期更新

基本知識:

1)最小二乘法

最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。


最小二乘法的原則是以“殘差平方和最小”確定直線位置。用最小二乘法除了計算比較方便外,得到的估計量還具有優良特性。這種方法對異常值非常敏感。

2)深度學習中的啟用函式,優缺點

3)深度學習中的梯度消失和梯度擴散

梯度消失:

梯度擴散:

4)相似度度量的方法

1. 歐氏距離

2. 曼哈頓距離

3. 切比雪夫距離

4. 閔可夫斯基距離

5. 標準化歐氏距離

6. 馬氏距離

7. 夾角餘弦

8. 漢明距離

9. 傑卡德距離 & 傑卡德相似係數

10. 相關係數 & 相關距離

11. 資訊熵

方差與偏差的trade off  / 經驗風險最小化和結構風險最小化的trade off

定義:(機器學習周志華)理想的模型是在新樣本上能表現的很好的學習器,所以應該從訓練樣本中儘可能學習出適用於所有潛在樣本的“普遍特徵”,當學習器把訓練樣本學習的“太好”,很可能已經把訓練樣本自身的一些特點當作了所有潛在樣本都會有的一些性質

,這樣就會導致泛化效能下降,也叫過擬合;欠擬合:指對訓練樣本的一般性質尚未學習好

產生的原因:

(1)     建模樣本質量差:樣本數量太少,噪聲資料干擾過大,樣本資料不能有效足夠代表業務邏輯或業務場景;

(2)     模型選擇錯誤

(3)     引數太多,模型複雜度太高

(4)     決策樹:剪枝操作

(5)     神經網路:迭代次數太多

解決方案:

(1)     新增正則項。L1正則更加容易產生稀疏解、L2正則傾向於讓引數w趨向於0

(2)     決策樹:預剪枝:提前結束分裂;後剪枝:利用驗證集剪枝

(3)     交叉驗證

(4)     提前結束迭代訓練,減少基學習器個數

(5)     ···

6)交叉驗證

https://mp.weixin.qq.com/s?__biz=MzIzODExMDE5MA==&mid=400415610&idx=1&sn=381dd64fbdc7c130a6314fb65815d4e1#rd

7)監督與非監督區別:

監督學習訓練資料是有標記的,例如迴歸,分類問題

半監督學習:監督學習與無監督學習相結合的一種學習方法。它主要考慮如何利用少量的標註樣本和大量的未標註樣本進行訓練和分類的問題

無監督學習訓練資料無標記,用於發現訓練樣本集中的結構性知識,例如聚類問題

8)L1L2區別

http://blog.csdn.net/jinping_shi/article/details/52433975

正則化方法:損失函式後面新增的額外項,用來懲罰模型的複雜度,通常是L1正則化和L2正則化,或者也叫L1正規化,L2正規化

L0正則化向量中非零元素的個數

L1 正則化模型引數絕對值之和對應的預設誤差服從正太分佈,引數服從拉普拉斯分佈

L2 正則化模型引數的平方和對應的預設誤差服從正太分佈,引數服從高斯分佈

線性迴歸中,使用L1正則化的模型叫Lasso迴歸,使用L2正則化的叫嶺迴歸

L1正則化可以產生稀疏權值矩陣,即產生一個稀疏模型,稀疏模型指很多元素為0,表示特徵對模型的貢獻度,因此可以用於特徵選擇

L2正則化可以防止模型過擬合(overfitting);一定程度上,L1也可以防止過擬合;擬合過程中通常都傾向於讓權值儘可能小,最後構造一個所有引數都比較小的模型。因為一般認為引數值小的模型比較簡單,能適應不同的資料集,也在一定程度上避免了過擬合現象。可以設想一下對於一個線性迴歸方程,若引數很大,那麼只要資料偏移一點點,就會對結果造成很大的影響;但如果引數足夠小,資料偏移得多一點也不會對結果造成什麼影響,專業一點的說法是『抗擾動能力強』

9)生成模型和判別模型區別

生成模型由資料學習聯合概率分佈,然後求出條件概率分佈作為預測模型,例如:樸素貝葉斯,lda,隱馬爾可夫模型

判別模型由資料直接學習決策函式或者條件概率分佈作為預測的模型,例如:k鄰近法,決策樹,羅輯思特迴歸SVM

10)                 偏差bias和方差variance的概念

偏差:描述的是預測值(估計值)的期望與真實值之間的差距。偏差越大,越偏離真實資料

方差:方差針對的是科學取樣的多個數據集訓練的多個模型,多個模型的預測值的變化範圍,離散程度,也就是離其期望值的距離。方差越大,資料的分佈越分散

訓練次數不足的時候,學習器的擬合能力不夠強,訓練資料的擾動不足以使學習器產生顯著的變化,這個時候偏差主導了泛化錯誤率:偏差大,方差小,泛化錯誤率大,欠擬合

訓練次數過多,訓練資料的特異性被學習器擬合,方差逐漸主導泛化誤差,偏差小,方差大,泛化誤差大,過擬合

方差-偏差trade-off:減小泛化誤差,泛化誤差可以分解為方差+偏差+實際誤差分佈

11)                 如何解決機器學習中資料樣本不平衡問題?http://www.cnblogs.com/zhaokui/p/5101301.html

1.        取樣方法是通過對訓練集進行處理使其從不平衡的資料集變成平衡的資料集,在大部分情況下會對最終的結果帶來提升。

取樣分為上取樣(Oversampling)和下采樣(Undersampling);上取樣後的資料集中會反覆出現一些樣本,訓練出來的模型會有一定的過擬合;而下采樣的缺點顯而易見,那就是最終的訓練集丟失了資料,模型只學到了總體模式的一部分

2.        資料合成

3.        加權

12)                 查準率P,召回率R,F1,AUC

P:預測為正例的資料中,真正例的比例

R:所有實際正例中,預測為正例的比例

F1: 2*P*R/(P+R)

AUC:

13)                 SVM的核函式如何選擇

n為特徵數,m為訓練樣本數。

(1)如果相較於m而言,n要大許多,即訓練集資料量不夠支援我們訓練一個複雜的非線性模型,我們選用邏輯迴歸模型或者不帶核函式的支援向量機。

(2)如果n較小,而且m大小中等,例如n在 1-1000 之間,而m在10-10000 之間,使用高斯核函式的支援向量機。

(3)如果n較小,而m較大,例如n在1-1000之間,而m大於50000,則使用支援向量機會非常慢,解決方案是創造、增加更多的特徵,然後使用邏輯迴歸或不帶核函式的支援向量機。

14)                 SVM為什麼適合處理高維特徵

SVM引入核函式,用來計算兩個向量在隱式對映過後的空間中的內積,核函式能簡化對映空間中的內積運算,而且剛好“碰巧”的是,在我們的 SVM 裡需要計算的地方資料向量總是以內積的形式出現的。於是就可以通過核函式計算兩個向量在隱式對映過後的空間中的內積,就相當於在從底維輸入空間對映到的高維特徵空間中的內積計算。

應用核函式的展開定理,不需要知道非線性對映的顯式表示式;由於是在高維特徵空間中建立線性學習機,所以與線性模型相比不但幾乎不增加計算的複雜性,而且在某種程度上避免了“維數災”。這一切要歸功於核的展開和計算理論。因此人們又稱SVM方法為基於核的一種方法。核方法研究是比SVM更為廣泛和深刻的研究領域。

15)                 SVM的MapReduce實現原理

16)                 決策樹,CART

ID3使用資訊增益來查詢最好特徵的和分割點

C4.5使用資訊增益比來查詢最好特徵和分割點

CART做迴歸時用平方誤差最小化(最小化均方差),分類時用基尼指數最小化準則

前剪枝

後剪枝:使用測試集,從底向上對非葉子結點考察,若去除刺節點能提高泛化效能,就剪枝

在tree ensemble中,引數對應了樹的結構,以及每個葉子節點上面的預測分數

17)                 為什麼LR需要歸一化或者取對數,為什麼LR把特徵離散化後效果更好

18)                 xgboost相比傳統gbdt有何不同?xgboost為什麼快?xgboost如何支援並行?

l   傳統GBDT以CART作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。

l   傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支援自定義代價函式,只要函式可一階和二階求導。

l   xgboost在代價函式里加入了正則項,用於控制模型的複雜度。正則項裡包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。

l   Shrinkage(縮減),相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設定得小一點,然後迭代次數設定得大一點。(補充:傳統GBDT的實現也有學習速率)

l   列抽樣(columnsubsampling)。xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。

l   對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。

l   xgboost工具支援並行。boosting不是一種序列的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函式裡包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行了排序,然後儲存為block結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。

l   可並行的近似直方圖演算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法列舉所有可能的分割點。當資料無法一次載入記憶體或者在分散式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。

TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降

Gradient Descent 是一種一階優化方法,為什麼這麼說呢?因為它在迭代過程中不需要二階及以上的資訊。如果我們在泰勒展開時,不是一階展開,而是二階展開。那對應的方法就是另一個被大家所熟知的可微方程求解方法:Newton Method

加速迭代

為什麼把特徵組合之後還能提升,

反正這些基本都是增強了特徵的表達能力,或者說更容易線性可分吧

正負樣本不均衡問題:

通過觀察loss function,正樣本越多,正樣本的權重越大

假設正負樣本是1:1w,你關心的是正樣本,直接學出來的模型可能就直接把樣本全判別為負樣本。但這顯然不是你想要的結果

直覺是覺得保持1:1最好,或者說至少沒壞處。那通常採用的方法就是up-sampling或者down-sampling,具體操作方法很簡單,少的樣本複製多份,或者多的樣本只抽樣一些。但我感覺前者容易過擬合,後者資料利用得又不夠充分。難道鹹魚與熊掌就不可得兼?後來某大牛指點了一下,告訴我一個簡單的trick:

用down-sampling,然後取樣多次,訓練多個模型,跟隨機森林一樣,求個平均即可

常用的距離度量方法:

歐氏距離

餘弦距離

皮爾遜相關係數

虛擬碼實現:LR、梯度下降、最小二乘法、KNN、K-means;

演算法的優缺點以及相應解決方案:k-means, KNN, apriori

演算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神經網路,協同過濾,em演算法

常見問題:

1)svm演算法的原理、如何組織訓練資料、如何調節懲罰因子、如何防止過擬合、svm的泛化能力、增量學習

2)神經網路引數相關。比如,引數的範圍?如何防止過擬合?隱藏層點的個數多了怎樣少了怎樣?什麼情況下引數是負數?

3)為什麼要用邏輯迴歸?

5) 樸素貝葉斯公式

6) 講em演算法

8)說一下SVM的實現和運用過程

9)談談DNN

10)簡單說說決策樹分析

11)推薦系統中基於svd方法

12)SVM有哪些優勢,(x,y,z)三個特徵如何用徑向基核函式抽取第四維特徵

13)userCF和ItemCF在實際當中如何使用,提供具體操作,以及它們的優勢(推薦系統)

14)如何用Logic regression建立一個廣告點選次數預測模型

15)舉一個適合採用層次分析法的例子

17)關聯分析中的極大頻繁項集;FP增長演算法

18)線性分類器與非線性分類器的區別及優劣

19)特徵比資料量還大時,選擇什麼樣的分類器

訓練集資料量不夠支援我們訓練一個複雜的非線性模型,我們選用邏輯迴歸模型或者不帶核函式的支援向量機

20)對於維度很高的特徵,你是選擇線性還是非線性分類器

21) 對於維度極低的特徵,你是選擇線性還是非線性分類器

22) 如何解決過擬合問題

24) 隨機森林的學習過程

25) 隨機森林中的每一棵樹是如何學習的

26) 隨機森林學習演算法中CART樹的基尼指數是什麼

27)支援向量機、圖模型、波爾茨曼機,記憶體壓縮、紅黑樹、並行度

28) 如何搭建一個推薦平臺,給出具體的想法,

29) 實現一箇中文輸入法

30) k-mean shift的機制,能不能用偽碼實現

31)實現最小二乘法。

機器學習、大資料相關崗位的職責

•      平臺搭建類

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

•      演算法研究類

文字挖掘,如領域知識圖譜構建、垃圾簡訊過濾等;

推薦,廣告推薦、APP推薦、題目推薦、新聞推薦等;

排序,搜尋結果排序、廣告排序等;

廣告投放效果分析;

網際網路信用評價;

影象識別、理解。

•      資料探勘類

商業智慧,如統計報表;

使用者體驗分析,預測流失使用者。

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

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

面試問題

1.你在研究/專案/實習經歷中主要用過哪些機器學習/資料探勘的演算法?文字的貝葉斯分類迴歸的RFGBDTxgboostSVM 


2.你熟悉的機器學習/資料探勘演算法主要有哪些?基礎的機器學習演算法

3.你用過哪些機器學習/資料探勘工具或框架? 
pythonpandasscikit-learn 


•      基礎知識

SVM 的推導,特性?多分類怎麼處理?

LR 的推導,特性?

決策樹的特性?

SVMLR、決策樹的對比?

GBDT 決策森林的區別?

如何判斷函式凸或非凸?

解釋對偶的概念。

如何進行特徵選擇?

為什麼會產生過擬合,有哪些方法可以預防或克服過擬合?

介紹卷積神經網路,和 DBN有什麼區別?

採用 EM演算法求解的模型有哪些,為什麼不用牛頓法或梯度下降法?

EM演算法推導解釋 K-means

用過哪些聚類演算法,解釋密度聚類演算法。

聚類演算法中的距離度量有哪些?

如何進行實體識別?

解釋貝葉斯公式和樸素貝葉斯分類。

寫一個Hadoop版本的 wordcount

•      開放問題

給你公司內部群組的聊天記錄,怎樣區分出主管和員工?

如何評估網站內容的真實性(針對代刷、作弊類)?

深度學習在推薦系統上可能有怎樣的發揮?

路段平均車速反映了路況,在道路上布控採集車輛速度,如何對路況做出合理估計?採集資料中的異常值如何處理?

如何根據語料計算兩個詞詞義的相似度?

在百度貼吧裡釋出 APP廣告,問推薦策略?

如何判斷自己實現的 LRKmeans演算法是否正確?

100億數字,怎麼統計前100大的?

•      …… 


答題思路

•      用過什麼演算法?

最好是在專案/實習的大資料場景裡用過,比如推薦裡用過 CFLR,分類裡用過 SVMGBDT

一般用法是什麼,是不是自己實現的,有什麼比較知名的實現,使用過程中踩過哪些坑

優缺點分析。

•      熟悉的演算法有哪些?

基礎演算法要多說,其它演算法要挑熟悉程度高的說,不光列舉演算法,也適當說說應用場合;

面試官和你的研究方向可能不匹配,不過在基礎演算法上你們還是有很多共同語言的,你說得太高大上可能效果並不好,一方面面試官還是要問基礎的,另一方面一旦面試官突發奇想讓你給他講解高大上的內容,而你只是泛泛的瞭解,那就傻叉了。

•      用過哪些框架/演算法包?

主流的分散式框架如 HadoopSparkGraphlabParameter Server 等擇一或多使用瞭解;

通用演算法包,如 mahoutscikitweka等;

專用演算法包,如OpenCVtheanotorch7ICTCLAS等。

•      基礎知識

對知識進行結構化整理,比如撰寫自己的 cheet sheet,我覺得面試是在有限時間內向面試官輸出自己知識的過程,如果僅僅是在面試現場才開始調動知識、組織表達,總還是不如系統的梳理準備;

從面試官的角度多問自己一些問題,通過查詢資料總結出全面的解答,比如如何預防或克服過擬合。

產生背景,適用場合(資料規模,特徵維度,是否有 Online演算法,離散/連續特徵處理等角度);

原理推導(最大間隔,軟間隔,對偶);

求解方法(隨機梯度下降、擬牛頓法等優化演算法);

優缺點,相關改進;

和其他基本方法的對比;

個人感覺高頻話題是 SVMLR、決策樹(決策森林)和聚類演算法,要重點準備;

演算法要從以下幾個方面來掌握:

•      產生背景,適用場合(資料規模,特徵維度,是否有 Online演算法,離散/連續特徵處理等角度);

•      原理推導(最大間隔,軟間隔,對偶);

•      求解方法(隨機梯度下降、擬牛頓法等優化演算法);

•      優缺點,相關改進;

•      和其他基本方法的對比;

不能停留在能看懂的程度,還要:

•      對知識進行結構化整理,比如撰寫自己的 cheet sheet,我覺得面試是在有限時間內向面試官輸出自己知識的過程,如果僅僅是在面試現場才開始調動知識、組織表達,總還是不如系統的梳理準備;

•      從面試官的角度多問自己一些問題,通過查詢資料總結出全面的解答,比如如何預防或克服過擬合。

•      開放問題

由於問題具有綜合性和開放性,所以不僅僅考察對演算法的瞭解,還需要足夠的實戰經驗作基礎;

先不要考慮完善性或可實現性,調動你的一切知識儲備和經驗儲備去設計,有多少說多少,想到什麼說什麼,方案都是在你和麵試官討論的過程裡逐步完善的,不過面試官有兩種風格:引導你思考考慮不周之處 or指責你沒有考慮到某些情況,遇到後者的話還請注意靈活調整答題策略;

和同學朋友開展討論,可以從上一節列出的問題開始。

準備建議

1.基礎演算法複習兩條線

◦                                       材料閱讀包括經典教材(比如 PRML,模式分類)、網上系列部落格,系統梳理基礎演算法知識;

◦                                       面試反饋面試過程中會讓你發現自己的薄弱環節和知識盲區,把這些問題記錄下來,在下一次面試前搞懂搞透

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

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