手機(jī)網(wǎng)站制作哪家便宜日本比分算1:1
目錄
一、Boosting訓(xùn)練與預(yù)測(cè)
二、梯度增強(qiáng)的思想核心
三、如何構(gòu)造弱學(xué)習(xí)器和加權(quán)平均的權(quán)重
四、損失函數(shù)
五、梯度增強(qiáng)決策樹
六、GBDT生成新特征
主要思想
構(gòu)造流程
七、梯度增強(qiáng)決策樹以及在搜索的應(yīng)用
7.1 GDBT模型調(diào)參
7.1.1 框架層面參數(shù)
n_estimators
subsample
7.1.2 分類/回歸樹層面參數(shù)
最大特征數(shù)max_features
決策樹最大深度max_depth
部節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split
葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf
7.2 K折交叉驗(yàn)證找到最佳超參數(shù)
交叉驗(yàn)證的優(yōu)點(diǎn)
交叉驗(yàn)證的缺點(diǎn)
基于k折交叉驗(yàn)證的網(wǎng)格搜索法
7.3? GBDT在推薦系統(tǒng)中的排序算法示例
一、Boosting訓(xùn)練與預(yù)測(cè)

Boosting訓(xùn)練過程為串型,基模型按次序一一進(jìn)行訓(xùn)練,基模型的訓(xùn)練集按照某種策略每次都進(jìn)行一定的更新。對(duì)所有基模型預(yù)測(cè)的結(jié)果進(jìn)行線性綜合產(chǎn)生最終的預(yù)測(cè)結(jié)果
GBDT是將梯度下降和 Boosting 方法結(jié)合的算法。它采用決策樹模型,并定義一個(gè)損失函數(shù),通過梯度下降來優(yōu)化模型。
二、梯度增強(qiáng)的思想核心
梯度增強(qiáng)首先還是增強(qiáng)算法的一個(gè)擴(kuò)展,也是希望能用一系列的弱學(xué)習(xí)器來達(dá)到一個(gè)強(qiáng)學(xué)習(xí)器的效果,從而逼近目標(biāo)變量的值,也就是我們常說的標(biāo)簽值。而根據(jù)加性模型的假設(shè),這種逼近效果是這些弱學(xué)習(xí)器的一個(gè)加權(quán)平均。也就是說,最終的預(yù)測(cè)效果,是所有單個(gè)弱學(xué)習(xí)器的一個(gè)平均效果,只不過這個(gè)平均不是簡(jiǎn)單的平均,而是一個(gè)加權(quán)的效果。
三、如何構(gòu)造弱學(xué)習(xí)器和加權(quán)平均的權(quán)重
梯度增強(qiáng)采用了一個(gè)統(tǒng)計(jì)學(xué)或者說是優(yōu)化理論的視角,使得構(gòu)造這些部分變得更加直觀。
梯度增強(qiáng)的作者們意識(shí)到,如果使用“梯度下降”(Gradient Descent)來優(yōu)化一個(gè)目標(biāo)函數(shù),最后的預(yù)測(cè)式可以寫成一個(gè)加和的形式。也就是,每一輪梯度的值和一個(gè)叫“學(xué)習(xí)速率”(Learning Rate)的參數(shù)共同疊加起來形成了最后的預(yù)測(cè)結(jié)果。這個(gè)觀察非常重要,如果把這個(gè)觀察和我們的目標(biāo),也就是構(gòu)造弱學(xué)習(xí)器的加權(quán)平均聯(lián)系起來看,我們就會(huì)發(fā)現(xiàn),其實(shí)每個(gè)梯度的值就可以認(rèn)為是一個(gè)弱學(xué)習(xí)器,而學(xué)習(xí)速率就可以看作是某種意義上的權(quán)重
首先,這是一個(gè)迭代算法。每一輪迭代,我們把當(dāng)前所有學(xué)習(xí)器的加權(quán)平均結(jié)果當(dāng)作這一輪的函數(shù)值,然后求得針對(duì)某一個(gè)損失函數(shù)對(duì)于當(dāng)前所有學(xué)習(xí)器的參數(shù)的一個(gè)梯度。然后,我們利用某一個(gè)弱學(xué)習(xí)器算法,可以是線性回歸模型(Linear Regression)、對(duì)數(shù)幾率模型(Logistic Regression)等來擬合這個(gè)梯度。最后,我們利用“線查找”(Line Search)的方式找到權(quán)重。說得更直白一些,那就是我們嘗試?yán)靡恍┖?jiǎn)單的模型來擬合不同迭代輪數(shù)的梯度。
四、損失函數(shù)
損失函數(shù)是用來量化模型預(yù)測(cè)值與實(shí)際值之間差異的函數(shù)。在訓(xùn)練模型時(shí),損失函數(shù)的值被用來通過優(yōu)化算法(如梯度下降)調(diào)整模型參數(shù),目標(biāo)是最小化這個(gè)損失值

