機器學習面試問題總結


判別式模型和生成式模型的區別?

判別方法:由數據直接學習決策函數 Y = f(X),或者由條件分布概率 P(Y|X)作為預測模型,即判別模型。
生成方法:由數據學習聯合概率密度分布函數 P(X,Y),然后求出條件概率分布P(Y|X)作為預測的模型,即生成模型。
由生成模型可以得到判別模型,但由判別模型得不到生成模型。
常見的判別模型有:K近鄰、SVM、決策樹、感知機、線性判別分析(LDA)、線性回歸、傳統的神經網絡、邏輯斯蒂回歸、boosting、條件隨機場
常見的生成模型有:朴素貝葉斯、隱馬爾可夫模型、高斯混合模型、文檔主題生成模型(LDA)、限制玻爾茲曼機

什么時候使用歸一化/標准化

如果對輸出結果范圍要求,用歸一化;如果數據較為穩定,不存在極端的最大最小值,用歸一化;如果存在噪音和異常值,可以使用標准化處理。歸一化和標准化的而區別在於,歸一化是統一到一定的區間(由極值決定),而標准化和整體樣本由很大關系。

極大似然估計和最小二乘法區別

對於最小二乘法,當從模型總體隨機抽取n組樣本觀測值后,最合理的參數估計量應該使得模型能最好地擬合樣本數據,也就是估計值和觀測值之差的平方和最小。
而對於最大似然法,當從模型總體隨機抽取n組樣本觀測值后,最合理的參數估計量應該使得從模型中抽取該n組樣本觀測值的概率最大。
在最大似然法中,通過選擇參數,使已知數據在某種意義下最有可能出現,而某種意義通常指似然函數最大,而似然函數又往往指數據的概率分布函數。與最小二乘法不同的是,最大似然法需要已知這個概率分布函數,這在實踐中是很困難的。一般假設其滿足正態分布函數的特性,在這種情況下,最大似然估計和最小二乘估計相同。
最小二乘法以估計值與觀測值的差的平方和作為損失函數,極大似然法則是以最大化目標值的似然概率函數為目標函數,從概率統計的角度處理線性回歸並在似然概率函數為高斯函數的假設下同最小二乘建立了的聯系。

什么是偏差和方差?

偏差:描述的是預測值(估計值)的期望與真實值之間的差距。偏差越大,越偏離真實數據
方差:描述的是預測值的變化范圍,離散程度,也就是離其期望值的距離。方差越大,數據的分布越分散
Bias:誤差,對象是單個模型,期望輸出與真實標記的差別(可以解釋為描述了模型對本訓練集的擬合程度)
Variance:方差,對象是多個模型(這里更好的解釋是換同樣規模的訓練集,模型的擬合程度怎么樣;也可以說方差是刻畫數據擾動對模型的影響,描述的是訓練結果的分散程度)
從同一個數據集中,用科學的采樣方法得到幾個不同的子訓練集,用這些訓練集訓練得到的模型往往並不相同。
參數w變大,會使模型變得更復雜(即過擬合情況),擬合的更好,故偏差會變小;而對於數據的擾動會更加敏感,所以方差會變大。

L2與L1的區別?為什么能能防止過擬合?

L1會趨向於產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近於0。Lasso在特征選擇時候非常有用,而Ridge就只是一種規則化而已。在所有特征中只有少數特征起重要作用的情況下,選擇Lasso比較合適,因為它能自動選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也許更合適。

更小的權值\(w\),從某種意義上說,表示網絡的復雜度更低,對數據的擬合剛剛好(這個法則也叫做奧卡姆剃刀),
過擬合的時候,擬合函數的系數往往非常大,為什么?如下圖所示,過擬合,就是擬合函數需要顧忌每一個點,最終形成的擬合函數波動很大。在某些很小的區間里,函數值的變化很劇烈。這就意味着函數在某些小區間里的導數值(絕對值)非常大,由於自變量值可大可小,所以只有系數足夠大,才能保證導數值很大。
而正則化是通過約束參數的范數使其不要太大,所以可以在一定程度上減少過擬合情況。

另外,L2與L1的區別在於,L1正則是拉普拉斯先驗,而L2正則則是高斯先驗。它們都是服從均值為0,協方差為\(1λ\)。當λ=0時,即沒有先驗)沒有正則項,則相當於先驗分布具有無窮大的協方差,那么這個先驗約束則會非常弱,模型為了擬合所有的訓練集數據, 參數w可以變得任意大從而使得模型不穩定,即方差大而偏差小。λ越大,標明先驗分布協方差越小,偏差越大,模型越穩定。即,加入正則項是在偏差bias與方差variance之間做平衡tradeoff。

為什么L1正則是拉普拉斯先驗,而L2正則則是高斯先驗?

先看下最原始的線性回歸:
假設\(y=Xw+\epsilon\)\(\epsilon\)服從高斯分布,則有:

\[p(\epsilon^{(i)})=\frac{1}{\sqrt{2 \pi} \sigma} \exp (-\frac{ (\epsilon^{(i)})^2}{2 \sigma^2}) \]

得:

\[p(y^{(i)}|x^{(i)};\theta)=\frac{1}{\sqrt{2 \pi} \sigma}\exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \]

由最大似然估計(MLE):

\[L(w)=p(\hat y|X;w) \\ = \prod_{i=1}^m p(y^{(i)}|x^{(i)};\theta) \\ = \prod_{i=1}^m \frac{1}{\sqrt{2 \pi} \sigma} \exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \]

取對數:

\[l(w)=\log L(w) \\ =\log \prod_{i=1}^m \frac{1}{\sqrt{2 \pi} \sigma} \exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \\ =\sum_{i=1}^m \log \frac{1}{\sqrt{2 \pi} \sigma} \exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \\ =m \log \frac{1}{\sqrt{2 \pi} \sigma} -\frac{1}{{\sigma}^2} \cdot \frac{1}{2} \sum_{i=1}^m (y^{(i)}-w^T x^{(i)})^2 \]

即:

\[w_{MLE} = arg \min_w \sum_{i=1}^m (y^{(i)}-w^Tx^{(i)})^2 \]

這就導出了我們原始的 least-squares 損失函數,但這是在我們對參數 \(w\) 沒有加入任何先驗分布的情況下。在數據維度很高的情況下,我們的模型參數很多,模型復雜度高,容易發生過擬合。
這個時候,我們可以對參數 \(w\) 引入先驗分布,降低模型復雜度。

我們對參數\(w\) 引入協方差為\(\alpha\)的零均值高斯先驗。

\[L(w) = p(\hat y|X;w)p(w) \\ =\prod_{i=1}^m p(y^{(i)}|x^{(i)};\theta) p(w) \\ =\prod_{i=1}^m \frac{1}{\sqrt{2 \pi} \sigma} \exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \prod_{j=1}^n \frac{1}{\sqrt{2 \pi \alpha}} \exp{(-\frac{(w^{(j)})^2}{2 \alpha})} \\ =\prod_{i=1}^m \frac{1}{\sqrt{2 \pi} \sigma} \exp(-\frac{ (y^{(i)}-w^T x^{(i)})^2}{2 \sigma^2}) \frac{1}{\sqrt{2 \pi \alpha}} \exp{(-\frac{w^T w}{2 \alpha})} \]

取對數:

\[l(w)=log L(w) \\ =m \log \frac{1}{\sqrt{2 \pi} \sigma}+n \log{\frac{1}{\sqrt{2 \pi \alpha}}} -\frac{1}{{\sigma}^2} \cdot \frac{1}{2} \sum_{i=1}^m (y^{(i)}-w^T x^{(i)})^2 -\frac{1}{\alpha} \cdot \frac{1}{2} w^T w \\ \Rightarrow w_{MAP_{Gussian}} = argmin_w (\frac{1}{{\sigma}^2} \cdot \frac{1}{2} \sum_{i=1}^m (y^{(i)}-w^T x^{(i)})^2 + \frac{1}{\alpha} \cdot \frac{1}{2} w^T w) \]

等價於:

\[J_R(w)=\frac{1}{n} ||y-w^TX||_2 + \lambda ||w||_2 \]

即,對參數引入 高斯先驗 等價於L2正則化
那么拉普拉斯分布(Laplace distribution)呢?
拉普拉斯分布為:

\[f(x|\mu,b)=\frac{1}{2b}\exp(-\frac{|x-\mu|}{b}) \]

![拉普拉斯分布][base64str1]

重復之前的推導過程我們很容易得到:

\[w_{MAP_{Loplace}} = argmin_w (\frac{1}{{\sigma}^2} \cdot \frac{1}{2} \sum_{i=1}^m (y^{(i)}-w^T x^{(i)})^2 + \frac{1}{b^2} \cdot \frac{1}{2} ||w||_1) \]

該問題通常被稱為 LASSO (least absolute shrinkage and selection operator) 。LASSO 仍然是一個凸優化問題,不具有解析解。它的優良性質是能產生稀疏性,導致\(w\)中許多項變成零。即,對參數引入 拉普拉斯先驗 等價於L1正則化。

Lasso回歸如何求解?

