1. 程式人生 > >ml課程:模型融合與調優及相關案例程式碼

ml課程:模型融合與調優及相關案例程式碼

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。

這篇文章主要介紹模型融合及引數調優相關內容,以及《百面機器學習》上關於模型評估、整合相關內容,最後還有相關案例程式碼。

先放一張大家都比較熟悉的圖:

這是模型選擇的一個流程圖,可以作為相關的參考。

模型評估:

評估指標:在模型評估過程中,分類問題、排序問題、迴歸問題往往需要使用不同的指標進行評估。模型評估主要有以下幾個指標:準確率(Accuracy),精確率(Precision),召回率(Recall),均方根誤差(Root Mean Square Error,RMSE)。

面試問題1:準確率的侷限性?

  • 準確率是指分類正確的樣本佔總樣本
    個數的比例,即:

    其中ncorrect為被正確分類的樣本個數,ntotal為總樣本的個數。
  • 準確率是分類問題中最簡單也是最直觀的評價指標,但存在明顯的缺陷。比如,當負樣本佔99%時,分類器把所有樣本都預測為負樣本也可以獲得99%的準確率。所以,當不同類別的樣本比例非常不均衡時,佔比大的類別往往成為影響準確率的最主要因素。
  • 事實上,這是一道比較開放的問題,面試者可以根據遇到的問題一步步地排查原因。標準答案其實也不限於指標的選擇,即使評估指標選擇對了,仍會存在模型過擬合或欠擬合、測試集和訓練集劃分不合理、線下評估與線上測試的樣本分佈存在差異等一系列問題,但評估指標的選擇是最容易被發現,也是最可能影響評估結果的因素。

面試問題2:精確率與召回率的權衡?

  • 精確率(precison):是指分類正確的正樣本個數佔分類器判定為正樣本的樣本個數的比例;召回率(recall):是指分類正確的正樣本個數佔真正的正樣本個數的比例。
  • Precision值和Recall值是既矛盾又統一的兩個指標,為了提高Precision值,分類器需要儘量在“更有把握”時才把樣本預測為正樣本,但此時往往會因為過於保守而漏掉很多“沒有把握”的正樣本,導致Recall值降低。
  • 為了綜合評估一個排序模型的好壞,不僅要看模型在不同Top N下的[email protected][email protected]
    ,而且最好繪製出模型的P-R(Precision-Recall)曲線。
  • P-R曲線的橫軸是召回率,縱軸是精確率。對於一個排序模型來說,其P-R曲線上的一個點代表著,在某一閾值下,模型將大於該閾值的結果判定為正樣本,小於該閾值的結果判定為負樣本,此時返回結果對應的召回率和精確率。

    上面樣例圖,其中實線代表模型A的P-R曲線,虛線代表模型B的P-R曲線。當召回率接近於0時,模型A的精確率為0.9,模型B的精確率是1,這說明模型B得分前幾位的樣本全部是真正的正樣本,而模型A即使得分最高的幾個樣本也存在預測錯誤的情況。並且,隨著召回率的增加,精確率整體呈下降趨勢。但是,當召回率為1時,模型A的精確率反而超過了模型B。這充分說明,只用某個點對應的精確率和召回率是不能全面地衡量模型的效能,只有通過P-R曲線的整體表現,才能夠對模型進行更為全面的評估。
  • 除此之外,F1 score和ROC曲線也能綜合地反映一個排序模型的效能。F1score是精準率和召回率的調和平均值,它定義為:

面試問題3:平方根誤差的“意外”?

  • RMSE經常被用來衡量回歸模型的好壞,但按照題目的敘述,RMSE這個指標卻失效了。先看一下RMSE的計算公式為:

    其中,yi是第i個樣本點的真實值,是第i個樣本點的預測值,n是樣本點的個數。
  • 一般情況下,RMSE能夠很好地反映迴歸模型預測值與真實值的偏離程度。但在實際問題中,如果存在個別偏離程度非常大的離群點(Outlier)時,即使離群點數量非常少,也會讓RMSE指標變得很差。
  • 針對這個問題,有什麼解決方案呢?可以從三個角度來思考。第一,如果我們認定這些離群點是“噪聲點”的話,就需要在資料預處理的階段把這些噪聲點過濾掉。第二,如果不認為這些離群點是“噪聲點”的話,就需要進一步提高模型的預測能力,將離群點產生的機制建模進去(這是一個巨集大的話題,這裡就不展開討論了)。第三,可以找一個更合適的指標來評估該模型。關於評估指標,其實是存在比RMSE的魯棒性更好的指標,比如平均絕對百分比誤差(Mean AbsolutePercent Error,MAPE),它定義為:

    相比RMSE,MAPE相當於把每個點的誤差進行了歸一化,降低了個別離群點帶來的絕對誤差的影響。

