xgboost使用步驟

1.

user_index, training_data, label = make_train_set(train_start_date, train_end_date, test_start_date, test_end_date)
X_train, X_test, y_train, y_test = train_test_split(training_data.values, label.values, test_size=0.2, random_state=0)
dtrain=xgb.DMatrix(X_train, label=y_train)
dtest=xgb.DMatrix(X_test, label=y_test)
param = {'learning_rate' : 0.1, 'n_estimators': 1000, 'max_depth': 3,
    'min_child_weight': 5, 'gamma': 0, 'subsample': 1.0, 'colsample_bytree': 0.8,
    'scale_pos_weight': 1, 'eta': 0.05, 'silent': 0, 'objective': 'binary:logistic'}
num_round = 283
param['nthread'] = 4
#param['eval_metric'] = "auc"
param['eval_metric']='logloss'
plst = param.items()
#plst+= [('eval_metric', 'logloss')]
evallist = [(dtest, 'eval'), (dtrain, 'train')]
bst=xgb.train(plst, dtrain, num_round, evallist)
sub_user_index, sub_trainning_data = make_test_set(sub_start_date, sub_end_date,)
sub_trainning_data = xgb.DMatrix(sub_trainning_data.values)
y = bst.predict(sub_trainning_data)




2.

train = pd.read_csv("data/train.csv")
tests = pd.read_csv("data/test.csv")

#用sklearn.cross_validation進行訓練數據集劃分,這裏訓練集和交叉驗證集比例爲7:3,可以自己根據需要設置
train_xy,val = train_test_split(train, test_size = 0.3,random_state=1)

y = train_xy.label
X = train_xy.drop(['label'],axis=1)
val_y = val.label
val_X = val.drop(['label'],axis=1)

#xgb矩陣賦值
xgb_val = xgb.DMatrix(val_X,label=val_y)
xgb_train = xgb.DMatrix(X, label=y)
xgb_test = xgb.DMatrix(tests)

params={
'booster':'gbtree',
'objective': 'multi:softmax', #多分類的問題
'num_class':10, # 類別數,與 multisoftmax 並用
'gamma':0.1,  # 用於控制是否後剪枝的參數,越大越保守,一般0.1、0.2這樣子。
'max_depth':12, # 構建樹的深度,越大越容易過擬合
'lambda':2,  # 控制模型複雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。
'subsample':0.7, # 隨機採樣訓練樣本
'colsample_bytree':0.7, # 生成樹時進行的列採樣
'min_child_weight':3,
# 這個參數默認是 1,是每個葉子裏面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言
#,假設 h 在 0.01 附近,min_child_weight 爲 1 意味着葉子節點中最少需要包含 100 個樣本。
#這個參數非常影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易 overfitting。
'silent':0 ,#設置成1則沒有運行信息輸出,最好是設置爲0.
'eta': 0.007, # 如同學習率
'seed':1000,
'nthread':7,# cpu 線程數
#'eval_metric': 'auc'
}
plst = list(params.items())
num_rounds = 50 # 迭代次數
watchlist = [(xgb_train, 'train'),(xgb_val, 'val')]

#訓練模型並保存
# early_stopping_rounds 當設置的迭代次數較大時,early_stopping_rounds 可在一定的迭代次數內準確率沒有提升就停止訓練
model = xgb.train(plst, xgb_train, num_rounds, watchlist,early_stopping_rounds=20)
model.save_model('data/xgb.model') # 用於存儲訓練出的模型
print ("best best_ntree_limit",model.best_ntree_limit)

preds = model.predict(xgb_test,ntree_limit=model.best_ntree_limit)
np.savetxt('xgb_submission.csv',np.c_[range(1,len(tests)+1),preds],delimiter=',',header='ImageId,Label',comments='',fmt='%d')



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章