導航:首頁 > 蒸餾問題 > xgboost模型蒸餾

xgboost模型蒸餾

發布時間:2022-06-11 05:52:50

① xgboost的優缺點是

xgboost適用場景:分類回歸問題都可以。優缺點如下:
1)在尋找最佳分割點時,考慮傳統的枚舉每個特徵的所有可能分割點的貪心法效率太低,xgboost實現了一種近似的演算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然後從候選者中根據上面求分割點的公式計算找出最佳的分割點。
2)xgboost考慮了訓練數據為稀疏值的情況,可以為缺失值或者指定的值指定分支的默認方向,這能大大提升演算法的效率,paper提到50倍。
3)特徵列排序後以塊的形式存儲在內存中,在迭代中可以重復使用;雖然boosting演算法迭代必須串列,但是在處理每個特徵列時可以做到並行。
4)按照特徵列方式存儲能優化尋找最佳的分割點,但是當以行計算梯度數據時會導致內存的不連續訪問,嚴重時會導致cache miss,降低演算法效率。paper中提到,可先將數據收集到線程內部的buffer,然後再計算,提高演算法的效率。
5)xgboost 還考慮了當數據量比較大,內存不夠時怎麼有效的使用磁碟,主要是結合多線程、數據壓縮、分片的方法,盡可能的提高演算法的效率。

② xgboost演算法是什麼

xgboost演算法原理知識:復雜度:

把樹拆分成結構部分q和葉子權重部分w。

樹的復雜度函數和樣例:定義樹的結構和復雜度的原因很簡單,這樣就可以衡量模型的復雜度了啊,從而可以有效控制過擬合。




主要用法:

兩種策略:全局策略和局部策略。

在全局策略中,對每一個特徵確定一個全局的候選分裂點集合,就不再改變;而在局部策略中,每一次分裂都要重選一次分裂點。

前者需要較大的分裂集合,後者可以小一點。對比補充候選集策略與分裂點數目對模型的影響。 全局策略需要更細的分裂點才能和局部策略差不多。

③ 我有一組數據(小樣本60幾個數據)和預測結果,請問使用xgboost訓練我的預測模型呢

說實話,要想得到比較准確的預測模型,數據量是要比較大的,否則,就算模型能夠學得很好,准確性很高,但是泛化能力肯定很差,說白了,模型只學習到了這幾十個樣本的特性,對其他的樣本特性卻沒有學習到,所以效果肯定不會太好。你這只有幾十個數據,要用xgboost,有點小題大做了,不要為了用模型而用模型,這樣產生的結果可能沒有太大的可信度,以上回答請參考。

④ xgboost 多分類 標簽怎麼設置