面試問題4:什麼是ROC曲線?如何繪製ROC曲線?

  • ROC曲線是Receiver Operating Characteristic Curve的簡稱,中文名為“受試者工作特徵曲線”。ROC曲線源於軍事領域,而後在醫學領域應用甚廣,“受試者工作特徵曲線”這一名稱也正是來自於醫學領域。
  • ROC曲線的橫座標為假陽性率(False Positive Rate,FPR);縱座標為真陽性率(True Positive Rate,TPR)。FPR和TPR的計算方法分別為:

    上式中,P是真實的正樣本的數量,N是真實的負樣本的數量,TP是P個正樣本中被分類器預測為正樣本的個數,FP是N個負樣本中被分類器預測為正樣本的個數。
  • ROC曲線是通過不斷移動分類器的“截斷點”來生成曲線上的一組關鍵點的,通過下面的例子進一步來解釋“截斷點”的概念。在二值分類問題中,模型的輸出一般都是預測樣本為正例的概率。樣本按照預測概率從高到低排序。在輸出最終的正例、負例之前,我們需要指定一個閾值,預測概率大於該閾值的樣本會被判為正例,小於該閾值的樣本則會被判為負例。比如,指定閾值為0.9,那麼只有第一個樣本會被預測為正例,其他全部都是負例。上面所說的“截斷點”指的就是區分正負預測結果的閾值。通過動態地調整截斷點,從最高的得分開始(實際上是從正無窮開始,對應著ROC曲線的零點),逐漸調整到最低得分,每一個截斷點都會對應一個FPR和TPR,在ROC圖上繪製出每個截斷點對應的位置,再連線所有點就得到最終的ROC曲線。

面試問題5:如何計算AUC?

  • AUC指的是ROC曲線下的面積大小,該值能夠量化地反映基於ROC曲線衡量出的模型效能。計算AUC值只需要沿著ROC橫軸做積分就可以了。由於ROC曲線一般都處於y=x這條直線的上方(如果不是的話,只要把模型預測的概率反轉成1−p就可以得到一個更好的分類器),所以AUC的取值一般在0.5~1之間。AUC越大,說明分類器越可能把真正的正樣本排在前面,分類效能越好。
  • 相比之前的P-R曲線,ROC曲線有一個特點,當正負樣本的分佈發生變化時,ROC曲線的形狀能夠基本保持不變,而P-R曲線的形狀一般會發生較劇烈的變化。

  • 可以看出,P-R曲線發生了明顯的變化,而ROC曲線形狀基本不變。這個特點讓ROC曲線能夠儘量降低不同測試集帶來的干擾,更加客觀地衡量模型本身的效能。所以,ROC曲線的適用場景更多,被廣泛用於排序、推薦、廣告等領域。但需要注意的是,選擇P-R曲線還是ROC曲線是因實際問題而異的,如果研究者希望更多地看到模型在特定資料集上的表現,P-R曲線則能夠更直觀地反映其效能。

面試問題6:結合你的學習和研究經歷,探討為什麼在一些場景中要使用餘弦相似度而不是歐氏距離?

  • 對於兩個向量A和B,其餘弦相似度定義為

    即兩個向量夾角的餘弦,關注的是向量之間的角度關係,並不關心它們的絕對大小,其取值範圍是[−1,1]。當一對文字相似度的長度差距很大、但內容相近時,如果使用詞頻或詞向量作為特徵,它們在特徵空間中的的歐氏距離通常很大;而如果使用餘弦相似度的話,它們之間的夾角可能很小,因而相似度高。此外,在文字、影象、視訊等領域,研究的物件的特徵維度往往很高,餘弦相似度在高維情況下依然保持“相同時為1,正交時為0,相反時為−1”的性質,而歐氏距離的數值則受維度的影響,範圍不固定,並且含義也比較模糊。
  • 在一些場景,例如Word2Vec中,其向量的模長是經過歸一化的,此時歐氏距離與餘弦距離有著單調的關係,即

    其中|| A−B ||2表示歐氏距離,cos(A,B)表示餘弦相似度,(1−cos(A,B))表示餘弦距離。在此場景下,如果選擇距離最小(相似度最大)的近鄰,那麼使用餘弦相似度和歐氏距離的結果是相同的。
  • 總體來說,歐氏距離體現數值上的絕對差異,而餘弦距離體現方向上的相對差異。

面試問題7:餘弦距離是否是一個嚴格定義的距離?

  • 距離的定義:在一個集合中,如果每一對元素均可唯一確定一個實數,使得三條距離公理(正定性,對稱性,三角不等式)成立,則該實數可稱為這對元素之間的距離。
  • 餘弦距離滿足正定性和對稱性,但是不滿足三角不等式,因此它並不是嚴格定義的距離。具體來說,對於向量A和B,三條距離公理的證明過程如下:
  • 正定性:根據餘弦距離的定義有,

    ,考慮到,因此有恆成立。特別地,有

    因此餘弦距離滿足正定性。
  • 對稱性:根據餘弦距離的定義,有

    因此餘弦距離滿足對稱性。
  • 三角不等式:該性質並不成立,下面給出一個反例。給定A=(1,0),B=(1,1),C=(0,1),則有

    ,因此有

    或者思考餘弦距離和歐氏距離的關係:

    即有如下關係:

    顯然在單位圓上,餘弦距離和歐氏距離的範圍都是[0,2]。我們已知歐氏距離是一個合法的距離,而餘弦距離與歐氏距離有二次關係,自然不滿足三角不等式。
  • 在機器學習領域,被俗稱為距離,卻不滿足三條距離公理的不僅僅有餘弦距離,還有KL距離(Kullback-Leibler Divergence),也叫作相對熵,它常用於計算兩個分佈之間的差異,但不滿足對稱性和三角不等式。

面試問題8:在對模型進行過充分的離線評估之後,為什麼還要進行線上A/B測試?如何進行線上A/B測試?

  • 離線評估無法完全消除模型過擬合的影響,因此,得出的離線評估結果無法完全替代線上評估結果。
  • 離線評估無法完全還原線上的工程環境。一般來講,離線評估往往不會考慮線上環境的延遲、資料丟失、標籤資料缺失等情況。因此,離線評估的結果是理想工程環境下的結果。
  • 線上系統的某些商業指標在離線評估中無法計算。離線評估一般是針對模型本身進行評估,而與模型相關的其他指標,特別是商業指標,往往無法直接獲得。比如,上線了新的推薦演算法,離線評估往往關注的是ROC曲線、P-R曲線等的改進,而線上評估可以全面瞭解該推薦演算法帶來的使用者點選率、留存時長、PV訪問量等的變化。這些都要由A/B測試來進行全面的評估。
  • 進行A/B測試的主要手段:是進行使用者分桶,即將使用者分成實驗組和對照組,對實驗組的使用者施以新模型,對對照組的使用者施以舊模型。在分桶的過程中,要注意樣本的獨立性和取樣方式的無偏性,確保同一個使用者每次只能分到同一個桶中,在分桶過程中所選取的user_id需要是一個隨機數,這樣才能保證桶中的樣本是無偏的。

面試問題9:如何劃分實驗組和對照組?

  • 將使用者根據user_id個位數劃分為試驗組合對照組,分別施以模型A和B,才能夠驗證模型A的效果:

評估方法:主要有Holdout檢驗,自助法(Bootstrap),交叉驗證(cross validation),常用的主要有K-fold交叉驗證。

