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