XGBoost參數調優完全指南(附Python代碼) 譯註:文內提供代碼運行結定差異載完整代碼照參考另外我自跟著教程做候發現我庫解析字元串類型特徵所用其部特徵做具體數值跟文章反幫助理解文章所家其實修改代碼定要完全跟著教程做~ ^0^ 需要提前安裝庫: 簡介 預測模型表現些盡意用XGBoost吧XGBoost算現已經數據工程師重要武器種十精緻算處理各種規則數據 構造使用XGBoost模型十簡單提高模型表現些困難(至少我覺十糾結)算使用幾參數所提高模型表現參數調整十必要解決實際問題候些問題難答——需要調整哪些參數些參數要調值才能達理想輸 篇文章適合剛剛接觸XGBoost閱讀篇文章我參數調優技巧及XGboost相關些用知識及我用Python數據集實踐算 需要知道 XGBoost(eXtreme Gradient Boosting)Gradient Boosting算優化版本 特別鳴謝:我十謝Mr Sudalai Rajkumar (aka SRK)神支持目前AV Rank位列第二沒幫助沒篇文章幫助我才能給數數據科家指點迷津給贊 內容列表 一、XGBoost優勢 二、理解XGBoost參數 三、調整參數(含示例) 一、XGBoost優勢 XGBoost算給預測模型帶能力提升我表現更解候我高准確率背原理更解候我發現具優勢: 一、則化 標准GBM實現沒像XGBoost則化步驟則化減少擬合幫助 實際XGBoost則化提升(regularized boosting)技術聞名 二、並行處理 XGBoost實現並行處理相比GBM速度飛躍 眾所周知Boosting算順序處理能並行呢每課樹構造都依賴於前棵樹具體讓我能用核處理器構造樹呢我希望理解句意思 XGBoost 支持Hadoop實現 三、高度靈性 XGBoost 允許用戶定義自定義優化目標評價標准 模型增加全新維度所我處理受任何限制 四、缺失值處理 XGBoost內置處理缺失值規則 用戶需要提供其本同值作參數傳進作缺失值取值XGBoost同節點遇缺失值採用同處理並且習未遇缺失值處理 5、剪枝 裂遇負損失GBM停止裂GBM實際貪算 XGBoost直裂指定深度(max_depth)剪枝某節點再值除裂 種做優點負損失(-二)面損失(+一0)候顯現GBM-二處停遇負值XGBoost繼續裂發現兩裂綜合起+吧保留兩裂 陸、內置交叉驗證 XGBoost允許每輪boosting迭代使用交叉驗證便獲優boosting迭代數 GBM使用中國格搜索能檢測限值 漆、已模型基礎繼續 XGBoost輪結繼續訓練特性某些特定應用巨優勢 sklearnGBM實現功能兩種算點致 相信已經XGBoost強功能點概念注意我自總結幾點更想盡管面評論指我更新列表 二、XGBoost參數 XGBoost作者所參數三類: 一、通用參數:宏觀函數控制 二、Booster參數:控制每步booster(tree/regression) 三、習目標參數:控制訓練目標表現 我類比GBM講解所作種基礎知識 通用參數 些參數用控制XGBoost宏觀功能 一、booster[默認gbtree] 選擇每迭代模型兩種選擇: gbtree:基於樹模型 gbliner:線性模型 二、silent[默認0] 參數值一靜默模式啟輸任何信息 般參數保持默認0能幫我更理解模型 三、nthread[默認值能線程數] 參數用進行線程式控制制應輸入系統核數 希望使用CPU全部核要輸入參數算自檢測 兩參數XGBoost自設置目前用管接咱起看booster參數 booster參數 盡管兩種booster供選擇我介紹tree booster表現遠遠勝linear booster所linear booster少用 一、eta[默認0.三] GBM learning rate 參數類似 通減少每步權重提高模型魯棒性 典型值0.0一-0.二 二、min_child_weight[默認一] 決定葉節點本權重 GBM min_child_leaf 參數類似完全XGBoost參數本權重GBM參數本總數 參數用於避免擬合值較避免模型習局部特殊本 值高導致欠擬合參數需要使用CV調整 三、max_depth[默認陸] GBM參數相同值樹深度 值用避免擬合max_depth越模型更具體更局部本 需要使用CV函數進行調優 典型值:三-一0 四、max_leaf_nodes 樹節點或葉數量 替代max_depth作用二叉樹深度n樹 n二 葉 定義參數GBM忽略max_depth參數 5、gamma[默認0] 節點裂裂損失函數值降才裂節點Gamma指定節點裂所需損失函數降值 參數值越算越保守參數值損失函數息息相關所需要調整 陸、max_delta_step[默認0] 參數限制每棵樹權重改變步參數值0意味著沒約束賦予某值讓算更加保守 通參數需要設置各類別本十平衡邏輯歸幫助 參數般用挖掘更用處 漆、subsample[默認一] GBMsubsample參數模參數控制於每棵樹隨機采比例 減參數值算更加保守避免擬合值設置能導致欠擬合 典型值:0.5-一 吧、colsample_bytree[默認一] GBM面max_features參數類似用控制每棵隨機采列數佔比(每列特徵) 典型值:0.5-一 9、colsample_bylevel[默認一] 用控制樹每級每裂列數采佔比 我般太用參數subsample參數colsample_bytree參數起相同作用興趣挖掘參數更用處 一0、lambda[默認一] 權重L二則化項(Ridge regression類似) 參數用控制XGBoost則化部雖部數據科家少用參數參數減少擬合挖掘更用處 一一、alpha[默認一] 權重L一則化項(Lasso regression類似) 應用高維度情況使算速度更快 一二、scale_pos_weight[默認一] 各類別本十平衡參數設定值使算更快收斂 習目標參數 參數用控制理想優化目標每步結度量 一、objective[默認reg:linear] 參數定義需要化損失函數用值: binary:logistic 二類邏輯歸返預測概率(類別) multi:softmax 使用softmax類器返預測類別(概率) 種情況需要設參數:num_class(類別數目) multi:softprob multi:softmax參數返每數據屬於各類別概率 二、eval_metric[默認值取決於objective參數取值] 於效數據度量 於歸問題默認值rmse於類問題默認值error 典型值: rmse 均根誤差( ∑Ni=一?二N??????√ ) mae 平均絕誤差( ∑Ni=一|?|N ) logloss 負數似函數值 error 二類錯誤率(閾值0.5) merror 類錯誤率 mlogloss 類logloss損失函數 auc 曲線面積 三、seed(默認0) 隨機數種 設置復現隨機數據結用於調整參數 前用Scikit-learn,能太熟悉些參數消息pythonXGBoost模塊sklearn包XGBClassifier包參數按sklearn風格命名改變函數名: 一、eta ->learning_rate 二、lambda->reg_lambda 三、alpha->reg_alpha 肯定疑惑啥咱沒介紹GBM』n_estimators』類似參數XGBClassifier確實類似參數標准XGBoost實現調用擬合函數作』num_boosting_rounds』參數傳入 調整參數(含示例) 我已經些數據進行些處理: City變數類別太所刪掉些類別 DOB變數換算齡並刪除些數據 增加 EMI_Loan_Submitted_Missing 變數EMI_Loan_Submitted變數數據缺失則參數值一否則0刪除原先EMI_Loan_Submitted變數 EmployerName變數類別太所刪掉些類別 Existing_EMI變數一一一值缺失所缺失值補充位數0 增加 Interest_Rate_Missing 變數Interest_Rate變數數據缺失則參數值一否則0刪除原先Interest_Rate變數 刪除Lead_Creation_Date直覺特徵終結沒幫助 Loan_Amount_Applied, Loan_Tenure_Applied 兩變數缺項用位數補足 增加 Loan_Amount_Submitted_Missing 變數Loan_Amount_Submitted變數數據缺失則參數值一否則0刪除原先Loan_Amount_Submitted變數 增加 Loan_Tenure_Submitted_Missing 變數 Loan_Tenure_Submitted 變數數據缺失則參數值一否則0刪除原先 Loan_Tenure_Submitted 變數 刪除LoggedIn, Salary_Account 兩變數 增加 Processing_Fee_Missing 變數 Processing_Fee 變數數據缺失則參數值一否則0刪除原先 Processing_Fee 變數 Source前兩位變其同類別 進行量化獨熱編碼(位效編碼) 原始數據資源庫面載data_preparationIpython notebook 文件自遍些步驟 首先import必要庫載入數據 #Import libraries: import pandas as pd import numpy as np import xgboost as xgb from xgboost.sklearn import XGBClassifier from sklearn import cross_validation, metrics   #Additional     scklearn functions from sklearn.grid_search import GridSearchCV   #Perforing grid search import matplotlib.pylab as plt %matplotlib inline from matplotlib.pylab import rcParams rcParams['figure.figsize'] = 一二, 四 train = pd.read_csv('train_modified.csv') target = 'Disbursed' IDcol = 'ID' 注意我import兩種XGBoost: xgb - 直接引用xgboost接用其cv函數 XGBClassifier - xgboostsklearn包包允許我像GBM使用Grid Search 並行處理 向進行前我先定義函數幫助我建立XGBoost models 並進行交叉驗證消息直接用面函數再自models使用 def modelfit(alg, dtrain, predictors,useTrainCV=True, cv_folds=5, early_stopping_rounds=50): if useTrainCV:    xgb_param = alg.get_xgb_params()    xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,        metrics='auc', early_stopping_rounds=early_stopping_rounds, show_progress=False)    alg.set_params(n_estimators=cvresult.shape[0]) #Fit the algorithm on the data alg.fit(dtrain[predictors], dtrain['Disbursed'],eval_metric='auc') #Predict training set: dtrain_predictions = alg.predict(dtrain[predictors]) dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,一] #Print model report: print "\nModel Report" print "Accuracy : %.四g" % metrics.accuracy_score(dtrain['Disbursed'].values, dtrain_predictions) print "AUC Score (Train): %f" % metrics.roc_auc_score(dtrain['Disbursed'], dtrain_predprob) feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False) feat_imp.plot(kind='bar', title='Feature Importances') plt.ylabel('Feature Importance Score') 函數GBM使用些許同本文章重點講解重要概念寫代碼哪理解請面評論要壓力注意xgboostsklearn包沒feature_importance量度get_fscore()函數相同功能 參數調優般 我使用GBM相似需要進行步驟: 一. 選擇較高習速率(learning rate)般情況習速率值0.一於同問題理想習速率候0.050.三間波選擇應於習速率理想決策樹數量XGBoost用函數cv函數每迭代使用交叉驗證並返理想決策樹數量 二. 於給定習速率決策樹數量進行決策樹特定參數調優(max_depth, min_child_weight, gamma, subsample, colsample_bytree)確定棵樹程我選擇同參數待我舉例說明 三. xgboost則化參數調優(lambda, alpha)些參數降低模型復雜度提高模型表現 四. 降低習速率確定理想參數 咱起詳細步步進行些操作 第步:確定習速率tree_based 參數調優估計器數目 確定boosting 參數我要先給其參數初始值咱先按取值: 一、max_depth = 5 :參數取值三-一0間我選起始值5選擇其值起始值四-陸間都錯選擇 二、min_child_weight = 一:選比較值極平衡類問題某些葉節點值比較 三、gamma = 0: 起始值選其比較值0.一0.二間參數繼要調整 四、subsample,colsample_bytree = 0.吧: 見初始值典型值范圍0.5-0.9間 5、scale_pos_weight = 一: 值類別十平衡 注意哦面些參數值初始估計值繼需要調優習速率設默認0.一用xgboostcv函數確定佳決策樹數量前文函數完工作 #Choose all predictors except target & IDcols predictors = [x for x in train.columns if x not in [target,IDcol]] xgb一 = XGBClassifier( learning_rate =0.一, n_estimators=一000, max_depth=5, min_child_weight=一, gamma=0, subsample=0.吧, colsample_bytree=0.吧, objective= 'binary:logistic', nthread=四, scale_pos_weight=一, seed=二漆) modelfit(xgb一, train, predictors) 輸結看習速率0.一理想決策樹數目一四0數字言能比較高取決於系統性能 注意:AUC(test)看測試集AUC值自系統運行些命令並現值數據並公提供值僅供參考值代碼部已經刪掉kf/ware/vc/" target="_blank" class="keylink">vcD四NCjwvYmxvY二txdW90ZT四NCjxoMSBpZD0="第二步-maxdepth--minweight-參數調優">第二步: max_depth min_weight 參數調優 我先兩參數調優終結影響首先我先范圍粗調參數再范圍微調 注意:節我進行高負荷柵格搜索(grid search)程約需要一5-三0鍾甚至更久具體取決於系統性能根據自系統性能選擇同值 param_test一 = { 'max_depth':range(三,一0,二), 'min_child_weight':range(一,陸,二) } gsearch一 = GridSearchCV(estimator = XGBClassifier(         learning_rate =0.一, n_estimators=一四0, max_depth=5, min_child_weight=一, gamma=0, subsample=0.吧,             colsample_bytree=0.吧, objective= 'binary:logistic', nthread=四,     scale_pos_weight=一, seed=二漆), param_grid = param_test一,     scoring='roc_auc',n_jobs=四,iid=False, cv=5) gsearch一.fit(train[predictors],train[target]) gsearch一.grid_scores_, gsearch一.best_params_,     gsearch一.best_score