面試問題1:在模型評估過程中,有哪些主要的驗證方法,它們的優缺點是什麼?

  • Holdout 檢驗:是最簡單也是最直接的驗證方法,它將原始的樣本集合隨機劃分成訓練集和驗證集兩部分。Holdout 檢驗的缺點很明顯,即在驗證集上計算出來的最後評估指標與原始分組有很大關係。
  • k-fold交叉驗證:首先將全部樣本劃分成k個大小相等的樣本子集;依次遍歷這k個子集,每次把當前子集作為驗證集,其餘所有子集作為訓練集,進行模型的訓練和評估;最後把k次評估指標的平均值作為最終的評估指標。在實際實驗中,k經常取10。
  • 留一驗證:每次留下1個樣本作為驗證集,其餘所有樣本作為測試集。樣本總數為n,依次對n個樣本進行遍歷,進行n次驗證,再將評估指標求平均值得到最終的評估指標。在樣本總數較多的情況下,留一驗證法的時間開銷極大。事實上,留一驗證是留p驗證的特例。留p驗證是每次留下p個樣本作為驗證集,而從n個元素中選擇p個元素有種可能,因此它的時間開銷更是遠遠高於留一驗證,故而很少在實際工程中被應用。
  • 自助法:不管是Holdout檢驗還是交叉檢驗,都是基於劃分訓練集和測試集的方法進行模型評估的。然而,當樣本規模比較小時,將樣本集進行劃分會讓訓練集進一步減小,這可能會影響模型訓練效果。自助法是基於自助取樣法的檢驗方法。對於總數為n的樣本集合,進行n次有放回的隨機抽樣,得到大小為n的訓練集。n次取樣過程中,有的樣本會被重複取樣,有的樣本沒有被抽出過,將這些沒有被抽出的樣本作為驗證集,進行模型驗證,這就是自助法的驗證過程。

面試問題2:在自助法的取樣過程中,對n個樣本進行n次自助抽樣,當n趨於無窮大時,最終有多少資料從未被選擇過?

  • 一個樣本在一次抽樣過程中未被抽中的概率為,n次抽樣均未抽中的概率為,當n趨於無窮大時,概率為:

    因此,當樣本數很大時,大約有36.8%的樣本從未被選擇過,可作為驗證集。

超引數選擇:

面試問題1:超引數有哪些調優方法?

  • 主要有網格搜尋、隨機搜尋、貝葉斯優化等演算法。
  • 超引數搜尋演算法一般包括三個要素:一是目標函式,即演算法需要最大化/最小化的目標;二是搜尋範圍,一般通過上限和下限來確定;三是演算法的其他引數,如搜尋步長。
  • 網格搜尋:可能是最簡單、應用最廣泛的超引數搜尋演算法,它通過查詢搜尋範圍內的所有的點來確定最優值。如果採用較大的搜尋範圍以及較小的步長,網格搜尋有很大概率找到全域性最優值。然而,這種搜尋方案十分消耗計算資源和時間,特別是需要調優的超引數比較多的時候。因此,在實際應用中,網格搜尋法一般會先使用較廣的搜尋範圍和較大的步長,來尋找全域性最優值可能的位置;然後會逐漸縮小搜尋範圍和步長,來尋找更精確的最優值。這種操作方案可以降低所需的時間和計算量,但由於目標函式一般是非凸的,所以很可能會錯過全域性最優值。

  • 隨機搜尋:的思想與網格搜尋比較相似,只是不再測試上界和下界之間的所有值,而是在搜尋範圍中隨機選取樣本點。它的理論依據是,如果樣本點集足夠大,那麼通過隨機取樣也能大概率地找到全域性最優值,或其近似值。隨機搜尋一般會比網格搜尋要快一些,但是和網格搜尋的快速版一樣,它的結果也是沒法保證的。
  • 貝葉斯優化演算法:在尋找最優最值引數時,採用了與網格搜尋、隨機搜尋完全不同的方法。網格搜尋和隨機搜尋在測試一個新點時,會忽略前一個點的資訊;而貝葉斯優化演算法則充分利用了之前的資訊。貝葉斯優化演算法通過對目標函式形狀進行學習,找到使目標函式向全域性最優值提升的引數。具體來說,它學習目標函式形狀的方法是,首先根據先驗分佈,假設一個蒐集函式;然後,每一次使用新的取樣點來測試目標函式時,利用這個資訊來更新目標函式的先驗分佈;最後,演算法測試由後驗分佈給出的全域性最值最可能出現的位置的點。對於貝葉斯優化演算法,有一個需要注意的地方,一旦找到了一個區域性最優值,它會在該區域不斷取樣,所以很容易陷入區域性最優值。為了彌補這個缺陷,貝葉斯優化演算法會在探索和利用之間找到一個平衡點,“探索”就是在還未取樣的區域獲取取樣點;而“利用”則是根據後驗分佈在最可能出現全域性最值的區域進行取樣。

模型優化:

一、過擬合、欠擬合

