1. 程式人生 > >15道機器學習面試題

15道機器學習面試題

1、你會在時間序列資料集上使用什麼交叉驗證技術?是用k倍或LOOCV?

 都不是。對於時間序列問題,k倍可能會很麻煩,因為第4年或第5年的一些模式有可能跟第3年的不同,而對資料集的重複取樣會將分離這些趨勢,而我們最終可能只是需要對過去幾年的進行驗證,這就不能用這種方法了。相反,我們可以採用如下所示的5倍正向連結策略:

  fold 1 : training [1], test [2]

  fold 2 : training [1 2], test [3]

  fold 3 : training [1 2 3], test [4]

  fold 4 : training [1 2 3 4], test [5]

  fold 5 : training [1 2 3 4 5], test [6]

  1,2,3,4,5,6代表的是年份。

2、你是怎麼理解偏差方差的平衡的?

 從數學的角度來看,任何模型出現的誤差可以分為三個部分。以下是這三個部分:

  偏差誤差在量化平均水平之上,預測值跟實際值相差多遠時有用。高偏差誤差意味著我們的模型表現不太好,因為沒有抓到重要的趨勢。而另一方面,方差量化了在同一個觀察上進行的預測是如何彼此不同的。高方差模型會過度擬合你的訓練集,而在訓練集以外的資料上表現很差。

3、給你一個有1000列和1百萬行的訓練資料集,這個資料集是基於分類問題的。經理要求你來降低該資料集的維度以減少模型計算時間,但你的機器記憶體有限。你會怎麼做?(你可以自由做各種實際操作假設。)

 你的面試官應該非常瞭解很難在有限的記憶體上處理高維的資料。以下是你可以使用的處理方法:

  1.由於我們的RAM很小,首先要關閉機器上正在執行的其他程式,包括網頁瀏覽器等,以確保大部分記憶體可以使用。

  2.我們可以隨機取樣資料集。這意味著,我們可以建立一個較小的資料集,比如有1000個變數和30萬行,然後做計算。

  3.為了降低維度,我們可以把數值變數和分類變數分開,同時刪掉相關聯的變數。對於數值變數,我們將使用相關性分析;對於分類變數,我們可以用卡方檢驗。

  4.另外,我們還可以使用PCA(主成分分析),並挑選可以解釋在資料集中有最大偏差的成分。

  5.利用線上學習演算法,如VowpalWabbit(在Python中可用)是一個不錯的選擇。

  6.利用Stochastic GradientDescent(隨機梯度下降法)建立線性模型也很有幫助。

  7.我們也可以用我們對業務的理解來估計各預測變數對響應變數的影響的大小。但是,這是一個主觀的方法,如果沒有找出有用的預測變數可能會導致資訊的顯著丟失。

 4、全球平均溫度的上升導致世界各地的海盜數量減少。這是否意味著海盜的數量減少引起氣候變化?

  不能夠這樣說。這是一個“因果關係和相關性”的經典案例。全球平均溫度和海盜數量之間有可能有相關性,但基於這些資訊,我們不能說因為全球平均氣溫的上升而導致了海盜的消失。我們不能斷定海盜的數量減少是引起氣候變化的原因,因為可能有其他因素(潛伏或混雜因素)影響了這一現象。

5、給你一個數據集,這個資料集有缺失值,且這些缺失值分佈在離中值有1個標準偏差的範圍內。百分之多少的資料不會受到影響?為什麼?

  約有32%的資料將不受缺失值的影響。因為,由於資料分佈在中位數附近,讓我們先假設這是一個正態分佈。我們知道,在一個正態分佈中,約有68%的資料位於跟平均數(或眾數、中位數)1個標準差範圍內,那麼剩下的約32%的資料是不受影響的。因此,約有32%的資料將不受缺失值的影響。

6、你意識到你的模型受到低偏差和高方差問題的困擾。那麼,應該使用哪種演算法來解決問題呢?為什麼?

  可以使用bagging演算法(如隨機森林)。因為,低偏差意味著模型的預測值接近實際值,換句話說,該模型有足夠的靈活性,以模仿訓練資料的分佈。這樣貌似很好,但是別忘了,一個靈活的模型沒有泛化能力,意味著當這個模型用在對一個未曾見過的資料集進行測試的時候,它會令人很失望。在這種情況下,我們可以使用bagging演算法(如隨機森林),以解決高方差問題。bagging演算法把資料集分成重複隨機取樣形成的子集。然後,這些樣本利用單個學習演算法生成一組模型。接著,利用投票(分類)或平均(迴歸)把模型預測結合在一起。另外,為了應對大方差,我們可以:

  1.使用正則化技術,懲罰更高的模型係數,從而降低了模型的複雜性。

  2.使用可變重要性圖表中的前n個特徵。可以用於當一個演算法在資料集中的所有變數裡很難尋找到有意義訊號的時候。 

