xgboost算法 c语言,xgboost与sklearn的接口
xgb使用sklearn接口(推薦)
XGBClassifier
from xgboost.sklearn importXGBClassifier
clf=XGBClassifier(
silent=0 ,#設(shè)置成1則沒(méi)有運(yùn)行信息輸出,最好是設(shè)置為0.是否在運(yùn)行升級(jí)時(shí)打印消息。#nthread=4,# cpu 線程數(shù) 默認(rèn)最大
learning_rate= 0.3, #如同學(xué)習(xí)率
min_child_weight=1,#這個(gè)參數(shù)默認(rèn)是 1,是每個(gè)葉子里面 h 的和至少是多少,對(duì)正負(fù)樣本不均衡時(shí)的 0-1 分類而言#,假設(shè) h 在 0.01 附近,min_child_weight 為 1 意味著葉子節(jié)點(diǎn)中最少需要包含 100 個(gè)樣本。#這個(gè)參數(shù)非常影響結(jié)果,控制葉子節(jié)點(diǎn)中二階導(dǎo)的和的最小值,該參數(shù)值越小,越容易 overfitting。
max_depth=6, #構(gòu)建樹(shù)的深度,越大越容易過(guò)擬合
gamma=0, #樹(shù)的葉子節(jié)點(diǎn)上作進(jìn)一步分區(qū)所需的最小損失減少,越大越保守,一般0.1、0.2這樣子。
subsample=1, #隨機(jī)采樣訓(xùn)練樣本 訓(xùn)練實(shí)例的子采樣比
max_delta_step=0,#最大增量步長(zhǎng),我們?cè)试S每個(gè)樹(shù)的權(quán)重估計(jì)。
colsample_bytree=1, #生成樹(shù)時(shí)進(jìn)行的列采樣
reg_lambda=1, #控制模型復(fù)雜度的權(quán)重值的L2正則化項(xiàng)參數(shù),參數(shù)越大,模型越不容易過(guò)擬合。#reg_alpha=0, # L1 正則項(xiàng)參數(shù)#scale_pos_weight=1, #如果取值大于0的話,在類別樣本不平衡的情況下有助于快速收斂。平衡正負(fù)權(quán)重#objective= 'multi:softmax', #多分類的問(wèn)題 指定學(xué)習(xí)任務(wù)和相應(yīng)的學(xué)習(xí)目標(biāo)#num_class=10, # 類別數(shù),多分類與 multisoftmax 并用
n_estimators=100, #樹(shù)的個(gè)數(shù)
seed=1000 #隨機(jī)種子#eval_metric= 'auc'
)
clf.fit(X_train,y_train,eval_metric='auc')
5.3 基于Scikit-learn接口的分類
#==============基于Scikit-learn接口的分類================
from sklearn.datasets importload_irisimportxgboost as xgbfrom xgboost importplot_importancefrom matplotlib importpyplot as pltfrom sklearn.model_selection importtrain_test_splitfrom sklearn.metrics importaccuracy_score#加載樣本數(shù)據(jù)集
iris =load_iris()
X,y=iris.data,iris.target
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.2, random_state=1234565) #數(shù)據(jù)集分割
#訓(xùn)練模型
model = xgb.XGBClassifier(max_depth=5, learning_rate=0.1, n_estimators=160, silent=True, objective='multi:softmax')
model.fit(X_train, y_train)#對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
y_pred =model.predict(X_test)#計(jì)算準(zhǔn)確率
accuracy =accuracy_score(y_test,y_pred)print("accuarcy: %.2f%%" % (accuracy*100.0))#顯示重要特征
plot_importance(model)
plt.show()
輸出結(jié)果:Accuracy: 96.67 %
基于Scikit-learn接口的回歸
#================基于Scikit-learn接口的回歸================
importxgboost as xgbfrom xgboost importplot_importancefrom matplotlib importpyplot as pltfrom sklearn.model_selection importtrain_test_splitfrom sklearn.datasets importload_boston
boston=load_boston()
X,y=boston.data,boston.target#XGBoost訓(xùn)練過(guò)程
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model= xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=True, objective='reg:gamma')
model.fit(X_train, y_train)#對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
ans =model.predict(X_test)#顯示重要特征
plot_importance(model)
plt.show()
參數(shù)調(diào)優(yōu)的一般方法
我們會(huì)使用和GBM中相似的方法。需要進(jìn)行如下步驟:
1. 選擇較高的學(xué)習(xí)速率(learning rate)。一般情況下,學(xué)習(xí)速率的值為0.1。但是,對(duì)于不同的問(wèn)題,理想的學(xué)習(xí)速率有時(shí)候會(huì)在0.05到0.3之間波動(dòng)。選擇對(duì)應(yīng)于此學(xué)習(xí)速率的理想決策樹(shù)數(shù)量。XGBoost有一個(gè)很有用的函數(shù)“cv”,這個(gè)函數(shù)可以在每一次迭代中使用交叉驗(yàn)證,并返回理想的決策樹(shù)數(shù)量。
2. 對(duì)于給定的學(xué)習(xí)速率和決策樹(shù)數(shù)量,進(jìn)行決策樹(shù)特定參數(shù)調(diào)優(yōu)(max_depth, min_child_weight, gamma, subsample, colsample_bytree)。在確定一棵樹(shù)的過(guò)程中,我們可以選擇不同的參數(shù),待會(huì)兒我會(huì)舉例說(shuō)明。
3. xgboost的正則化參數(shù)的調(diào)優(yōu)。(lambda, alpha)。這些參數(shù)可以降低模型的復(fù)雜度,從而提高模型的表現(xiàn)。
4. 降低學(xué)習(xí)速率,確定理想?yún)?shù)。
咱們一起詳細(xì)地一步步進(jìn)行這些操作。
第一步:確定學(xué)習(xí)速率和tree_based 參數(shù)調(diào)優(yōu)的估計(jì)器數(shù)目。
為了確定boosting 參數(shù),我們要先給其它參數(shù)一個(gè)初始值。咱們先按如下方法取值:
1、max_depth = 5 :這個(gè)參數(shù)的取值最好在3-10之間。我選的起始值為5,但是你也可以選擇其它的值。起始值在4-6之間都是不錯(cuò)的選擇。
2、min_child_weight = 1:在這里選了一個(gè)比較小的值,因?yàn)檫@是一個(gè)極不平衡的分類問(wèn)題。因此,某些葉子節(jié)點(diǎn)下的值會(huì)比較小。
3、gamma = 0: 起始值也可以選其它比較小的值,在0.1到0.2之間就可以。這個(gè)參數(shù)后繼也是要調(diào)整的。
4、subsample,colsample_bytree = 0.8: 這個(gè)是最常見(jiàn)的初始值了。典型值的范圍在0.5-0.9之間。
5、scale_pos_weight = 1: 這個(gè)值是因?yàn)轭悇e十分不平衡。
注意哦,上面這些參數(shù)的值只是一個(gè)初始的估計(jì)值,后繼需要調(diào)優(yōu)。這里把學(xué)習(xí)速率就設(shè)成默認(rèn)的0.1。然后用xgboost中的cv函數(shù)來(lái)確定最佳的決策樹(shù)數(shù)量。
第二步: max_depth 和 min_weight 參數(shù)調(diào)優(yōu)
我們先對(duì)這兩個(gè)參數(shù)調(diào)優(yōu),是因?yàn)樗鼈儗?duì)最終結(jié)果有很大的影響。首先,我們先大范圍地粗調(diào)參數(shù),然后再小范圍地微調(diào)。
注意:在這一節(jié)我會(huì)進(jìn)行高負(fù)荷的柵格搜索(grid search),這個(gè)過(guò)程大約需要15-30分鐘甚至更久,具體取決于你系統(tǒng)的性能。你也可以根據(jù)自己系統(tǒng)的性能選擇不同的值。
第三步:gamma參數(shù)調(diào)優(yōu)
第四步:調(diào)整subsample 和 colsample_bytree 參數(shù)
第五步:正則化參數(shù)調(diào)優(yōu)。
第6步:降低學(xué)習(xí)速率
最后,我們使用較低的學(xué)習(xí)速率,以及使用更多的決策樹(shù)。我們可以用XGBoost中的CV函數(shù)來(lái)進(jìn)行這一步工作。
總結(jié)
以上是生活随笔為你收集整理的xgboost算法 c语言,xgboost与sklearn的接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言图像浏览器,单片机采用浏览器进行监
- 下一篇: xml解析 只有节点属性 android