面試問題1:在模型評估過程中,過擬合和欠擬合具體是指什麼現象?

  • 過擬合:是指模型對於訓練資料擬合呈過當的情況,反映到評估指標上,就是模型在訓練集上的表現很好,但在測試集和新資料上的表現較差。
  • 欠擬合:指的是模型在訓練和預測時表現都不好的情況。

面試問題2:能否說出幾種降低過擬合和欠擬合風險的方法?

  • 降低“過擬合”風險的方法:1)從資料入手,獲得更多的訓練資料。使用更多的訓練資料是解決過擬合問題最有效的手段,因為更多的樣本能夠讓模型學習到更多更有效的特徵,減小噪聲的影響。當然,直接增加實驗資料一般是很困難的,但是可以通過一定的規則來擴充訓練資料。比如,在影象分類的問題上,可以通過影象的平移、旋轉、縮放等方式擴充資料;更進一步地,可以使用生成式對抗網路來合成大量的新訓練資料;2)降低模型複雜度。在資料較少時,模型過於複雜是產生過擬合的主要因素,適當降低模型複雜度可以避免模型擬合過多的取樣噪聲。例如,在神經網路模型中減少網路層數、神經元個數等;在決策樹模型中降低樹的深度、進行剪枝等;3)正則化方法。給模型的引數加上一定的正則約束,比如將權值的大小加入到損失函式中。以L2正則化為例:

    這樣,在優化原來的目標函式C0的同時,也能避免權值過大帶來的過擬合風險。(4)整合學習方法。整合學習是把多個模型整合在一起,來降低單一模型的過擬合風險,如Bagging方法(參考文章:bagging和boosting相關介紹)。
  • 降低“欠擬合”風險的方法:(1)新增新特徵。當特徵不足或者現有特徵與樣本標籤的相關性不強時,模型容易出現欠擬合。通過挖掘“上下文特徵”“ID類特徵”“組合特徵”等新的特徵,往往能夠取得更好的效果。在深度學習潮流中,有很多模型可以幫助完成特徵工程,如因子分解機、梯度提升決策樹、Deep-crossing等都可以成為豐富特徵的方法;(2)增加模型複雜度。簡單模型的學習能力較差,通過增加模型的複雜度可以使模型擁有更強的擬合能力。例如,線上性模型中新增高次項,在神經網路模型中增加網路層數或神經元個數等;(3)減小正則化係數。正則化是用來防止過擬合的,但當模型出現欠擬合現象時,則需要有針對性地減小正則化係數。