7、協方差和相關性有什麼區別?

   相關性是協方差的標準化格式。協方差本身很難做比較。例如:如果我們計算工資($)和年齡(歲)的協方差,因為這兩個變數有不同的度量,所以我們會得到不能做比較的不同的協方差。為了解決這個問題,我們計算相關性來得到一個介於-1和1之間的值,就可以忽略它們各自不同的度量。

8、真陽性率和召回有什麼關係?寫出方程式。

  真陽性率=召回。它們有相同的公式(TP / TP + FN)。

9、Gradient boosting演算法(GBM)和隨機森林都是基於樹的演算法,它們有什麼區別?

  最根本的區別是,隨機森林演算法使用bagging技術做出預測;而GBM是採用boosting技術做預測的。在bagging技術中,資料集用隨機取樣的方法被劃分成n個樣本。然後,使用單一的學習演算法,在所有樣本上建模。接著利用投票或者求平均來組合所得到的預測。bagging是平行進行的,而boosting是在第一輪的預測之後,演算法將分類出錯的預測加高權重,使得它們可以在後續一輪中得到校正。這種給予分類出錯的預測高權重的順序過程持續進行,一直到達到停止標準為止。隨機森林通過減少方差(主要方式)提高模型的精度。生成樹之間是不相關的,以把方差的減少最大化。在另一方面,GBM提高了精度,同時減少了模型的偏差和方差。    

10、你認為把分類變數當成連續型變數會更得到一個更好的預測模型嗎?

  為了得到更好的預測,只有在分類變數在本質上是有序的情況下才可以被當做連續型變數來處理。

11:“買了這個的客戶,也買了......”亞馬遜的建議是哪種演算法的結果?

  這種推薦引擎的基本想法來自於協同過濾。協同過濾演算法考慮用於推薦專案的“使用者行為”。它們利用的是其他使用者的購買行為和針對商品的交易歷史記錄、評分、選擇和購買資訊。針對商品的其他使用者的行為和偏好用來推薦專案(商品)給新使用者。在這種情況下,專案(商品)的特徵是未知的。

12、在k-means或kNN,我們是用歐氏距離來計算最近的鄰居之間的距離。為什麼不用曼哈頓距離?

  我們不用曼哈頓距離,因為它只計算水平或垂直距離,有維度的限制。另一方面,歐氏距離可用於任何空間的距離計算問題。因為,資料點可以存在於任何空間,歐氏距離是更可行的選擇。例如:想象一下國際象棋棋盤,象或車所做的移動是由曼哈頓距離計算的,因為它們是在各自的水平和垂直方向做的運動。

13、我知道校正R2或者F值是用來評估線性迴歸模型的。那用什麼來評估邏輯迴歸模型?

 我們可以使用下面的方法:

  1.由於邏輯迴歸是用來預測概率的,我們可以用AUC-ROC曲線以及混淆矩陣來確定其效能。

  2.此外,在邏輯迴歸中類似於校正R2的指標是AIC。AIC是對模型係數數量懲罰模型的擬合度量。因此,我們更偏愛有最小AIC的模型。

  3.空偏差指的是隻有截距項的模型預測的響應。數值越低,模型越好。殘餘偏差表示由新增自變數的模型預測的響應。數值越低,模型越好。

14、為什麼樸素貝葉斯如此“樸素”?

  因為它假定所有的特徵在資料集中的作用是同樣重要和獨立的。正如我們所知,這個假設在現實世界中是很不真實的,因此,說樸素貝葉斯真的很“樸素”。

15、花了幾個小時後,現在你急於建一個高精度的模型。結果,你建了5 個GBM(Gradient Boosted Models),想著boosting演算法會展現“魔力”。不幸的是,沒有一個模型比基準模型表現得更好。最後,你決定將這些模型結合到一起。儘管眾所周知,結合模型通常精度高,但你就很不幸運。你到底錯在哪裡?

  據我們所知,組合的學習模型是基於合併弱的學習模型來創造一個強大的學習模型的想法。但是,只有當各模型之間沒有相關性的時候組合起來後才比較強大。由於我們已經試了5個GBM也沒有提高精度,表明這些模型是相關的。具有相關性的模型的問題是,所有的模型提供相同的資訊。例如:如果模型1把User1122歸類為1,模型2和模型3很有可能會做同樣的分類,即使它的實際值應該是0,因此,只有弱相關的模型結合起來才會表現更好。