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')