機器學習篇:XGB為啥這麼萬能
為什麼大部分數據挖掘比賽是集成樹模型XGBoost取勝?
開始之前首先要讓大家知道咋安裝XGBoost吧。
嘻嘻嘻====
xgboost系列:windows和linux下xgboost安裝指南 - CSDN博客最簡單最實用的方式
(1)首先下載xgboost編譯好的whl包
下載路徑為:http://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost請你根據自己python的版本以及你操作系統的版本來下載對應的whl包
(2)安裝xgboost下載好後進入whl包的目錄下執行安裝即可。pip install ***
上述方式親測有效,其他的方式我有的沒有嘗試成功~~~
推薦大家使用Pycharm好用不費事,好管理O(∩_∩)O~~
進入正題:
為什麼大部分數據挖掘比賽是集成樹模型XGBoost取勝?
首先先把一個大佬的回答截取過來!!!
作者:馬超
鏈接:https://www.zhihu.com/question/51818176/answer/127637712來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
這是一個非常好,也非常值得思考的問題。換一個方式來問這個問題:為什麼基於 tree-ensemble 的機器學習方法,在實際的 kaggle 比賽中效果非常好?
通常,解釋一個機器學習模型的表現是一件很複雜事情,而這篇文章儘可能用最直觀的方式來解釋這一問題。
我主要從三個方面來回答樓主這個問題。
1. 理論模型 (站在 vc-dimension 的角度)
2. 實際數據3. 系統的實現 (主要基於 xgboost)通常決定一個機器學習模型能不能取得好的效果,以上三個方面的因素缺一不可。
(1)站在理論模型的角度
統計機器學習里經典的 vc-dimension 理論告訴我們:一個機器學習模型想要取得好的效果,這個模型需要滿足以下兩個條件:
1. 模型在我們的訓練數據上的表現要不錯,也就是 trainning error 要足夠小。
2. 模型的 vc-dimension 要低。換句話說,就是模型的自由度不能太大,以防overfit.當然,這是我用大白話描述出來的,真正的 vc-dimension 理論需要經過複雜的數學推導,推出 vc-bound.
vc-dimension 理論其實是從另一個角度刻畫了一個我們所熟知的概念,那就是 bias variance trade-off.
好,現在開始讓我們想像一個機器學習任務。對於這個任務,一定會有一個 「上帝函數」 可以完美的擬合所有數據(包括訓練數據,以及未知的測試數據)。很可惜,這個函數我們肯定是不知道的 (不然就不需要機器學習了)。我們只可能選擇一個 「假想函數」 來 逼近 這個 「上帝函數」,我們通常把這個 「假想函數」 叫做 hypothesis.
在這些 hypothesis 里,我們可以選擇 svm, 也可以選擇 logistic regression. 可以選擇單棵決策樹,也可以選擇 tree-ensemble (gbdt, random forest). 現在的問題就是,為什麼 tree-ensemble 在實際中的效果很好呢?
區別就在於 「模型的可控性」。
先說結論,tree-ensemble 這樣的模型的可控性是好的,而像 LR 這樣的模型的可控性是不夠好的(或者說,可控性是沒有 tree-ensemble 好的)。為什麼會這樣?別急,聽我慢慢道來。
我們之前說,當我們選擇一個 hypothsis 後,就需要在訓練數據上進行訓練,從而逼近我們的 「上帝函數」。我們都知道,對於 LR 這樣的模型。如果 underfit,我們可以通過加 feature,或者通過高次的特徵轉換來使得我們的模型在訓練數據上取得足夠高的正確率。而對於 tree-enseble 來說,我們解決這一問題的方法是通過訓練更多的 「弱弱」 的 tree. 所以,這兩類模型都可以把 training error 做的足夠低,也就是說模型的表達能力都是足夠的。但是這樣就完事了嗎?沒有,我們還需要讓我們的模型的 vc-dimension 低一些。而這裡,重點來了。在 tree-ensemble 模型中,通過加 tree 的方式,對於模型的 vc-dimension 的改變是比較小的。而在 LR 中,初始的維數設定,或者說特徵的高次轉換對於 vc-dimension 的影響都是更大的。換句話說,tree-ensemble 總是用一些 「弱弱」 的樹聯合起來去逼近 「上帝函數」,一次一小步,總能擬合的比較好。而對於 LR 這樣的模型,我們很難去猜到這個「上帝函數」到底長什麼樣子(到底是2次函數還是3次函數?上帝函數如果是介於2次和3次之間怎麼辦呢?)。所以,一不小心我們設定的多項式維數高了,模型就 「剎不住車了」。俗話說的好,步子大了,總會扯著蛋。這也就是我們之前說的,tree-ensemble 模型的可控性更好,也即更不容易 overfit.
(2)站在數據的角度
除了理論模型之外, 實際的數據也對我們的演算法最終能取得好的效果息息相關。kaggle 比賽選擇的都是真實世界中的問題。所以數據多多少少都是有噪音的。而基於樹的演算法通常抗噪能力更強。比如在樹模型中,我們很容易對缺失值進行處理。除此之外,基於樹的模型對於 categorical feature 也更加友好。
除了數據噪音之外,feature 的多樣性也是 tree-ensemble 模型能夠取得更好效果的原因之一。通常在一個kaggle任務中,我們可能有年齡特徵,收入特徵,性別特徵等等從不同 channel 獲得的特徵。而特徵的多樣性也正是為什麼工業界很少去使用 svm 的一個重要原因之一,因為 svm 本質上是屬於一個幾何模型,這個模型需要去定義 instance 之間的 kernel 或者 similarity (對於linear svm 來說,這個similarity 就是內積)。這其實和我們在之前說過的問題是相似的,我們無法預先設定一個很好的similarity。這樣的數學模型使得 svm 更適合去處理 「同性質」的特徵,例如圖像特徵提取中的 lbp 。而從不同 channel 中來的 feature 則更適合 tree-based model, 這些模型對數據的 distributation 通常並不敏感。
(3)站在系統實現的角度
除了有合適的模型和數據,一個良好的機器學習系統實現往往也是演算法最終能否取得好的效果的關鍵。一個好的機器學習系統實現應該具備以下特徵:
1. 正確高效的實現某種模型。我真的見過有些機器學習的庫實現某種演算法是錯誤的。而高效的實現意味著可以快速驗證不同的模型和參數。
2. 系統具有靈活、深度的定製功能。3. 系統簡單易用。4. 系統具有可擴展性, 可以從容處理更大的數據。到目前為止,xgboost 是我發現的唯一一個能夠很好的滿足上述所有要求的 machine learning package. 在此感謝青年才俊 陳天奇。
在效率方面,xgboost 高效的 c++ 實現能夠通常能夠比其它機器學習庫更快的完成訓練任務。
在靈活性方面,xgboost 可以深度定製每一個子分類器,並且可以靈活的選擇 loss function(logistic,linear,softmax 等等)。除此之外,xgboost還提供了一系列在機器學習比賽中十分有用的功能,例如 early-stop, cv 等等
在易用性方面,xgboost 提供了各種語言的封裝,使得不同語言的用戶都可以使用這個優秀的系統。最後,在可擴展性方面,xgboost 提供了分散式訓練(底層採用 rabit 介面),並且其分散式版本可以跑在各種平台之上,例如 mpi, yarn, spark 等等。有了這麼多優秀的特性,自然這個系統會吸引更多的人去使用它來參加 kaggle 比賽。
綜上所述,理論模型,實際的數據,良好的系統實現,都是使得 tree-ensemble 在實際的 kaggle 比賽中「屢戰屢勝」的原因。
通過上述的回答相信大家已經理解的差不多了,但是還沒完,還有後續!!
總結幾點如下:
大部分數據挖掘比賽的特點是:結構化的表單數據,混合類型,大量缺失值,含有離群點,長尾分布而樹演算法的特點是:善於處理混合類型的特徵,刪除處理缺失值,具有伸縮不變性,對離群點魯棒,容易並行
GBDT的泛化能力更多取決於數據集,在數據集足夠豐富的情況下,泛化能力能夠表現得更好,更不容易過擬合。
SVM/LR之類的模型,模型選擇的影響大於數據集本身的影響。對於維度數據、核空間的選擇,直接決定了模型的訓練效果,一味增加數據集,反而會造成過擬合.
- 自適應非線性:隨著決策樹的生長,能夠產生高度非線性的模型,而SVM等線性模型的非線形化需要基於核函數等方法,要求在學習之前就要定好核函數,然而確定合適的核函數並非易事。
- 多分類器隱含正則:高度非線性的模型容易過擬合,因此幾乎沒有人會用單顆決策樹。boosting和random forest等集成學習的方法都要訓練多個有差異的學習器,近來有工作表明,這些有差異的學習器的組合,能夠起到正則化的作用,從而使得總體複雜度降低,提高泛化能力。尤其對於random forest這樣的「並行」集成方法,即使每一顆樹都過擬合,直觀的來講,由於過擬合到不同的地方,總體投票或平均後並不會過擬合。
推薦閱讀:
※Learning Explanatory Rules from Noisy Data 閱讀筆記0
※機器學習入門之邏輯回歸分類
※機器學習演算法簡介
※【機器學習Machine Learning】資料大全
※SRCNN 論文閱讀
TAG:機器學習 |