⑤ 機器學習中GBDT和XGBoosts的區別是

首先來了解一下boosting思想,每次訓練單個弱分類器時,都將上一次分錯的數據權重提高一點再進行當前單個弱分類器的學習,這樣往後執行,訓練出來的單個弱分類器就會越在意那些容易分錯的點,最終通過加權求和的方式組合成一個最終的學習器,gradent boosting 是boosting的一種,每一次構建單個學習器時,是在之前建立的模型的損失函數的梯度下降方向, GB與Adaboost的區別在於:
AdaBoost是通過提升錯分數據點的權重來定位模型的不足。
Gradient Boosting是通過算梯度(gradient)來定位模型的不足。
主要思想是,每一次建立單個學習器時,是在之前建立的模型的損失函數的梯度下降方向,損失函數越大,說明模型越容易出錯,如果我們的模型能夠讓損失函數持續的下降,則說明我們的模型在不停的改進,而最好的方式就是讓損失函數在其梯度方向上下降。
GBDT=GB+DT(decision tree),即基分類器為決策樹時,這里的決策樹是回歸樹。
Xgboost 是GB演算法的高效實現,其中基分類器除了可以使CART也可以是線性分類器。
幾大區別:
傳統GBDT以CART作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯帝回歸或者線性回歸
傳統GBDT在優化時只用到了一階導數,而xgboost對代價函數進行了二階泰勒展開,用到了一階和二階導數
xgboost加入了正則項,防止過擬合
shrinkage,相當於學習率,在每完成一次迭代後,會乘上這個系數,削減每棵樹的影響
列抽樣,借鑒隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算。

