GBDT,XGBoost,RF的區別是什麼?

2021-08-19 02:08:52 字數 1125 閱讀 8186

rf、gbdt和xgboost都屬於整合學習(ensemble learning),整合學習的目的是通過結合多個基學習器的**結果來改善單個學習器的泛化能力和魯棒性。

根據個體學習器的生成方式,目前的整合學習方法大致分為兩大類:即個體學習器之間存在強依賴關係、必須序列生成的序列化方法,以及個體學習器間不存在強依賴關係、可同時生成的並行化方法;前者的代表就是boosting,後者的代表是bagging和「隨機森林」(random forest)。

rf:提到隨機森林,就不得不提bagging,bagging可以簡單的理解為:放回抽樣,多數表決(分類)或簡單平均(回歸),同時bagging的基學習器之間屬於並列生成,不存在強依賴關係。

random forest(隨機森林)是bagging的擴充套件變體,它在以決策樹 為基學習器構建bagging整合的基礎上,進一步在決策樹的訓練過程中引入了隨機特徵選擇,因此可以概括rf包括四個部分:1、隨機選擇樣本(放回抽樣);2、隨機選擇特徵;3、構建決策樹;4、隨機森林投票(平均)。

gbdt:

gbdt與傳統的boosting區別較大,它的每一次計算都是為了減少上一次的殘差,而為了消除殘差,我們可以在殘差減小的梯度方向上建立模型,所以說,在gradientboost中,每個新的模型的建立是為了使得之前的模型的殘差往梯度下降的方法,與傳統的boosting中關注正確錯誤的樣本加權有著很大的區別。

在gradientboosting演算法中,關鍵就是利用損失函式的負梯度方向在當前模型的值作為殘差的近似值,進而擬合一棵cart回歸樹。

gbdt的會累加所有樹的結果,而這種累加是無法通過分類完成的,因此gbdt的樹都是cart回歸樹,而不是分類樹(儘管gbdt調整後也可以用於分類但不代表gbdt的樹為分類樹)。

xgboost:

xgboost的效能在gbdt上又有一步提公升,而其效能也能通過各種比賽管窺一二。坊間對xgboost最大的認知在於其能夠自動地運用cpu的多執行緒進行平行計算,同時在演算法精度上也進行了精度的提高。

由於gbdt在合理的引數設定下,往往要生成一定數量的樹才能達到令人滿意的準確率,在資料集較複雜時,模型可能需要幾千次迭代運算。但是xgboost利用並行的cpu更好的解決了這個問題。

其實xgboost和gbdt的差別也較大,這一點也同樣體現在其效能表現上,詳見xgboost與gbdt的區別。

記憶體的使用 棧區 堆區 靜態區 唯讀區

記憶體的使用感覺好亂啊,需要整理一下!於是參考c primer與網上資源,整理如下 一 綜述 記憶體中的棧區分配的是區域性變數和函式的引數值的空間,棧的生長方向是從高往低的 堆區是向上增長的用於分配程式設計師申請的記憶體空間 比如new 申請的動態記憶體 注意它與資料結構中的堆是兩回事,分配方式倒是...

C 中的棧區,堆區,常量區

include void main 對應的彙編 10 a c 1 00401067 8a 4d f1 mov cl,byte ptr ebp 0fh 0040106a 88 4d fc mov byte ptr ebp 4 cl 11 a p 1 0040106d 8b 55 ec mov edx,...

堆區 棧區 靜態區 常量區還有???

常見的儲存區域可分為 由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏...