sklearn中gbdt原始碼解讀筆記

2021-07-25 23:35:52 字數 2071 閱讀 6919

這周已經過去了3天,主要精力都是集中在sklearn的gbdt**解讀上,進展肯定是有,但是感覺阻力比較大,但是這又有什麼辦法呢?人一能之,我十之!但是感覺有時候多花時間的情況下效率很低很低,但是可能也是自己內心浮躁,想回去玩造成了這種效率低下,要看這個演算法,只有不到黃河心不死的決心,即便我被迫需要先應用再解讀,我也一定要花時間去解讀,一定要精通這個演算法,排除萬難!把前幾天關於gbdt的解讀再總結一下!

gbdt = gradientboostingclassifier()
用預設的引數進行一些初始化,生成一些例項變數,這個類主要繼承於乙個gradientboostingbase類

gbdt.fit(x,y)
主要的核心在於這個函式,也是幾乎所有sklearn演算法的建模介面,跟進去過後

首先進行一些檢測是否熱啟動,檢測資料集是否規範,檢查因變數是否合格,檢查引數是否合規

self._init_state()
然後進行stage統計的初始化

self.init_.fit(x, y, sample_weight)
y_pred = self.init_.predict(x)
用初始的函式去擬合併計算,fit中就是簡單的計算log(odds ratio),然後predict就用這個值去填充每乙個**,得到f0的**值y_pred

n_stages = self._fit_stages(x, y, y_pred, sample_weight, random_state,

begin_at_stage, monitor, x_idx_sorted)

這一步就比較關鍵了,乙個stage就是一次迭代,這裡就繼續跟進去看看

_fit_stages中首先是做一些特殊引數的處理,對於預設引數來說,暫時可以不用管

_fit_stages中核心的地方就是以迭代的形式fit每乙個stage

y_pred = self._fit_stage(i, x, y, y_pred, sample_weight,

sample_mask, random_state, x_idx_sorted,

x_csc, x_csr)

先不進到每乙個stage的計算過程,這個計算得到新的**值y_pred,這個y_pred屬於負無窮到正無窮

用y和y_pred計算損失函式的值

self.train_score_[i] = loss_(y, y_pred, sample_weight)
我跟到了這個損失函式裡面,這個損失函式就和邏輯回歸的損失函式幾乎類似,但是為了便於寫**,形式需要變換一下才能看出來,這裡就是邏輯回歸的損失函式乘以2(現在還不清楚為什麼要乘以2)

我們在跟到self._fit_stage中去一**竟

裡面是乙個迴圈建樹,並且進行**的過程,由於是二分類,只建一棵樹,建樹用到的y是殘差

residual = loss.negative_gradient(y, y_pred, k=k,

sample_weight=sample_weight)

殘差是y-logit(y_pred)

tree.fit(x, residual, sample_weight=sample_weight,

check_input=false, x_idx_sorted=x_idx_sorted)

建樹過後要用一系列方法得到新的y_pred

loss.update_terminal_regions(tree.tree_, x, y, residual, y_pred,

sample_weight, sample_mask,

self.learning_rate, k=k)

然後按照這樣的過程迭代,直到滿足最大的n_estimators

這個**裡面關於建回歸樹和最後gbdt**是涉及到cython**

這部分我可能需要進一步研讀理解

不放棄,堅持!人一能之,我十之!

sklearn中的gbdt原始碼分析

簡單看了一下sklearn中的gbdt原始碼 在這裡記錄一下,目前來說還不能把gbdt的所有理論都搞清楚 sklearn有兩個類似於gbdt的實現 gradientboostingclassifier gradientboostingregressor乙個用於分類,另乙個用於回歸 這兩個類其實區別只...

Sklearn引數詳解 GBDT

這篇介紹boosting的第二個模型gbdt,gbdt和adaboost都是boosting模型的一種,但是略有不同,主要有以下兩點不同 class sklearn.ensemble.gradientboostingclassifier loss deviance learning rate 0.1...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...