二、線性模型的權重分析

  • 過線性或者線性kernel的model,可以直接調取權重值檢視。
  • 對權重絕對值高/低的特徵:a)做更細化的工作;b)特徵組合(參考文章:特徵組合相關介紹

三、Bad-case分析

  • 分類問題:訓練樣本是否分錯了、哪部分特徵使得做這個判斷、bad-case有沒有共性、是否還有沒挖掘的特性
  • 迴歸問題:哪些樣本預測結果差距大。。。

四、模型融合/整合(model ensemble)

Ensemble Learnig 是一組individual learner的組合:

  • 如果individual learner同質,稱為base learner;
  • 如果individual learner異質,稱為component learner。

面試問題1:整合學習分哪幾種?他們有何異同?

  • Boosting主要思想:迭代式學習,訓練基分類器時採用序列的方式,各個基分類器之間有依賴。它的基本思路是將基分類器層層疊加,每一層在訓練的時候,對前一層基分類器分錯的樣本,給予更高的權重。測試時,根據各層分類器的結果的加權得到最終結果。Boosting的過程很類似於人類學習的過程,我們學習新知識的過程往往是迭代式的,第一遍學習的時候,我們會記住一部分知識,但往往也會犯一些錯誤,對於這些錯誤,我們的印象會很深。第二遍學習的時候,就會針對犯過錯誤的知識加強學習,以減少類似的錯誤發生。不斷迴圈往復,直到犯錯誤的次數減少到很低的程度。
  • Bagging主要思想:集體投票決策,與Boosting的序列訓練方式不同,Bagging方法在訓練過程中,各基分類器之間無強依賴,可以進行並行訓練。其中很著名的演算法之一是基於決策樹基分類器的隨機森林(Random Forest)。為了讓基分類器之間互相獨立,將訓練集分為若干子集(當訓練樣本數量較少時,子集之間可能有交疊)。Bagging方法更像是一個集體決策的過程,每個個體都進行單獨學習,學習的內容可以相同,也可以不同,也可以部分重疊。但由於個體之間存在差異性,最終做出的判斷不會完全一致。在最終做決策時,每個個體單獨作出判斷,再通過投票的方式做出最後的集體決策。
  • 從消除基分類器的偏差和方差的角度來理解Boosting和Bagging方法的差異。基分類器,有時又被稱為弱分類器,因為基分類器的錯誤率要大於整合分類器。基分類器的錯誤,是偏差和方差兩種錯誤之和。偏差主要是由於分類器的表達能力有限導致的系統性錯誤,表現在訓練誤差不收斂。方差是由於分類器對於樣本分佈過於敏感,導致在訓練樣本數較少時,產生過擬合。
  • Boosting方法是通過逐步聚焦於基分類器分錯的樣本,減小整合分類器的偏差。Bagging方法則是採取分而治之的策略,通過對訓練樣本多次取樣,並分別訓練出多個不同模型,然後做綜合,來減小整合分類器的方差

下圖是Bagging演算法的示意圖,Model 1、Model 2、Model 3都是用訓練集的一個子集訓練出來的,單獨來看,它們的決策邊界都很曲折,有過擬合的傾向。整合之後的模型(紅線所示)的決策邊界就比各個獨立的模型平滑了,這是由於整合的加權投票方法,減小了方差。

面試問題2:整合學習有哪些基本步驟?請舉幾個整合學習的例子

  • 成學習一般可分為以下3個步驟。(1)找到誤差互相獨立的基分類器;(2)訓練基分類器;(3)合併基分類器的結果。
  • 並基分類器的方法有voting和stacking兩種。前者是用投票的方式,將獲得最多選票的結果作為最終的結果。後者是用序列的方式,把前一個基分類器的結果輸出到下一個分類器,將所有基分類器的輸出結果相加(或者用更復雜的演算法融合,比如把各基分類器的輸出作為特徵,使用邏輯迴歸作為融合模型進行最後的結果預測)作為最終的輸出。
  • 以Adaboost為例,其基分類器的訓練和合並的基本步驟如下。(1)確定基分類器:這裡可以選取ID3決策樹作為基分類器。事實上,任何分類模型都可以作為基分類器,但樹形模型由於結構簡單且較易產生隨機性所以比較常用。(2)訓練基分類器:假設訓練集為{xi,yi},i=1,...,N,其中yi{−1,1},並且有T個基分類器,則可以按照如下過程來訓練基分類器。

    將它歸一化為一個概率分佈函式。(3)合併基分類器:給定一個未知樣本z,輸出分類結果為加權投票的結果

    Adaboost的例子中我們可以明顯地看到Boosting的思想,對分類正確的樣本降低了權重,對分類錯誤的樣本升高或者保持權重不變。在最後進行模型融合的過程中,也根據錯誤率對基分類器進行加權融合。錯誤率低的分類器擁有更大的“話語權”。
  • 另一個非常流行的模型是梯度提升決策樹,其核心思想是,每一棵樹學的是之前所有樹結論和的殘差,這個殘差就是一個加預測值後能得真實值的累加量。這裡使用殘差繼續學習,就是GBDT中Gradient Boosted所表達的意思。

面試問題3:常用的基分類器是什麼?

  • 常用的基分類器是決策樹,主要有以下3個方面的原因。(1)決策樹可以較為方便地將樣本的權重整合到訓練過程中,而不需要使用過取樣的方法來調整樣本權重。(2)決策樹的表達能力和泛化能力,可以通過調節樹的層數來做折中。(3)資料樣本的擾動對於決策樹的影響較大,因此不同子樣本集合生成的決策樹基分類器隨機性較大,這樣的“不穩定學習器”更適合作為基分類器。此外,在決策樹節點分裂的時候,隨機地選擇一個特徵子集,從中找出最優分裂屬性,很好地引入了隨機性。除了決策樹外,神經網路模型也適合作為基分類器,主要由於神經網路模型也比較“不穩定”,而且還可以通過調整神經元數量、連線方式、網路層數、初始權值等方式引入隨機性。

面試問題4:可否將隨機森林中的基分類器,由決策樹替換為線性分類器或K-近鄰?請解釋為什麼?

  • 隨機森林屬於Bagging類的整合學習。Bagging的主要好處是整合後的分類器的方差,比基分類器的方差小。Bagging所採用的基分類器,最好是本身對樣本分佈較為敏感的(即所謂不穩定的分類器),這樣Bagging才能有用武之地。線性分類器或者K-近鄰都是較為穩定的分類器,本身方差就不大,所以以它們為基分類器使用Bagging並不能在原有基分類器的基礎上獲得更好的表現,甚至可能因為Bagging的取樣,而導致他們在訓練中更難收斂,從而增大了整合分類器的偏差。

面試問題5:什麼是偏差和方差?

  • 偏差:指的是由所有采樣得到的大小為m的訓練資料集訓練出的所有模型的輸出的平均值和真實模型輸出之間的偏差。偏差通常是由於我們對學習演算法做了錯誤的假設所導致的,比如真實模型是某個二次函式,但我們假設模型是一次函式。由偏差帶來的誤差通常在訓練誤差上就能體現出來。
  • 方差:指的是由所有采樣得到的大小為m的訓練資料集訓練出的所有模型的輸出的方差。方差通常是由於模型的複雜度相對於訓練樣本數m過高導致的,比如一共有100個訓練樣本,而我們假設模型是階數不大於200的多項式函式。由方差帶來的誤差通常體現在測試誤差相對於訓練誤差的增量上,具體參考下圖:

面試問題6:如何從減小方差和偏差的角度解釋Boosting和Bagging的原理?

  • Bagging能夠提高弱分類器效能的原因是降低了方差,Boosting能夠提升弱分類器效能的原因是降低了偏差。
  • Bagging 是 Bootstrap Aggregating 的簡稱,意思就是再抽樣,然後在每個樣本上訓練出來的模型取平均。假設有n個隨機變數,方差記為σ2,兩兩變數之間的相關性為ρ,則n個隨機變的均值\frac{\sum X_{i}}{n}的方差為,隨機變數完全獨立的情況下,n個隨機變數的方差為σ2/n,也就是說方差減小到了原來的1/n;當然,模型之間不可能完全獨立。為了追求模型的獨立性,諸多Bagging的方法做了不同的改進。比如在隨機森林演算法中,每次選取節點分裂屬性時,會隨機抽取一個屬性子集,而不是從所有屬性中選取最優屬性,這就是為了避免弱分類器之間過強的相關性。通過訓練集的重取樣也能夠帶來弱分類器之間的一定獨立性,從而降低Bagging後模型的方差。
  • Boosting是在訓練好一個弱分類器後,我們需要計算弱分類器的錯誤或者殘差,作為下一個分類器的輸入。這個過程本身就是在不斷減小損失函式,來使模型不斷逼近“靶心”,使得模型偏差不斷降低。但Boosting的過程並不會顯著降低方差。這是因為Boosting的訓練過程使得各弱分類器之間是強相關的,缺乏獨立性,所以並不會對降低方差有作用。
  • 關於泛化誤差、偏差、方差和模型複雜度的關係如下圖所示。不難看出,方差和偏差是相輔相成,矛盾又統一的,二者並不能完全獨立的存在。對於給定的學習任務和訓練資料集,我們需要對模型的複雜度做合理的假設。如果模型複雜度過低,雖然方差很小,但是偏差會很高;如果模型複雜度過高,雖然偏差降低了,但是方差會很高。所以需要綜合考慮偏差和方差選擇合適複雜度的模型進行訓練。

面試問題7:GBDT的基本原理是什麼?

  • Gradient Boosting是Boosting中的一大類演算法,其基本思想是根據當前模型損失函式的負梯度資訊來訓練新加入的弱分類器,然後將訓練好的弱分類器以累加的形式結合到現有模型中。演算法1描述了Gradient Boosting演算法的基本流程,在每一輪迭代中,首先計算出當前模型在所有樣本上的負梯度,然後以該值為目標訓練一個新的弱分類器進行擬合併計算出該弱分類器的權重,最終實現對模型的更新。Gradient Boosting演算法的虛擬碼如下圖所示:

  • 採用決策樹作為弱分類器的Gradient Boosting演算法被稱為GBDT,有時又被稱為MART(Multiple Additive Regression Tree)。GBDT中使用的決策樹通常為CART。由於GBDT是利用殘差訓練的,在預測的過程中,我們也需要把所有樹的預測值加起來,得到最終的預測結果。

面試問題8:度提升和梯度下降的區別和聯絡是什麼?

下表是梯度提升演算法和梯度下降演算法的對比情況。可以發現,兩者都是在每一輪迭代中,利用損失函式相對於模型的負梯度方向的資訊來對當前模型進行更新,只不過在梯度下降中,模型是以引數化形式表示,從而模型的更新等價於引數的更新。而在梯度提升中,模型並不需要進行引數化表示,而是直接定義在函式空間中,從而大大擴充套件了可以使用的模型種類。

面試問題9:GBDT的優點和侷限性有哪些?

  • 優點:(1)預測階段的計算速度快,樹與樹之間可並行化計算。(2)在分佈稠密的資料集上,泛化能力和表達能力都很好,這使得GBDT在Kaggle的眾多競賽中,經常名列榜首。(3)採用決策樹作為弱分類器使得GBDT模型具有較好的解釋性和魯棒性,能夠自動發現特徵間的高階關係,並且也不需要對資料進行特殊的預處理如歸一化等。
  • 侷限性:(1)GBDT在高維稀疏的資料集上,表現不如支援向量機或者神經網路。(2)GBDT在處理文字分類特徵問題上,相對其他模型的優勢不如它在處理數值特徵時明顯。(3)訓練過程需要序列訓練,只能在決策樹內部採用一些區域性並行的手段提高訓練速度。

面試問題10:XGBoost與GBDT的聯絡和區別有哪些?

  • XGBoost是陳天奇大佬開發的一個開源機器學習專案,高效地實現了GBDT演算法並進行了演算法和工程上的許多改進;
  • 原始的GBDT演算法基於經驗損失函式的負梯度來構造新的決策樹,只是在決策樹構建完成後再進行剪枝。而XGBoost在決策樹構建階段就加入了正則項,即:

    其中Ft−1(xi)表示現有的t−1棵樹最優解。關於樹結構的正則項定義為:

    其中T為葉子節點個數,wj表示第j個葉子節點的預測值。對該損失函式在Ft−1處進行二階泰勒展開可以推匯出:

    其中T為決策樹ft中葉子節點的個數,,Ij表示所有屬於葉子節點j的樣本的索引的結合。設決策樹的結構已知,通過令損失函式相對於wj的導數為0,可以求出在最小化損失函式的情況下各個葉子節點上的預測值:

  • 然而從所有的樹結構中尋找最優的樹結構是一個NP-hard問題,因此在實際中往往採用貪心法來構建出一個次優的樹結構,基本思想是從根節點開始,每次對一個葉子節點進行分裂,針對每一種可能的分裂,根據特定的準則選取最優的分裂。不同的決策樹演算法採用不同的準則,如IC3演算法採用資訊增益,C4.5演算法為了克服資訊增益中容易偏向取值較多的特徵而採用資訊增益比,CART演算法使用基尼指數和平方誤差,XGBoost也有特定的準則來選取最優分裂。通過將預測值代入到損失函式中可求得損失函式的最小值:

    容易計算出分裂前後損失函式的差值為:

    XGBoost採用最大化這個差值作為準則來進行決策樹的構建,通過遍歷所有特徵的所有取值,尋找使得損失函式前後相差最大時對應的分裂方式。此外,由於損失函式前後存在差值一定為正的限制,此時γ起到了一定的預剪枝效果。
  • GBDT與XGBoost在工程實現上做了大量的優化,兩者之間的區別和聯絡為:1)GBDT是機器學習演算法,XGBoost是該演算法的工程實現;2)在使用CART作為基分類器時,XGBoost顯式地加入了正則項來控制模型的複雜度,有利於防止過擬合,從而提高模型的泛化能力;(3)GBDT在模型訓練時只使用了代價函式的一階導數資訊,XGBoost對代價函式進行二階泰勒展開,可以同時使用一階和二階導數;(4)傳統的GBDT採用CART作為基分類器,XGBoost支援多種型別的基分類器,比如線性分類器;(5)傳統的GBDT在每輪迭代時使用全部的資料,XGBoost則採用了與隨機森林相似的策略,支援對資料進行取樣;(6)傳統的GBDT沒有設計對缺失值進行處理,XGBoost能夠自動學習出缺失值的處理策略。(參考文章:ml課程:決策樹、隨機森林、GBDT、XGBoost相關(含程式碼實現)

案例程式碼:歡迎關注我的github


To be continue......