⑥ 機器學習演算法中GBDT和XGBOOST的區別有哪些

機器學習演算法中GBDT和XGBOOST的區別有哪些?

在昨天阿里的面試中被問到了,我只簡單的說了下xgboost能自動利用cpu的多線程,而且適當改進了gradient boosting,加了剪枝,控制了模型的復雜程度

添加評論

分享

默認排序按時間排序

9 個回答

weponML/DM,https://github.com/wepe

252人贊同

xgboost相比傳統gbdt有何不同?xgboost為什麼快?xgboost如何支持並行?

看了陳天奇大神的文章和slides,略抒己見,沒有面面俱到,不恰當的地方歡迎討論:

傳統GBDT以CART作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)。

傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。

xgboost在代價函數里加入了正則項,用於控制模型的復雜度。正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。

Shrinkage(縮減),相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代後,會將葉子節點的權重乘上該系數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設置得小一點,然後迭代次數設置得大一點。(補充:傳統GBDT的實現也有學習速率)

列抽樣(column subsampling)。xgboost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。


對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。

xgboost工具支持並行。boosting不是一種串列的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數里包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對數據進行了排序,然後保存為block結構,後面的迭代中重復地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行。


可並行的近似直方圖演算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法枚舉所有可能的分割點。當數據無法一次載入內存或者在分布式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。


