機器學習面試中最常考的樹模型(附答案)

樹模型能夠說在機器學習的面試中,是面試官最喜歡問的一類問題,今天小編就帶你一塊兒回顧一下去年校招中我所經歷的樹模型相關的問題,此次帶答案呦~~(答案是小編的理解,若是有遺漏的地方,歡迎你們在留言區指正,同時,若是有更多關於樹模型的題目,也歡迎在留言區補充)html

問題目錄git


一、決策樹的實現、ID三、C4.五、CART(貝殼)
二、CART迴歸樹是怎麼實現的?(貝殼)
三、CART分類樹和ID3以及C4.5有什麼區別(貝殼)
四、剪枝有哪幾種方式(貝殼)
五、樹集成模型有哪幾種實現方式?(貝殼)boosting和bagging的區別是什麼?(知乎、阿里)
六、隨機森林的隨機體如今哪些方面(貝殼、阿里)
七、AdaBoost是如何改變樣本權重,GBDT分類樹的基模型是?(貝殼)
八、gbdt,xgboost,lgbm的區別(百度、滴滴、阿里,頭條)
九、bagging爲何能減少方差?(知乎)

github

其餘問題web


十、關於AUC的另外一種解釋:是挑選一個正樣本和一個負樣本,正樣本排在負樣本前面的機率?如何理解?
十一、校招是集中時間刷題好,仍是天天刷一點好呢?
十二、如今推薦在工業界基本都用match+ranking的架構,可是學術界論文中的大多算法算是沒有區分嗎?end-to-end的方式,仍是算是召回?
1三、內推刷簡歷嚴重麼?沒有實習經歷,也沒有牛逼的競賽和論文,提早批有面試機會麼?提早批影響正式批麼?
1四、除了本身項目中的模型瞭解清楚,還須要準備哪些?看了羣主的面經大概知道了一些,可否大體描述下?

面試

一、決策樹的實現、ID三、C4.五、CART(貝殼)算法

這道題主要是要求把公式寫一下,因此決策樹的公式你們要理解,而且能熟練地寫出來。這裏我們簡單回顧一下吧。主要參考統計學習方法就行了。
微信

ID3使用信息增益來指導樹的分裂:多線程


C4.5經過信息增益比來指導樹的分裂:架構


CART的話既能夠是分類樹,也能夠是迴歸樹。當是分類樹時,使用基尼係數來指導樹的分裂:app


當是迴歸樹時,則使用的是平方損失最小:


二、CART迴歸樹是怎麼實現的?(貝殼)

CART迴歸樹的實現包含兩個步驟:
1)決策樹生成:基於訓練數據生成決策樹、生成的決策樹要儘可能大
2)決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時用損失函數最小做爲剪枝的標準。

這部分的知識,能夠看一下《統計學習方法》一書。

三、CART分類樹和ID3以及C4.5有什麼區別(貝殼)

1)首先是決策規則的區別,CART分類樹使用基尼係數、ID3使用的是信息增益,而C4.5使用的是信息增益比。
2)ID3和C4.5能夠是多叉樹,可是CART分類樹只能是二叉樹(這是我當時主要回答的點)

四、剪枝有哪幾種方式(貝殼)

前剪枝和後剪枝,參考周志華《機器學習》。

五、樹集成模型有哪幾種實現方式?(貝殼)boosting和bagging的區別是什麼?(知乎、阿里)

樹集成模型主要有兩種實現方式,分別是Bagging和Boosting。兩者的區別主要有如下四點:
1)樣本選擇上:
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的.
Boosting:每一輪的訓練集不變,只是訓練集中每一個樣例在分類器中的權重發生變化.而權值是根據上一輪的分類結果進行調整.
2)樣例權重:
Bagging:使用均勻取樣,每一個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大.
3)預測函數:
Bagging:全部預測函數的權重相等.
Boosting:每一個弱分類器都有相應的權重,對於分類偏差小的分類器會有更大的權重.
4)並行計算:
Bagging:各個預測函數能夠並行生成
Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果.

六、隨機森林的隨機體如今哪些方面(貝殼、阿里)

隨機森林的隨機主要體如今兩個方面:一個是創建每棵樹時所選擇的特徵是隨機選擇的;二是生成每棵樹的樣本也是經過有放回抽樣產生的。

