XGBoost學習筆記(三)

2021-10-05 08:36:26 字數 3219 閱讀 2040

在xgb中,控制複雜度的引數γ

\gamma

γ,正則化引數α,λ

\alpha,\lambda

α,λ學習速率η

\eta

η都可以控制過擬合,但並非主要用於解決過擬合問題。

當得到乙個資料集之後,通常先通過網格搜尋找出合適的n_estimatorseta的組合,然後使用gamma或者max_depth觀察模型的擬合情況,最後決定是否剪枝

可以通過以下**對xgb進行調參。

param1 =

num_round =

200time0 = time(

)cvresult1 = xgb.cv(param1, dfull, num_round)

print

(datetime.datetime.fromtimestamp(time(

)-time0)

.strftime(

"%m:%s:%f"))

fig,ax = plt.subplots(

1,figsize=(15

,8))

ax.set_ylim(top=5)

ax.grid(

)ax.plot(

range(1

,201

),cvresult1.iloc[:,

0],c="red"

,label=

"train,original"

)ax.plot(

range(1

,201

),cvresult1.iloc[:,

2],c="orange"

,label=

"test,original"

)param2 =

param3 =

time0 = time(

)cvresult2 = xgb.cv(param2, dfull, num_round)

print

(datetime.datetime.fromtimestamp(time(

)-time0)

.strftime(

"%m:%s:%f"))

time0 = time(

)cvresult3 = xgb.cv(param3, dfull, num_round)

print

(datetime.datetime.fromtimestamp(time(

)-time0)

.strftime(

"%m:%s:%f"))

ax.plot(

range(1

,201

),cvresult2.iloc[:,

0],c="green"

,label=

"train,last"

)ax.plot(

range(1

,201

),cvresult2.iloc[:,

2],c="blue"

,label=

"test,last"

)ax.plot(

range(1

,201

),cvresult3.iloc[:,

0],c="gray"

,label=

"train,this"

)ax.plot(

range(1

,201

),cvresult3.iloc[:,

2],c="pink"

,label=

"test,this"

)ax.legend(fontsize=

"xx-large"

)plt.show(

)

使用pickle儲存和呼叫模型
import pickle

dtrain = xgb.dmatrix(xtrain,ytrain)

#設定引數,對模型進行訓練

param =

num_round =

180bst = xgb.train(param, dtrain, num_round)

首先完成模型的訓練,然後進行模型的儲存

#儲存模型

pickle.dump(bst,

open

("xgboostonboston.dat"

,"wb"))

#注意,open中我們往往使用w或者r作為讀取的模式,但其實w與r只能用於文字檔案 - txt

#當我們希望匯入的不是文字檔案,而是模型本身的時候,我們使用"wb"和"rb"作為讀取的模式

#其中wb表示以二進位制寫入,rb表示以二進位制讀入,使用open進行儲存的這個檔案中是乙個可以進行讀取或者呼叫的模型

可以檢視模型儲存的位址

#看看模型被儲存到了**?

import sys

sys.path

執行結果的第一行是當前執行的資料夾

然後可以在下次開啟檔案時開啟模型:

#匯入模型

loaded_model = pickle.load(

open

("xgboostonboston.dat"

,"rb"))

print

("loaded model from: xgboostonboston.dat"

)

使用joblib儲存和呼叫模型

使用方法與pickle類似,

import joblib

#同樣可以看看模型被儲存到了**

joblib.dump(bst,

"xgboost-boston.dat"

)

注意這裡不用使用open開啟檔案。

loaded_model = joblib.load(

"xgboost-boston.dat"

)

同樣可以匯入模型。

可以使用scale_pos_weight引數對正負樣本的比例進行控制。

XGBoost學習筆記(3)

英文adaptive boosting 自適應增強 的縮寫,它的自適應在於 前乙個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下乙個基本分類器,同時,在每一輪加入乙個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數。演算法流程 初始化訓練資料的權值分布,如...

XGBoost演算法 學習筆記

學習背景 最近想要學習和實現一下xgboost演算法,原因是最近對專案有些想法,準備做個回歸 作為當下比較火的回歸 演算法,準備直接套用試試效果。一 基礎知識 1 泰勒公式 泰勒公式是乙個用函式在某點的資訊描述其附近取值的公式。具有區域性有效性。基本形式如下 由以上的基本形式可知泰勒公式的迭代形式為...

XGBoost 學習過程

最近開始入手學習python處理資料,在看 的時候發現了xgboost,並且作為第三方庫在pycharm中無法匯入,很是一籌莫展,那就從部落格上搜尋開始入手,首先了解這個庫到底是完成了什麼事情呢。下面開始據此對xgboost的原理做簡單的介紹 xgboost 1 是2014年2月誕生的專注於梯度提公...