=============

回復@肖岩在評論里的問題,因為有些公式放正文比較好。評論里討論的問題的大意是 「xgboost代價函數里加入正則項,是否優於cart的剪枝」。其實陳天奇大神的slides裡面也是有提到的,我當一下搬運工。
決策樹的學習過程就是為了找出最優的決策樹,然而從函數空間里所有的決策樹中找出最優的決策樹是NP-C問題,所以常採用啟發式(Heuristic)的方法,如CART裡面的優化GINI指數、剪枝、控制樹的深度。這些啟發式方法的背後往往隱含了一個目標函數,這也是大部分人經常忽視掉的。xgboost的目標函數如下:

這個公式形式上跟ID3演算法(採用entropy計算增益) 、CART演算法(採用gini指數計算增益) 是一致的,都是用分裂後的某種值 減去 分裂前的某種值,從而得到增益。為了限制樹的生長,我們可以加入閾值,當增益大於閾值時才讓節點分裂,上式中的gamma即閾值,它是正則項里葉子節點數T的系數,所以xgboost在優化目標函數的同時相當於做了預剪枝。另外,上式中還有一個系數lambda,是正則項里leaf score的L2模平方的系數,對leaf score做了平滑,也起到了防止過擬合的作用,這個是傳統GBDT里不具備的特性。

⑦ xgboost結果auc過高

xgboost結果auc過高比最優演算法平均提高了6.75%。
XGBoost是提升方法中的一個可擴展的機器學習系統。XGBoost在許多機器學習和數據挖掘問題中產生了廣泛的影響。2015年發表在Kaggle競賽的博客的29個冠軍解決方案中,有17個是使用XGBoost解決的,其中有8個是僅使用了XGBoost方法去訓練模型,剩餘的是用XGBoost和其他模型相結合使用的。相比較而言,第二個受歡迎的方法是深度神經網路,有11個是使用該方法的。

閱讀全文

與xgboost模型蒸餾相關的資料

熱點內容
污水管道合槽施工 瀏覽:132
什麼產生氰化物廢水 瀏覽:605
凈水盒哪個牌子好 瀏覽:66
edi系統在企業中如何實現的 瀏覽:488
沁園凈水器的復合濾芯是什麼濾芯 瀏覽:680
上海思源水處理 瀏覽:523
不要排放廢水用英文怎麼講 瀏覽:147
網路污水渠 瀏覽:593
飲水機有啤酒味怎麼辦 瀏覽:825
石油後的污水 瀏覽:15
雪佛蘭汽濾芯卡子怎麼拆 瀏覽:673
XRV15T怎麼換空氣濾芯 瀏覽:404
污水系統操作說明書怎麼寫 瀏覽:829
崇州市污水排放怎麼樣 瀏覽:135
魚缸有了水垢怎麼辦 瀏覽:365
凈水壺底部出現綠色怎麼清洗 瀏覽:459
泌之源飲水機多少錢了 瀏覽:999
宜興高溫濾芯多少錢 瀏覽:337
聚乙烯樹脂回收多少錢一噸 瀏覽:481
從沈陽回白城用隔離嗎 瀏覽:642