七、AdaBoost是如何改變樣本權重,GBDT分類樹的基模型是?(貝殼)

AdaBoost改變樣本權重:增長分類錯誤的樣本的權重,減少分類正確的樣本的權重。

最後一個問題是我在面試以前沒有了解到的,GBDT不管作分類仍是迴歸問題,使用的都是CART迴歸樹。

八、gbdt,xgboost,lgbm的區別(百度、滴滴、阿里,頭條)

首先來看GBDT和Xgboost,兩者的區別以下:

1)傳統 GBDT 以 CART 做爲基分類器,xgboost 還支持線性分類器,這個時候 xgboost 至關於帶 L1 和 L2 正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。
2)傳統 GBDT 在優化時只用到一階導數信息,xgboost 則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便 一下,xgboost 工具支持自定義代價函數,只要函數可一階和二階求導。
3)xgboost 在代價函數里加入了正則項,用於控制模型的複雜度。正則項裏包含了樹的葉子節點個數、每一個葉子節點上輸出的 score 的 L2 模的平方和。從 Bias-variance tradeoff 角度來說,正則項下降了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是 xgboost 優於傳統GBDT 的一個特性。
4)Shrinkage(縮減),至關於學習速率(xgboost 中的eta)。xgboost 在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是爲了削 弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,通常把 eta 設置得小一點,而後迭代次數設置得大一點。(補充:傳統 GBDT 的實現 也有學習速率)
5)列抽樣(column subsampling)。xgboost 借鑑了隨機森林的作法,支 持列抽樣,不只能下降過擬合,還能減小計算,這也是 xgboost 異於傳 統 gbdt 的一個特性。
6)對缺失值的處理。對於特徵的值有缺失的樣本,xgboost 能夠自動學習 出它的分裂方向。
7)xgboost 工具支持並行。boosting 不是一種串行的結構嗎?怎麼並行的? 注意 xgboost 的並行不是 tree 粒度的並行,xgboost 也是一次迭代完才能進行下一次迭代的(第 t 次迭代的代價函數裏包含了前面 t-1 次迭代 的預測值)。xgboost 的並行是在特徵粒度上的。咱們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(由於要肯定最佳分割點),xgboost在訓練以前,預先對數據進行了排序,而後保存爲 block 結構,後面的迭代中重複地使用這個結構,大大減少計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂時,須要計算每 個特徵的增益,最終選增益最大的那個特徵去作分裂,那麼各個特徵的增益計算就能夠開多線程進行。
8)可並行的近似直方圖算法。樹節點在進行分裂時,咱們須要計算每一個特徵的每一個分割點對應的增益,即用貪心法枚舉全部可能的分割點。當數據沒法一次載入內存或者在分佈式狀況下,貪心算法效率就會變得很低,因此 xgboost 還 出了一種可並行的近似直方圖算法,用於高效地生成候選的分割點。

再來看Xgboost和LightGBM,兩者的區別以下:

1)因爲在決策樹在每一次選擇節點特徵的過程當中,要遍歷全部的屬性的全部取 值並選擇一個較好的。XGBoost 使用的是近似算法算法,先對特徵值進行排序 Pre-sort,而後根據二階梯度進行分桶,可以更精確的找到數據分隔點;可是 複雜度較高。LightGBM 使用的是 histogram 算法,這種只須要將數據分割成不一樣的段便可,不須要進行預先的排序。佔用的內存更低,數據分隔的複雜度更低。
2)決策樹生長策略,咱們剛纔介紹過了,XGBoost採用的是 Level-wise 的樹 生長策略,LightGBM 採用的是 leaf-wise 的生長策略。
3)並行策略對比,XGBoost 的並行主要集中在特徵並行上,而 LightGBM 的並 行策略分特徵並行,數據並行以及投票並行。

九、bagging爲何能減少方差?(知乎)

這個當時也沒有答上來,能夠參考一下博客:https://blog.csdn.net/shenxiaoming77/article/details/53894973

樹模型相關的題目以上就差很少了。接下來整理一些最近羣友提出的問題,我以爲有一些可能做爲面試題,有一些是準備校招過程當中的經驗:

十、關於AUC的另外一種解釋:是挑選一個正樣本和一個負樣本,正樣本排在負樣本前面的機率?如何理解?

