關於XGBoost一些淺薄理解

2021-09-19 20:53:36 字數 1811 閱讀 7453

決策樹:(分類)

靈魂——依靠某種指標進行樹的**達到分類或回歸的目的,總希望是純度越高越好

eg:id3演算法就用資訊增益度量屬性選擇標準,選擇**後資訊增益最大的屬性進行**

cart,classification and regression tree——分類與回歸分析

相同點:本質都是特徵到結果、標籤的對映

不同點:分類樣本輸出是類的形式(離散),回歸輸出是實數(連續數值型)

故回歸樹無法利用分類樹的資訊增益等形式進行判定分類,要用新的方式評估效果,比如**誤差(ndcg,map等)

乙個回歸樹形成的關鍵點在於:

**點依據什麼來劃分(如前面說的均方誤差最小,loss);

分類後的節點**值是多少(如前面說,有一種是將葉子節點下各樣本實際值得均值作為葉子節點**誤差,或者計算所得)

整合學習:

是指構建多個分類器(弱分類器)對資料集進行**,然後用某種策略將多個分類器**的結果整合起來,作為最終**結果

整合學習根據各個弱分類器之間有無依賴關係,分為boosting和bagging兩大流派:

boosting流派,各分類器之間有依賴關係,必須序列,比如adaboost、gbdt、xgboost

bagging流派,各分類器之間沒有依賴關係,可各自並行,比如隨機森林(random forest)

gbdt(gradient boost decision tree)每一次的計算是都為了減少上一次的殘差,進而在殘差減少(負梯度)的方向上建立乙個新的模型。殘差=實際值-**值

xgboost:

如果不考慮工程實現、解決問題上的一些差異,xgboost與gbdt比較大的不同就是目標函式的定義

我們的目標是希望建立k個回歸樹,使得樹群的**值盡量接近真實值(準確率)而且有盡量大的泛化能力(更為本質的東西)

誤差/損失函式揭示訓練誤差,鼓勵我們的模型盡量去擬合訓練資料,使得最後的模型會有比較少的 bias。而正則化項定義複雜度,鼓勵更加簡單的模型。因為當模型簡單之後,有限資料擬合出來結果的隨機性比較小,不容易過擬合,使得最後模型的**更加穩定。

xgboost輸出

out[32]:array([ 0.20081411,  0.80391562,  0.20081411,  0.80391562,  0.80391562,

0.80391562,  0.20081411,  0.80391562,  0.80391562,  0.80391562,

0.80391562,  0.80391562,  0.80391562,  0.20081411,  0.20081411,

0.20081411,  0.20081411,  0.20081411,  0.20081411,  0.20081411])

陣列中每個數值表示每個樣本在所有樹中葉子結點的分布狀況,可以用**進行檢視:

ypred_leaf = bst.predict(dtest, pred_leaf=true)

out[33]:array([[1, 1, 1, ..., 1, 1, 1],

[2, 2, 2, ..., 2, 2, 2],

[1, 1, 1, ..., 1, 1, 1],

[1, 1, 1, ..., 1, 1, 1],

[1, 1, 1, ..., 1, 1, 1],

[1, 1, 1, ..., 1, 1, 1]])

輸出的維度為[樣本數, 樹的數量], 樹的數量預設是100, 所以ypred_leaf的維度為[100*100].

對於第一行資料的解釋就是, 在xgboost所有的100棵樹里, **的葉子節點都是1(相對於每顆樹).

每棵樹的選取特徵進行**不同,最後加起來得出分數(結果)

LambdaMart一些淺薄理解

首先ranknet 是pairwise排序學習演算法,利用神經網路進行計算得到文件分數,從而得到文件i在文件j之前的概率,即為文件ij之間的關係 pair 進而得到損失函式,對其進行優化 其次lambdarank 是listwise排序學習演算法,是在ranknet基礎上進行的優化,由於最基本的pa...

堆,棧,佇列的一些淺薄的理解

一些自己理解的概念 1 記憶體 記憶體是計算機重要的部件之一,任何程式都需要在記憶體中執行,是與cpu和外部儲存裝置資料溝通的橋梁。在計算機執行的過程中,cpu會把記憶體中的資料進行運算,當執行結束後,cpu會把迅速按結果暫時輸出到記憶體。所以記憶體也決定著計算機的穩定執行。3 常用的資料結構 陣列...

關於spring AOP的淺薄理解

spring aop是相對於spring oop 物件導向程式設計 而言的,即面向方面程式設計,是一種程式設計思想,其實現邏輯有點複雜,個人還不是特別理解。spring aop的含義是,在不影響整個業務流程的前提下,封裝一些業務流程中經常用到的方法,或對於業務上某些輸入值,或字段,或物件的處理。對於...