41個機器學習面試題
41 Essential Machine Learning Interview Questions (with answers)
一、演算法理論
Q1: 什麼是偏倚(bias)、方差(variable)均衡?
偏倚指的是模型預測值與真實值的差異,是由使用的學習演算法的某些錯誤或過於簡單的假設造成的誤差。它會導致模型欠擬合,很難有高的預測準確率。
方差指的是不同訓練資料訓練的模型的預測值之間的差異,它是由於使用的演算法模型過於複雜,導致對訓練資料的變化十分敏感,這樣會導致模型過擬合,使得模型帶入了過多的噪音。
任何演算法的學習誤差都可以分解成偏倚、方差和噪音導致的固定誤差。模型越複雜,會降低偏倚增加方差。為了降低整體的誤差,我們需要對偏倚方差均衡,使得模型中不會由高偏倚或高方差。
Q2:監督學習和非監督學習有什麼不同?
監督學習需要具有標籤(label)的訓練資料,比如做分類,你需要先對訓練資料做標記,然後才能訓練模型將資料分成你說需要的標記類。
而非監督學習則不需要。
Q3: KNN和k-means聚類由什麼不同?
k-Nearest Neighbors 是一種監督學習演算法,而k-means 是非監督的。這兩種演算法看起來很相似,都需要計算樣本之間的距離。knn演算法需要事先已有標註好的資料,當你需要對未標註的資料進行分類時,統計它附近最近的k個樣本,將其劃分為樣本數最多的類別中。k-means聚類只需要一些未分類的資料點和閥值,演算法會逐漸將樣本點進行分成族類。
Q4:解釋一下ROC曲線的原理
ROC曲線是真正率和假正率在不同的閥值下之間的圖形表示關係。通常用作權衡模型的敏感度與模型對一個錯誤分類報警的概率。
真正率表示:表示正的樣本被預測為正佔所有正樣本的比例。
假正率表示:表示負的樣本被預測為正佔所有負樣本的比例。
(0,0)點表示所有樣本都被預測為負,此時閥值很大。
(1,1)點表示所有樣本都被預測為正,此時閥值很小。
Q5:定義一下prediction準確率、recall召回率
召回率就是Q4中的真正率。
準確率指的是:正樣本被預測為正所佔所有預測為正樣本數的比例
- | 預測正 | 預測負 |
---|---|---|
真實正 | TP | FN |
真實負 | FP | TN |
recall: precision:
Q6: 什麼是貝葉斯定理,它是如何使用在機器學習中的?
貝葉斯定理會根據一件事發生的先驗知識告訴你它後驗概率。數學上,它表示為:一個條件樣本發生的真正率佔真正率和假正率之和的比例,即:
舉個例子: 已知某疾病的患病概率為5%,現用某檢驗方法進行診斷,若患有該病,則有90%的機率檢驗結果呈陽性。但即使正常人使用該檢驗方法,也有10%的機率誤診而呈陽性。某人檢驗結果為陽性,求此人患病的概率。
貝葉斯定理使一些機器學習演算法如:樸素貝葉斯等的理論基礎。
Q7:為什麼我們要稱“樸素“貝葉斯?
因為我們在用到它的時候,有一個很強的假設,現實資料中幾乎不會出現的:我們假設特徵之間是相互獨立,也就是我們計算條件概率時可以簡化成它的元件的條件概率乘積。
Q8:L1、L2正則之間有什麼不同?
L2正則 對應的是加入2範數,使得對權重進行衰減,從而達到懲罰損失函式的目的,防止模型過擬合。保留顯著減小損失函式方向上的權重,而對於那些對函式值影響不大的權重使其衰減接近於0。相當於加入一個gaussian prior。
L1正則 對應得失加入1範數,同樣可以防止過擬合。它會產生更稀疏的解,即會使得部分權重變為0,達到特徵選擇的效果。相當於加入了一個laplacean prior。
Q9:你最喜歡的演算法是什麼?把它解釋一下。
這裡我比較想說的是SVM,因為它的數學理論讓我覺得很有意思,而且應用廣泛,效果不錯。先從線性可分講起,然後是最大間隔原理。什麼是支援向量?如何進行常數估計。轉化成優化問題,對偶問題,kkt條件,拉格朗日方法求最值等。然後是非線性可分情況,軟間隔,進行座標變化。引入核函式。常見的:多項式核函式、指數核函式、高斯核函式。
Q10:第一類誤差和第二類誤差有什麼區別?
第一類誤差指的是假正率,第二類指的是假負率。簡單來說,第一類誤差意味著假設為真的情況下,作出了拒絕原假設的一種錯誤推斷。第二類誤差意味著假設為假的情況下,做出了接受原假設的一種錯誤判斷。
舉個例子:第一類誤差,你告訴一個男的他懷孕了。第二類誤差,你告訴一個已經懷孕的女子,她沒懷孕。
Q11:什麼是傅立葉變換?
傅立葉變換指:一個滿足某些條件的函式可以表示成三角函式或他們的積分形式的線性組合。
Q12:概率和似然有什麼區別?
概率和似然都是指可能性,但在統計學中,概率和似然有截然不同的用法。概率描述了已知引數時的隨機變數的輸出結果;似然則用來描述已知隨機變數輸出結果時,未知引數的可能取值。例如,對於“一枚正反對稱的硬幣上拋十次”這種事件,我們可以問硬幣落地時十次都是正面向上的“概率”是多少;而對於“一枚硬幣上拋十次,我們則可以問,這枚硬幣正反面對稱的“似然”程度是多少。
概率(密度)表達給定θ下樣本隨機向量X=x的可能性,而似然表達了給定樣本X=x下引數θ1(相對於另外的引數θ2)為真實值的可能性。我們總是對隨機變數的取值談概率,而在非貝葉斯統計的角度下,引數是一個實數而非隨機變數,所以我們一般不談一個引數的概率,而說似然。
Q13:什麼是深度學習,它與機器學習演算法之間有什麼聯絡?
深度學習是機器學習的一個子領域,它關心的是參照神經學科的理論構建神經網路,使用反向傳播對大量未標註或半結構化的資料進行建模。從這個角度看,深度學習可以看成一種非監督學習演算法,通過使用神經網路學習資料的表示。
Q14:生成模型與判別模型有什麼區別?
生成模型會學習資料的分佈;判別模型學習的是不同型別資料之間的區別,不學習資料內部特點。在分類問題上,判別模型會優於生成模型。
判別模型求解的思路是:條件分佈——>模型引數後驗概率最大——->(似然函式\cdot 引數先驗)最大——->最大似然
生成模型的求解思路是:聯合分佈——->求解類別先驗概率和類別條件概率
常見的生成方法有混合高斯模型、樸素貝葉斯法和隱形馬爾科夫模型等,常見的判別方法有SVM、LR等
Q15:交叉檢驗如何用在時間序列資料上?
與標準的k-folds 交叉檢驗不同,資料不是隨機分佈的,而是具有時序性的。如果模式出現在後期,模型仍然需要選擇先前時間的資料,儘管前期對模式無影響。我們可以如下這麼做:
fold1:training[1], test[2]
fold2:training[1 2], test[3]
fold3:training[1 2 3], test[4]
fold4:training[1 2 3 4], test[5]
fold5:training[1 2 3 4 5], test[6]
Q16:如何對決策樹進行剪枝?
剪枝是決策樹發生過擬合後,為了降低模型複雜度,提高模型準確率的一種做法。可以分為自上而下和自下而上兩種。常見的方法有:誤差降低剪枝(REP)和代價複雜度剪枝(CCP)。
REP簡單的來說就是對樹的每一個結點進行剪枝,如果剪掉某個結點不會降低模型準確率,那麼將其剪掉。這種啟發式的做法實際上就是為了最大化準確率。
Q17:模型的精度和模型的效能哪個對你更重要?
許多機器學習的模型會有高的精度,但是預測能力也就是泛化能力較低,如何去理解它們呢?
精度只是模型效能的一部分,有可能是會產生誤導的那個。對於具有傾斜的資料集,比如要從大量的金融資料中識別出少量的詐騙資料,一個精度高的模型可能會告訴你沒有詐騙,然而這樣的模型預測是沒有意義的。所以,不要總是把精度當作模型最重要的事。
Q18:什麼是F1數,怎麼使用它?
F1數是衡量模型效能的一個指標。它是模型精準率和召回率的加權平均,1表示最好,0表示最差。在分類問題中有時精準率和召回率不會同時都高,那麼我們可以使用F1數。
Q19:如何處理一個不平衡的資料集?
不平衡的資料集:比如二分類問題中,一類資料有90%,而另一類只有10%。我們可以輕易的得到90%準確率的模型,但是它對第二類的預測值為0。那麼我們需要對這樣的資料進行處理:
- 收集更多的資料,使其達到平衡
- 使用重複取樣
- 使用不同的演算法
重要的是:你注意到了資料的不平衡導致的問題,以及如何去解決它們。
Q20:什麼時候你應該使用分類而不是迴歸?
分類會產生離散的數值,使得資料嚴格的分為不同類。迴歸會得到連續的值,使你更好的區分獨立點之間的區別。當你需要知道你的資料明確的屬於那些類時你可以用分類。
Q21:舉個例子,說明使用整合學習會很有用。
整合學習通過組合一些基學習演算法來優化得到更好的預測效能,通常可以防止模型的過擬合使模型更具有魯棒性。
你可以列舉一些整合學習的例子,如bagging、boosting、stacking等,並且瞭解他們是如何增加模型預測能力的。
Q22:你如何確保你的模型沒有過擬合?
過度擬合的訓練資料以及資料攜帶的噪音,對於測試資料會帶來不確定的推測。有如下三種方法避免過擬合:
- 保持模型儘可能地簡單:通過考量較少的變數和引數來減少方差,達到資料中消除部分噪音的效果。
- 使用交叉檢驗的手段如:k-folds cross-validation。
- 使用正則化的技術如:LASSO方法來懲罰模型中可能導致過擬合的引數。
Q23:如何評估你的機器學習模型的有效性?
首先你需要將資料分成訓練集和測試集,或者使用給交叉驗證方法分割。然後你需要選擇度量模型表現的metrics,如F1數、準確率、混淆矩陣等。更重要的是,根據實際情況你需要理解模型度量的輕微差別,以便於選擇正確的度量標準。
Q24:如何評估一個LR model?
Q23的一個子問題。首先你需要知道LR的目標是什麼?(分類或預測)然後通過舉一些例子來說明。
Q25:什麼是核技巧,有什麼用處?
核技巧使用核函式,確保在高維空間不需要明確計算點的座標,而是計算資料的特徵空間中的內積。這使其具有一個很有用的屬性:更容易的計算高維空間中點的座標。許多演算法都可以表示稱這樣的內積形式,使用核技巧可以保證低維資料在高維空間中運用演算法進行計算。
二、程式設計能力
Q26:如何處理資料中的缺失值或錯誤值?