XGBClassifier上的交叉验证,用于python中的多类分类

时间:2016-06-15 20:54:23

标签: python classification cross-validation xgboost

我尝试使用以下从http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/改编的代码在XGBC分类器上执行多类别分类问题的交叉验证

9352BE

其中import numpy as np import pandas as pd import xgboost as xgb from xgboost.sklearn import XGBClassifier from sklearn.preprocessing import LabelEncoder from sklearn import cross_validation, metrics from sklearn.grid_search import GridSearchCV def modelFit(alg, X, y, useTrainCV=True, cvFolds=5, early_stopping_rounds=50): if useTrainCV: xgbParams = alg.get_xgb_params() xgTrain = xgb.DMatrix(X, label=y) cvresult = xgb.cv(xgbParams, xgTrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cvFolds, stratified=True, metrics={'mlogloss'}, early_stopping_rounds=early_stopping_rounds, seed=0, callbacks=[xgb.callback.print_evaluation(show_stdv=False), xgb.callback.early_stop(3)]) print cvresult alg.set_params(n_estimators=cvresult.shape[0]) # Fit the algorithm alg.fit(X, y, eval_metric='mlogloss') # Predict dtrainPredictions = alg.predict(X) dtrainPredProb = alg.predict_proba(X) # Print model report: print "\nModel Report" print "Classification report: \n" print(classification_report(y_val, y_val_pred)) print "Accuracy : %.4g" % metrics.accuracy_score(y, dtrainPredictions) print "Log Loss Score (Train): %f" % metrics.log_loss(y, dtrainPredProb) feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False) feat_imp.plot(kind='bar', title='Feature Importances') plt.ylabel('Feature Importance Score') # 1) Read training set print('>> Read training set') train = pd.read_csv(trainFile) # 2) Extract target attribute and convert to numeric print('>> Preprocessing') y_train = train['OutcomeType'].values le_y = LabelEncoder() y_train = le_y.fit_transform(y_train) train.drop('OutcomeType', axis=1, inplace=True) # 4) Extract features and target from training set X_train = train.values # 5) First classifier xgb = XGBClassifier(learning_rate =0.1, n_estimators=1000, max_depth=5, min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8, scale_pos_weight=1, objective='multi:softprob', seed=27) modelFit(xgb, X_train, y_train) 包含0到4之间的标签。但是,当我运行此代码时,我从y_train函数xgb.cv收到以下错误。在XGBoost文档中,我读到在多类情况下,xgb从目标向量中的标签中推断出类的数量,因此我不了解发生了什么。

1 个答案:

答案 0 :(得分:3)

您必须将参数'num_class'添加到xgb_param字典中。参数说明和上面提供的链接中的注释中也提到了这一点。