ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略
ML之GB:GB算法相關(guān)論文、相關(guān)思路、關(guān)鍵步驟、代碼實(shí)現(xiàn)、配圖集合、案例應(yīng)用之詳細(xì)攻略
?
?
目錄
GB算法相關(guān)文獻(xiàn)、論文
GB算法關(guān)鍵步驟
GB算法代碼實(shí)現(xiàn)
GB案例應(yīng)用
1、GB用于回歸
2、GB用于分類(lèi)
?
?
GB算法相關(guān)文獻(xiàn)、論文
后期更新……
?
?
GB算法關(guān)鍵步驟
后期更新……
1、算法流程
?
?
?
GB算法代碼實(shí)現(xiàn)
1、Scikit-learn中的 GBM
sklearn.ensemble.GradientBoostingClassifier(loss='deviance', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_split=1e-07, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto')| 參數(shù) | 說(shuō)明 |
| loss | 待優(yōu)化的目標(biāo)函數(shù),‘deviance’表示采用logistic損失,輸出概率值;‘exponential’?表示采用指數(shù)損失。缺省‘deviance’ |
| learning_rate | 學(xué)習(xí)率或收縮因子。學(xué)習(xí)率和迭代次數(shù)/弱分類(lèi)器數(shù)目n_estimators相關(guān)。?缺省:0.1 |
| n_estimators | 當(dāng)數(shù)/弱分類(lèi)器數(shù)目.?缺省:100 |
| subsample | 學(xué)習(xí)單個(gè)弱學(xué)習(xí)器的樣本比例。缺省為:1.0 |
(1)、由于弱學(xué)習(xí)器為CART,所以很多參數(shù)與樹(shù)模型的參數(shù)相同。
(2)、其中(loss='deviance', learning_rate=0.1, n_estimators=100, subsample=1.0, 這些參數(shù)主要關(guān)于弱學(xué)習(xí)器組合。
?
?
GB案例應(yīng)用
1、GB用于回歸
sklearn.ensemble.GradientBoostingRegressor 類(lèi)的構(gòu)造函數(shù)
函數(shù)API官方解釋:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor
(1)、重點(diǎn)參數(shù)解釋
Loss:字符串,可選(缺省值為“l(fā)s”)。梯度提升法用決策樹(shù)來(lái)逼近整體損失函數(shù)的梯度。最常使用的整體損失項(xiàng)就是誤差平方的和(sum squared error),這個(gè)就是通常的最小二乘回歸方法的懲罰項(xiàng)。最小誤差平方和(Least sum squared error)是一個(gè)很方便的選項(xiàng),因?yàn)檎`差平方(squared error)在數(shù)學(xué)上處理比較簡(jiǎn)潔。但是對(duì)應(yīng)實(shí)際的問(wèn)題,其他的損失函數(shù)可能更合適。例如,筆者在研究自動(dòng)交易問(wèn)題時(shí),注意到誤差平方懲罰項(xiàng)會(huì)導(dǎo)致算法回避重大的損失,但是會(huì)接受較小的損失,但是較小的損失累積起來(lái)也是相當(dāng)可觀的。采用誤差絕對(duì)值的和(Sum of absolute value of error)可以取得更好的性能,對(duì)自動(dòng)交易問(wèn)題更匹配。最小平均絕對(duì)值(Least mean absolute value)通常對(duì)異常點(diǎn)不敏感。梯度提升法是少數(shù)幾個(gè)可以自由選擇懲罰函數(shù)的算法。
可以取的字符串值如下。
● ls :最小均方誤差(Least mean squared error)。
● lad :最小平均絕對(duì)誤差(Least mean absolute value of error)。
● huber :胡貝爾誤差是兩種誤差的混合:當(dāng)誤差數(shù)值較小時(shí),取誤差的平方,當(dāng)
誤差數(shù)值較大時(shí),取誤差的絕對(duì)值。
● quantile :分位數(shù)回歸。預(yù)測(cè)分位數(shù)(由 alpha 參數(shù)指定)。
● Learning_rate。
? ? ? ? 浮點(diǎn)數(shù),可選(缺省值為0.1)。
? ? ? ? ?正如前面提到的,梯度提升法基于梯度下降法。Learning_rate 指明沿梯度方向的步長(zhǎng)。如果步長(zhǎng)太大,會(huì)看到誤差迅速下降,然后迅速上升(是集成方法中決策樹(shù)數(shù)目的函數(shù))。如果步長(zhǎng)太小,則誤差下降得十分緩慢,需要訓(xùn)練更多的決策樹(shù)。Learning_rate 的最佳值是依賴(lài)于問(wèn)題的,也依賴(lài)于所選擇的決策樹(shù)的深度。缺省值0.1 是相對(duì)比較大的值,但是是一個(gè)很好的起點(diǎn)。首先選用這個(gè)值,觀察是否導(dǎo)致了不穩(wěn)定或者過(guò)擬合,然后再按需調(diào)整。
N_estimators:整型,可選(缺省值為100)。此參數(shù)指定集成方法中的決策樹(shù)數(shù)目。如第6 章所述,也可以把它看作朝向梯度下降的方向,達(dá)到誤差最小值所需的步數(shù)。也可以看作是增量式逼近所用的步數(shù)(即訓(xùn)練模型的數(shù)目)。因?yàn)槊恳粋€(gè)后續(xù)的逼近(每一個(gè)后續(xù)的決策樹(shù))都與learning rate( 學(xué)習(xí)速度)相乘,學(xué)習(xí)速度越大,朝向誤差最小值取得同樣的進(jìn)步所需的決策樹(shù)就越少。然而(正如在學(xué)習(xí)速度小節(jié)所討論的那樣),學(xué)習(xí)速度太高會(huì)導(dǎo)致過(guò)擬合。對(duì)于一個(gè)新問(wèn)題,往往需要嘗試幾
次才能習(xí)得參數(shù)的最佳取值范圍。缺省值100 可以作為一個(gè)很好的起點(diǎn)(特別是與學(xué)習(xí)速度的缺省值一起聯(lián)合使用時(shí))。
Subsample:浮點(diǎn)型,可選(缺省值為1.0)。如果與隨機(jī)森林相似,用數(shù)據(jù)的抽樣對(duì)決策樹(shù)進(jìn)行訓(xùn)練,則梯度提升法變成了隨機(jī)梯度提升法。Friedman(算法發(fā)明人)建議subsample 取0.5。這是一個(gè)很好的起點(diǎn)。
Max_depth:整型,可選(缺省值為3)。就像隨機(jī)森林,max_depth 是集成方法中單個(gè)決策樹(shù)的深度,隨機(jī)森林需要決策樹(shù)達(dá)到一定深度才能產(chǎn)生高精確度的模型,然而梯度提升通過(guò)持續(xù)關(guān)注殘差,使用深度為1 的決策樹(shù)(叫作樹(shù)樁stumps)就可以獲得高精確度。梯度提升法對(duì)決策樹(shù)深度的需求是由屬性之間相關(guān)程度決定的。如果屬性之間相互獨(dú)立,則深度為1的決策樹(shù)可以獲得與深度為2 的決策樹(shù)相同的性能。通常,可先將決策樹(shù)的深度設(shè)為1,然后調(diào)整好其他參數(shù)。再將決策樹(shù)的深度調(diào)整為2,看看是否會(huì)帶來(lái)性能上的提升。筆者還從來(lái)沒(méi)遇到過(guò)需要決策樹(shù)深度為10 的問(wèn)題。
Max_features:整型、浮點(diǎn)型、字符串,或者None, 可選(缺省值為None)。當(dāng)查找最佳分割點(diǎn)時(shí),需要考慮的屬性的數(shù)目是由max_features 值和問(wèn)題數(shù)據(jù)中屬性的總數(shù)共同決定的。定義屬性的總數(shù)為nFeatures,那么:如果 max_features 是整數(shù),則在每次分割時(shí)考慮 max_features 個(gè)屬性。如果 max_features 是浮點(diǎn)數(shù),則 max_features 是需要考慮的屬性占全體屬性的百分比:int(max_features*nFeatures)。
? ? ? ? ? 可能的字符串值包括:
auto max_features=nFeatures
sqrt max_features=sqrt(nFeatures)
log2 max_features=log2(nFeatures)
? ? ? ? ?如果 max_features 是 None,那么 max_features 等于 nFeatures。
? ? ? ? ?在梯度提升法Python 實(shí)現(xiàn)中,max_features 起的作用與隨機(jī)森林中的作用相同。它決定了在決策樹(shù)的每個(gè)節(jié)點(diǎn)進(jìn)行分割時(shí)需要考慮多少個(gè)屬性。這使梯度提升法的Python 實(shí)現(xiàn)具有一個(gè)獨(dú)特的能力:它可以用隨機(jī)森林作為基學(xué)習(xí)器來(lái)代替原來(lái)需要考慮全部屬性空間的決策樹(shù)。
Warm_start:布爾型,可選(缺省值為False)。如果warm_start 設(shè)為T(mén)rue,fit() 函數(shù)將從上次訓(xùn)練停止的地方開(kāi)始。
(2)、重點(diǎn)屬性解釋
Feature_importances:一個(gè)數(shù)組,其長(zhǎng)度等于數(shù)據(jù)集中屬性的數(shù)目。數(shù)組中的值是正的浮點(diǎn)數(shù),表明了相應(yīng)屬性對(duì)預(yù)測(cè)結(jié)果的重要性。數(shù)值越大,表明此屬性越重要。
Train_score:一個(gè)數(shù)組,其長(zhǎng)度等于集成方法中決策樹(shù)的數(shù)目。此數(shù)組存放在訓(xùn)練階段對(duì)決策樹(shù)依次訓(xùn)練時(shí)的誤差。
(3)、重點(diǎn)方法解釋
Fit(XTrain, yTrain, monitor=None):XTrain 和yTrain 的形式與隨機(jī)森林中的一樣。XTrain 是一個(gè)(nInstances*nAttributes)numpy 數(shù)組,這里nInstances 是訓(xùn)練數(shù)據(jù)集的行數(shù),nAttributes 是屬性的數(shù)目。yTrain 是
一個(gè)存放訓(xùn)練數(shù)據(jù)集目標(biāo)的(nInstances *1)numpy 數(shù)組。對(duì)象monitor 是回調(diào)函數(shù),用來(lái)提早停止訓(xùn)練。
Predict(X):Predict(x) 由一組屬性X 產(chǎn)生預(yù)測(cè),X 的列數(shù)(屬性數(shù))與訓(xùn)練數(shù)據(jù)集屬性數(shù)一致,X 可以有任意行的數(shù)據(jù)。
Staged_predict(x):此函數(shù)的行為與predict() 函數(shù)的行為類(lèi)似,除了它是可迭代的,根據(jù)梯度提升法生成一系列模型,然后根據(jù)模型產(chǎn)生一系列的預(yù)測(cè)值。每次調(diào)用都會(huì)利用梯度提升法在已產(chǎn)生的一系列模型中增加一個(gè)決策樹(shù),然后產(chǎn)生一個(gè)預(yù)測(cè)值。
?
2、GB用于分類(lèi)
函數(shù)API官方解釋:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier
(1)、重點(diǎn)參數(shù)解釋
loss:deviance 對(duì)于分類(lèi)問(wèn)題,deviance 是缺省的,也是唯一的選項(xiàng)。
(2)、重點(diǎn)方法解釋
fit(X,y , monitor=None):對(duì)于分類(lèi)問(wèn)題,其不同點(diǎn)只在于標(biāo)簽y 的不同。對(duì)應(yīng)分類(lèi)問(wèn)題,標(biāo)簽是0 到類(lèi)別總數(shù)減1 的一個(gè)整數(shù)。對(duì)于二分類(lèi)問(wèn)題,標(biāo)簽值為0或者1。對(duì)于多類(lèi)別分類(lèi)問(wèn)題,如果共有nClass 個(gè)不同的類(lèi)別,則標(biāo)簽取值為0 ~ nClass-1。
decision_function(X):梯度提升分類(lèi)器實(shí)際上是回歸決策樹(shù)的集合,會(huì)產(chǎn)生與所屬類(lèi)別的概率相關(guān)的實(shí)數(shù)估計(jì)值。這些估計(jì)值還需要經(jīng)過(guò)反logistic 函數(shù)將其轉(zhuǎn)換為概率。轉(zhuǎn)換前的實(shí)數(shù)估計(jì)值可通過(guò)此函數(shù)獲得,對(duì)這些估計(jì)值的使用就像ROC 曲線計(jì)算中使用概率那樣簡(jiǎn)單。
predict(X):此函數(shù)預(yù)測(cè)所屬類(lèi)別。
predict_proba(X):此函數(shù)預(yù)測(cè)所屬類(lèi)別的概率。它對(duì)于每個(gè)類(lèi)別有一列概率值。對(duì)于二分類(lèi)問(wèn)題有兩列。
? ? ? 對(duì)于多類(lèi)別分類(lèi)問(wèn)題,共有nClass 列。上述函數(shù)的階段性(staged)版本是可迭代的,產(chǎn)生與決策樹(shù)數(shù)目相同的結(jié)果(也與
訓(xùn)練過(guò)程中執(zhí)行的步數(shù)一致)。
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Matlab:利用Matlab编程实现模
- 下一篇: Py之playsound:playsou