咱們都知道AUC是ROC曲線下方的面積,ROC曲線的橫軸是真正例率,縱軸是假正例率。咱們能夠按照以下的方式理解一下:首先偷換一下概念,意思仍是同樣的,任意給定一個負樣本,全部正樣本的score中有多大比例是大於該負類樣本的score?那麼對每一個負樣原本說,有多少的正樣本的score比它的score大呢?是否是就是當結果按照score排序,閾值剛好爲該負樣本score時的真正例率TPR?理解到這一層,兩者等價的關係也就豁然開朗了。ROC曲線下的面積或者說AUC的值 與 測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的機率大於負類樣本的score是等價的。

十一、校招是集中時間刷題好,仍是天天刷一點好呢?

個人建議是平時天天刷3~5道,而後臨近校招的時候集中刷。另外就是根據每次面試中被問到的問題,若是有沒答上來的,就針對這一類的題型多刷刷。

十二、如今推薦在工業界基本都用match+ranking的架構,可是學術界論文中的大多算法算是沒有區分嗎?end-to-end的方式,仍是算是召回?

學術界論文每每不針對整個推薦系統,而只針對match或者ranking階段的某一種方法進行研究。好比DeepFM、Wide & Deep,只針對ranking階段。而阿里有幾篇介紹embedding的論文,只介紹match階段的方法。end-to-end的方式,在match和ranking階段都有吧。

1三、內推刷簡歷嚴重麼?沒有實習經歷,也沒有牛逼的競賽和論文,提早批有面試機會麼?提早批影響正式批麼?

內推通常不刷簡歷,應該起碼會給一個筆試機會。沒有實習經歷,也沒有牛逼的競賽和論文,提早批的面試機會就得看運氣了,通常競爭激烈的大廠估計是沒有機會的。網上通常都說提早批不影響正式批,但確定是有影響的,由於你的面試記錄都會記錄在公司的面試系統中的,面試官均可以看到你以前的面試記錄。

1四、除了本身項目中的模型瞭解清楚,還須要準備哪些?看了羣主的面經大概知道了一些,可否大體描述下[皺眉]?

算法題、機器學習&深度學習方法、固然有的公司還會考一些對於業務的理解。

若是小夥伴們對於校招還有疑問,能夠在下方留言,也能夠在後臺回覆「進羣」,添加小編微信。

參考文獻

一、李航《統計學習方法》
二、『機器學習筆記 』GBDT 原理-Gradient Boosting Decision Tree:
https://blog.csdn.net/shine19930820/article/details/65633436
三、簡單易學的機器學習算法——梯度 升決策樹 GBDT:
https://blog.csdn.net/google19890102/article/details/51746402/
四、xgboost 中的數學原理:
https://blog.csdn.net/a358463121/article/details/68617389
五、通俗、有邏輯的寫一篇說下 Xgboost 的原理,供討論參考:
https://blog.csdn.net/github_38414650/article/details/76061893
六、機器學習算法中 GBDT 和 XGBOOST 的區別有哪些?
https://www.zhihu.com/question/41354392
七、LightGBM 視頻:https://v.qq.com/x/page/k0362z6lqix.html?
八、快的不要不要的 lightGBM:https://zhuanlan.zhihu.com/p/31986189
九、XGBoost all in one:http://www.pengfoo.com/post/machine-
learning/2017-03-03
十、 機器學習實踐-XGboost 與 LightGBM 對比:
https://jiayi797.github.io/2018/03/06/機器學習實踐-XGboost 與
LightGBM 對比
十一、 XGBoost 論文:http://www.kdd.org/kdd2016/papers/files/rfp0697-
chenAemb.pdf
十二、 LightGBM 論文:https://papers.nips.cc/paper/6907-lightgbm-a-
highly-efficient-gradient-boosting-decision-tree
1三、https://blog.csdn.net/shenxiaoming77/article/details/53894973
1四、https://www.jianshu.com/p/4dde15a56d44

推薦閱讀:

如何拿下10個算法工程師offer,不可錯過!

Python繪製玫瑰和佩奇

Python數據分析學習路線我的總結




Python與算法社區

 點個好看

本文分享自微信公衆號 - Python與算法社區(alg-channel)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索