XGboost-使用R和Python时,不同的AUC得分

时间:2018-07-23 07:59:25

标签: python r xgboost auc

我在R中有一个项目,在R中使用XGboost并获得了74%的AUC。 我需要将项目转移到python,我使用了相同的数据框:像在R中使用的那样训练和测试。 我使用的XGboost(xgboost的XGBClassifier)具有与R中使用的相同的超参数,并且AUC为62%。 我得到的实现与R版本不完全相同,种子也不相同,但是两者之间的差异太大以至于不是巧合。

我唯一能想到的是,也许实现无法处理我拥有的缺失值(但是XGboost算法应该使用它们而不是忽略它们)。

我在做什么错?关于如何解决该问题的任何想法?如何检查算法是否忽略缺失值?

我的代码-python:

.....

'params': {
        'min_child_weight': [1],
        'learning_rate': [0.05],
        'n_estimators': [300],
        'gamma': [0],
        'subsample': [1],
        'colsample_bytree': [0.8],
        'max_depth': [15],
        'booster': ['gbtree'],
        'silent': [True],
        'missing': [np.nan],
        'max_delta_step': [10],
        'colsample_bylevel': [0.8],
        'scale_pos_weight':[1],
        'reg_alpha': [0],
        'reg_lambda': [0.5],

......

model = XGBClassifier()

skf = StratifiedKFold(n_splits=folds, shuffle=True, random_state=11)

gridSearch = GridSearchCV(model, param_grid =params, scoring='roc_auc', n_jobs=1,
cv=skf.split(xTrain, yTrain), verbose=3)

gridSearch.fit(xTrain, yTrain[target])
yPred = gridSearch.predict(xTest)

predictions = [round(value) for value in yPred]

# evaluate predictions
fpr, tpr, thresholds = metrics.roc_curve(yTest, predictions, pos_label=1)
print(metrics.auc(fpr, tpr))

我的代码-R:

Grid <- expand.grid(nrounds = 300,
                    eta = 0.05,
                    max_depth = 15,
                    gamma = 0,
                    colsample_bytree=0.8,
                    min_child_weight=1,
                    subsample=1)



set.seed(15)


ctrl2 <- trainControl(method = "cv",
                      number = 10,
                      returnData = TRUE,
                      savePredictions = "all",
                      classProbs = TRUE,
                      summaryFunction = twoClassSummary,
                      selectionFunction = "best",
                      allowParallel = TRUE)

classifier <- train(x = smote_train[,-1],y = smote_train[,1], method = 'xgbTree',tuneGrid = Grid,trControl = ctrl2,metric = "ROC")


prediction <- predict(classifier, newdata= test_set[,-1],'prob')



library(classifierplots)

a <- test_set

a$y[a$readmmited=="yes"] <- 1
a$y[a$readmmited=="no"] <- 0
classifierplots(a$y, prediction$yes)

0 个答案:

没有答案