import xgboost as xgb
start_time = time.time()
offline = 0
online = 0
params = {'booster': 'gbtree',
'objective': 'rank:pairwise',
'eval_metric': 'auc',
'gamma': 0.1,
'min_child_weight': 1.1,
'max_depth': 7,
'lambda': 10,
'subsample': 0.7,
'colsample_bytree': 0.7,
'colsample_bylevel': 0.7,
'eta': 0.01,
'tree_method': 'exact',
'seed': 1000,
'nthread': 12
}
params1 = {
'booster': 'gbtree',
'objective': 'binary:logistic',
'scale_pos_weight': 1 / 7.5,
# 7183正樣本
# 55596條總樣本
# 差不多1:7.7這樣子
'gamma': 0.2, # 用於控制是否後剪枝的參數,越大越保守,一般0.1、0.2這樣子。
'max_depth': 8, # 構建樹的深度,越大越容易過擬合
'lambda': 3, # 控制模型複雜度的權重值的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.03, # 如同學習率
'seed': 1000,
'nthread': 12, # cpu 線程數
'eval_metric': 'auc'
}
train = tabel
plst = list(params.items())
num_rounds = 5000 # 迭代次數
y = train['標籤']
X = train.drop(['標籤', '用戶標識'], axis=1)
# X=train[feature_list]
xgb_train = xgb.DMatrix(X, label=y)
watchlist = [(xgb_train, 'train'),(xgb_train, 'val')]
print("跑到這裏了xgb.train")
# training model
# early_stopping_rounds 當設置的迭代次數較大時,early_stopping_rounds 可在一定的迭代次數內準確率沒有提升就停止訓練
model = xgb.train(plst, xgb_train, num_boost_round=7000, evals=watchlist, early_stopping_rounds=500)
print("跑到這裏了save_model")
model.save_model('20170201_B.model') # 用於存儲訓練出的模型