對(duì)于GBDT來說,如果是用于回歸問題,那么通常選擇平Squared Error Loss(方誤差損失);如果是用于分類問題,尤其是二分類問題,通常選擇Logistic Regression Loss(邏輯回歸損失)。請(qǐng)注意,GBDT用于多分類問題時(shí),會(huì)使用對(duì)數(shù)損失的多分類版本。
五、梯度增強(qiáng)決策樹
梯度增強(qiáng)決策樹就是利用決策樹,這種最基本的學(xué)習(xí)器來當(dāng)作弱學(xué)習(xí)器,去擬合梯度增強(qiáng)過程中的梯度。然后融合到整個(gè)梯度增強(qiáng)的過程中,最終,梯度增強(qiáng)決策樹其實(shí)就是每一輪迭代都擬合一個(gè)新的決策樹用來表達(dá)當(dāng)前的梯度,然后跟前面已經(jīng)有的決策樹進(jìn)行疊加。在整個(gè)過程中,決策樹的形狀,比如有多少層、總共有多少節(jié)點(diǎn)等,都是可以調(diào)整的或者學(xué)習(xí)的超參數(shù)。而總共有多少棵決策樹,也就是有多少輪迭代是重要的調(diào)節(jié)參數(shù),也是防止整個(gè)學(xué)習(xí)過程過擬合的重要手段。
六、GBDT生成新特征
主要思想
GBDT每棵樹的路徑直接作為L(zhǎng)R輸入特征使用
構(gòu)造流程
用已有特征訓(xùn)練GBDT模型,然后利用GBDT模型學(xué)習(xí)到的樹來構(gòu)造新特征。構(gòu)造的新特征向量是取值0/1的,向量的每個(gè)元素對(duì)應(yīng)于GBDT模型中樹的葉子結(jié)點(diǎn)。當(dāng)一個(gè)樣本點(diǎn)通過某棵樹最終落在這棵樹的一個(gè)葉子結(jié)點(diǎn)上,那么在新特征向量中這個(gè)葉子結(jié)點(diǎn)對(duì)應(yīng)的元素值為1,而這棵樹的其他葉子結(jié)點(diǎn)對(duì)應(yīng)的元素值為0。新特征向量的長(zhǎng)度等于GBDT模型里所有樹包含的葉子結(jié)點(diǎn)數(shù)之和。?
新特征向量反映了數(shù)據(jù)點(diǎn)在所有決策樹中的路徑信息,可以幫助線性模型(如邏輯回歸)更好地捕捉數(shù)據(jù)點(diǎn)的復(fù)雜結(jié)構(gòu)和模式,因?yàn)闆Q策樹能夠捕捉非線性關(guān)系,而這種關(guān)系現(xiàn)在被編碼到新特征向量中供線性模型使用。這樣的技術(shù)常被用于提高模型在各種任務(wù)中的表現(xiàn),尤其是在那些線性模型不足以捕捉數(shù)據(jù)復(fù)雜性的場(chǎng)景中。
七、梯度增強(qiáng)決策樹以及在搜索的應(yīng)用
7.1 GDBT模型調(diào)參
7.1.1 框架層面參數(shù)
n_estimators
弱學(xué)習(xí)器的最大迭代次數(shù),或者說最大的弱學(xué)習(xí)器的個(gè)數(shù)。一般來說取值太小容易欠擬合;太大又容易過擬合,一般選擇一個(gè)適中的數(shù)值。
subsample
即子采樣,取值為(0,1]。注意這里的子采樣和隨機(jī)森林不一樣,隨機(jī)森林使用的是放回抽樣,而這里是不放回抽樣。如果取值為1,則全部樣本都使用;如果取值小于1,則只有一部分樣本會(huì)去做GBDT的決策樹擬合。選擇小于1的比例可以減少方差,即防止過擬合,但是會(huì)增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間,默認(rèn)是1.0,即不使用子采樣。
7.1.2 分類/回歸樹層面參數(shù)
最大特征數(shù)max_features
默認(rèn)是“None”,即 考慮所有的特征數(shù)。如果是整數(shù),代表考慮的特征絕對(duì)數(shù)。如果是浮點(diǎn)數(shù),代表考慮特征百分比。一般來說,如果樣本特征數(shù)不多,比如小于50,可以用默認(rèn)的“None”,如果特征數(shù)非常多,需要進(jìn)行網(wǎng)格搜索。
決策樹最大深度max_depth
默認(rèn)可以不輸入,此時(shí)決策樹在建立子樹的時(shí)候不會(huì)限制子樹的深度。一般來說,數(shù)據(jù)少或者特征少的時(shí)候可以不管這個(gè)值。如果模型樣本量多,特征也多則需要限制最大深度,取值取決于數(shù)據(jù)的分布。常用的可以取值10-100之間。
部節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split
如果某節(jié)點(diǎn)的樣本數(shù)少于min_samples_split,則不會(huì)繼續(xù)再進(jìn)行劃分。 默認(rèn)是2.
如果樣本量不大,不需要調(diào)節(jié)這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf
如果某葉子節(jié)點(diǎn)數(shù)目小于樣本數(shù),則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。 默認(rèn)是1,可以輸入最少的樣本數(shù)的整數(shù),或者最少樣本數(shù)占樣本總數(shù)的百分比。如果樣本量不大,不需要調(diào)節(jié)這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
7.2 K折交叉驗(yàn)證找到最佳超參數(shù)
- 選擇K的值(比如10),將數(shù)據(jù)集分成K等份
- 使用其中的K-1份數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)進(jìn)行模型的訓(xùn)練
- 使用一種度量測(cè)度在另外一份數(shù)據(jù)(作為驗(yàn)證數(shù)據(jù))衡量模型的預(yù)測(cè)性能
交叉驗(yàn)證的優(yōu)點(diǎn)
- 交叉驗(yàn)證通過降低模型在一次數(shù)據(jù)分割中性能表現(xiàn)上的方差來保證模型性能的穩(wěn)定性
- 交叉驗(yàn)證可以用于選擇調(diào)節(jié)參數(shù)、比較模型性能差別、選擇特征
交叉驗(yàn)證的缺點(diǎn)
交叉驗(yàn)證帶來一定的計(jì)算代價(jià),尤其是當(dāng)數(shù)據(jù)集很大的時(shí)候,導(dǎo)致計(jì)算過程會(huì)變得很慢
基于k折交叉驗(yàn)證的網(wǎng)格搜索法
GridSearchCV,其作用是自動(dòng)調(diào)參。將每個(gè)參數(shù)所有可能的取值輸入后可以給出最優(yōu)化的結(jié)果和參數(shù)。但是該方法適合于小數(shù)據(jù)集,對(duì)于大樣本很難得出結(jié)果。
此時(shí)可以使用基于貪心算法的坐標(biāo)下降進(jìn)行快速調(diào)優(yōu):先拿當(dāng)前對(duì)模型影響最大的參數(shù)調(diào)優(yōu),直到最優(yōu)化,再拿下一個(gè)影響最大的參數(shù)調(diào)優(yōu),如此下去,直到所有的參數(shù)調(diào)整完畢。這個(gè)方法的缺點(diǎn)就是可能會(huì)調(diào)到局部最優(yōu)而不是全局最優(yōu),時(shí)間效率較高。
以下是一個(gè)使用 GridSearchCV
優(yōu)化 GBDT 參數(shù)的簡(jiǎn)單例子
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier# 定義 GBDT 模型
gbdt = GradientBoostingClassifier()# 定義參數(shù)網(wǎng)格
param_grid = {'n_estimators': [100, 200, 300],'learning_rate': [0.01, 0.1, 0.2],'max_depth': [3, 4, 5]
}# 創(chuàng)建 GridSearchCV 對(duì)象
grid_search = GridSearchCV(gbdt, param_grid, cv=5, scoring='accuracy')# 擬合/訓(xùn)練模型
grid_search.fit(X_train, y_train)# 獲取最佳參數(shù)組合和模型
best_parameters = grid_search.best_params_
best_model = grid_search.best_estimator_
在這個(gè)例子中,GridSearchCV
用于找到 GBDT 模型的最佳超參數(shù),如 n_estimators
、learning_rate
和 max_depth
。通過這種方式,GridSearchCV
提供了一個(gè)方便的方法來提高 GBDT 模型的性能。
7.3? GBDT在推薦系統(tǒng)中的排序算法示例
import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split# 生成模擬的推薦系統(tǒng)數(shù)據(jù)集
# 假設(shè)有10個(gè)特征,這些特征描述了用戶和物品的各種屬性和交互
X = np.random.rand(1000, 10) # 特征矩陣,每行代表用戶-物品對(duì)的特征
y = np.random.rand(1000) # 目標(biāo)變量,代表用戶對(duì)物品的評(píng)分或偏好# 將數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化 GBDT 模型
gbdt = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)# 訓(xùn)練模型
gbdt.fit(X_train, y_train)# 使用模型進(jìn)行預(yù)測(cè)
predictions = gbdt.predict(X_test)# 將預(yù)測(cè)結(jié)果和測(cè)試集的特征合并,模擬實(shí)際推薦場(chǎng)景
recommended_items = pd.DataFrame(X_test, columns=[f'feature_{i}' for i in range(X_test.shape[1])])
recommended_items['predicted_rating'] = predictions# 對(duì)每個(gè)用戶推薦評(píng)分最高的物品
# 在實(shí)際應(yīng)用中,你需要一個(gè)用戶ID來分組,這里我們簡(jiǎn)化為按行分組
recommended_items.sort_values(by='predicted_rating', ascending=False, inplace=True)# 展示每個(gè)用戶推薦的最高評(píng)分物品
recommended_items_per_user = recommended_items.groupby('feature_0', as_index=False).first()
print(recommended_items_per_user)
在上述代碼中,X
表示特征矩陣,y
表示目標(biāo)變量。我們首先使用 train_test_split
分割數(shù)據(jù)集,然后創(chuàng)建和訓(xùn)練一個(gè)GBDT模型。這個(gè)模型用來預(yù)測(cè)用戶對(duì)物品的評(píng)分。最后,我們展示了如何使用這個(gè)模型來為用戶推薦評(píng)分最高的物品。
請(qǐng)注意,這是一個(gè)高度簡(jiǎn)化的示例。在實(shí)際推薦系統(tǒng)中,你會(huì)有一個(gè)用戶ID與物品ID,并且你會(huì)根據(jù)這些ID來構(gòu)建特征,然后進(jìn)行排序和推薦。特征可能包括用戶的歷史行為,物品的內(nèi)容特征,用戶和物品的交互歷史等。另外,排序模型的評(píng)估可能會(huì)使用更復(fù)雜的指標(biāo),如平均準(zhǔn)確率均值(Mean Average Precision)或歸一化折扣累積增益(NDCG)。