Lasso回歸有時也叫做線性回歸的L1正則化,和Ridge回歸的主要區別就是在正則化項,Ridge回歸用的是L2正則化,而Lasso回歸用的是L1正則化。由於L1范數用的是絕對值之和,在零點處不可求導,所以使用非梯度下降法進行求解,如 坐標軸下降法(coordinate descent)和最小角回歸法( Least Angle Regression, LARS)。          

  • 坐標軸下降法
    坐標下降算法每次選擇一個維度進行參數更新,維度的選擇可以是隨機的或者是按順序。
    當一輪更新結束后,更新步長的最大值少於預設閾值時,終止迭代。
    坐標下降優化方法是一種非梯度優化算法。在整個過程中依次循環使用不同的坐標方向進行迭代,一個周期的一維搜索迭代過程相當於一個梯度迭代。坐標軸下降法的數學依據為:對於一個可微凸函數\(f(w)\),其中w為\(n*1\)的向量,如果對於一個解\(w*\),使得\(f(w)\)在某個坐標軸上\(w\)都能達到最小值,則w*就是f(w)的全局的最小值點。
    梯度下降法是利用目標函數的導數(梯度)來確定搜索方向的,該梯度方向可能不與任何坐標軸平行。而坐標下降法是利用當前坐標方向進行搜索,不需要求目標函數的導數,只按照某一坐標方向進行搜索最小值,兩者都是迭代方法,且每一輪迭代,都需要O(\(mn\))的計算量(m為樣本數,n為系數向量的維度)。
  • 最小角回歸法
    最小角回歸法運用到了前向選擇法(選取余弦距離最小的值進行投影,計算殘差,迭代這個過程,直到殘差達到我們的較小值或者已經遍歷了整個變量)和前向梯度算法(選取余弦距離最小的值的樣本方向進行移動一定距離,計算殘差,重復這個迭代過程)的綜合,做法就是取投影方向和前向梯度算法的殘差方向形成的角的平分線方向,進行移動。對前向梯度算法和前向選擇算法做了折中,保留了前向梯度算法一定程度的精確性,同時簡化了前向梯度算法一步步迭代的過程。

k折交叉驗證中k取值多少有什么關系

在理想情況下,我們認為K折交叉驗證可以降低模型的方差,從而提高模型的泛化能力,通俗地說,我們期望模型在訓練集的多個子數據集上表現良好,要勝過單單在整個訓練數據集上表現良好。(但實際上,由於我們所得到K折數據之間並非獨立而存在相關性,K折交叉驗證到底能降低多少方差還不確定,同時帶來的偏差上升有多少也還存疑。)
完全不使用交叉驗證是一種極端情況,即K=1。在這個時候,所以數據都被用於訓練,模型很容易出現過擬合,因此容易是低偏差、高方差(low bias and high variance)。
留一法是K折的另一種極端情況,即K=n。隨着K值的不斷升高,單一模型評估時的方差逐漸加大而偏差減小。但從總體模型角度來看,反而是偏差升高了而方差降低了。
所以當K值在1到n之間的游走,可以理解為一種方差和偏差妥協的結果。
2017年的一項研究給出了另一種經驗式的選擇方法,作者建議k=log(n) 且保證n/K>3d ,n代表了數據量,d代表了特征數。
1、使用交叉驗證的根本原因是數據集太小,而較小的K值會導致可用於建模的數據量太小,所以小數據集的交叉驗證結果需要格外注意。建議選擇較大的K值。
2、當模型穩定性較低時,增大K的取值可以給出更好的結果
3、相對而言,較大的K值的交叉驗證結果傾向於更好。但同時也要考慮較大K值的計算開銷。

怎么處理多分類問題?

拆解法;有三種:一對一(OvO)、一對其余(OvR)、多對多(MvM);
一對一是將N個類兩兩配合,從而產生N(N-1)/2個分類任務,最終結果通過投票產生:即把被預測得最多的類別作為最終分類結果。
一對其余則是每次講一個類的樣例作為正例、所有其他類的樣例作為反例來訓練N個分類器。在測試時時,若僅有一個分類器預測為正例,則對應的類別標記作為最終的分類結果,若有多個,則考慮各個分類器的預測置信度,選擇置信度最大的類別作為分類結果。它需要訓練N個分類器,但當類別很多時,OvO的訓練時間開銷通常比OvR更小。
多對多是每次講若干個類作為正類,若干個其他類作為反類。需要特殊的設計,比如‘糾錯輸出碼’:
假設一個數據集一共有K類,我們使用L種兩類分類器(不僅僅是SVM),就會得到L個分類結果,每個結果用+1和-1來表示。這樣,對於K類數據集,我們就可以學習到一個\(K*L\)的矩陣。然后,來了一個測試樣本,我們就用同一樣的方法得到測試樣本的長度為L的向量,拿這個向量和\(K*L\)矩陣中的每一行做Hamming distance,距離最小的即為該測試樣本的分類結果。

boosting和bagging的區別?

1)樣本選擇上:
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的.
Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化.而權值是根據上一輪的分類結果進行調整.
2)樣例權重:
Bagging:使用均勻取樣,每個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大.
3)預測函數:
Bagging:所有預測函數的權重相等.
Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重.
4)並行計算:
Bagging:各個預測函數可以並行生成
Boosting:各個預測函數只能順序生成,因為后一個模型參數需要前一輪模型的結果.

如何從偏差和方差的角度解釋bagging和boosting的原理?

偏差指的是算法的期望預測與真實值之間的偏差程度,反映了模型本身的擬合能力;方差度量了同等大小的訓練集的變動導致學習性能的變化,刻畫了數據擾動所導致的影響。
Bagging對樣本重采樣,對每一重采樣得到的子樣本集訓練一個模型,最后取平均。由於子樣本集的相似性以及使用的是同種模型,因此各模型有近似相等的bias和variance。由於\(E[\frac{\sum X_i}{n}]=E[X_i]\),所以bagging后的bias和單個子模型的接近,一般來說不能顯著降低bias。另一方面,若各子模型獨立,則有\(Var[\frac{\sum X_i}{n}]=\frac{Var[X_i]}{n}\),此時可以顯著降低variance。若各子模型完全相同,則\(Var[\frac{\sum X_i}{n}]=Var[X_i]\),此時不會降低variance。bagging方法得到的各子模型是有一定相關性的,屬於上面兩個極端狀況的中間態,因此可以一定程度降低variance。
boosting從優化角度來看,是用forward-stagewise這種貪心法去最小化損失函數,由於采取的是串行優化的策略,各子模型之間是強相關的,於是子模型之和並不能顯著降低variance。所以說boosting主要還是靠降低bias來提升預測精度。

哪些機器學習算法不需要做歸一化處理?

概率模型不需要歸一化,因為它們不關心變量的值,而是關心變量的分布和變量之間的條件概率,如決策樹、RF。而像SVM、LR、KNN、KMeans之類的最優化問題就需要歸一化。

特征選擇基本原則

數據預處理完成之后,我們需要選擇有意義的特征,輸入機器學習的算法和模型進行訓練,通常來說,從兩個方面考慮來選擇特征

  • 特征是否發散:如果一個特征不發散,例如方差接近於0,也就是說樣本在這個特征上基本上沒有差異,這個特征對於樣本的區分並沒有什么用。
  • 特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。

根據特征選擇的形式又可以將特征選擇方法分為3種:

  • Filter:過濾法,按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。
  • Wrapper:包裝法,根據目標函數(通常是預測效果評分),每次選擇若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似於Filter方法,但是是通過訓練來確定特征的優劣。

為什么GBDT只能由回歸樹組成?

因為GBDT是加法模型,主要是利用殘差逼近的方式,這就意味每棵樹的值是連續的可疊加的,這一點和回歸樹輸出連續值不謀而合,如果采用分類樹,那么殘差逼近進行疊加就會使得這種疊加沒有意義,比如男+男+女=到底是男是女。這個是GBDT基本原理決定的。

隨機森林如何評估特征重要性

隨機森林中進行特征重要性的評估思想為:
判斷每個特征在隨機森林中的每顆樹上做了多大的貢獻,然后取個平均值,最后比一比特征之間的貢獻大小。其中關於貢獻的計算方式可以是基尼指數或袋外數據錯誤率。
以基於袋外數據為例,
對於一棵樹 ,用OOB樣本可以得到誤差 \(e1\),然后隨機改變OOB中的第 \(j\) 列,保持其他列不變,對第 \(j\) 列進行隨機的上下置換,得到誤差 \(e2\)。至此,可以用 \(e1-e2\) 來刻畫特征 \(j\) 的重要性。其依據就是,如果一個特征很重要,那么其變動后會非常影響測試誤差,如果測試誤差沒有怎么改變,則說明特征\(j\)不重要。
而該方法中涉及到的對數據進行打亂的方法通常有兩種:
1)是使用uniform或者gaussian抽取隨機值替換原特征;
2)是通過permutation的方式將原來的所有N個樣本的第 i 個特征值重新打亂分布(相當於重新洗牌)。

xgboost怎幺處理缺失值?

xgboost處理缺失值的方法和其他樹模型不同。xgboost把缺失值當做稀疏矩陣來對待,本身的在節點分裂時不考慮的缺失值的數值。缺失值數據會被分到左子樹和右子樹分別計算損失,選擇較優的那一個。如果訓練中沒有數據缺失,預測時出現了數據缺失,那么默認被分類到右子樹。
這樣的處理方法固然巧妙,但也有風險:假設了訓練數據和預測數據的分布相同,比如缺失值的分布也相同,不過直覺上應該影響不是很大。

lightgbm和xgboost有什么區別?他們的loss一樣么? 算法層面有什么區別?

lightgbm:基於Histogram的決策樹算法;Leaf-wise的葉子生長策略;Cache命中率優化;直接支持類別特征(categorical Feature)
xgboost:預排序;Level-wise的層級生長策略;特征對梯度的訪問是一種隨機訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM