我有一个关于xgboost分类器和sklearn API的问题。它似乎有一个参数来告诉应该返回多少概率为True,但我找不到它。
通常,xgb.predict
将返回布尔值,而xgb.predict_proba
将返回区间[0,1]内的概率。我认为结果是相关的。应该有一个概率阈值来决定样本的类别。
dtrain, dtest = train_test_split(data, test_size=0.1, random_state=22)
param_dict={'base_score': 0.5,
'booster': 'gbtree',
'colsample_bylevel': 1,
'colsample_bytree': 1,
'gamma': 0,
'learning_rate': 0.1,
'max_delta_step': 0,
'max_depth': 4,
'min_child_weight': 6,
'missing': None,
'n_estimators': 1000,
'objective': 'binary:logistic',
'reg_alpha': 0,
'reg_lambda': 1,
'scale_pos_weight': 1,
'subsample': 1}
xgb = XGBClassifier(**param_dict,n_jobs=2)
xgb.fit(dtrain[features], dtrain['target'])
result_boolean = xgb.predict(dtest[features])
print(np.sum(result_boolean))
Output:936
result_proba = xgb.predict_proba(dtest[features])
result_boolean2= (result_proba[:,1] > 0.5)
print(np.sum(result_boolean2))
Output:936
看起来默认概率阈值为0.5,因此结果数组具有相同的True量。但我找不到在代码中调整它的位置。 predict(data, output_margin=False, ntree_limit=None, validate_features=True)
另外,我测试了base_score
,但它没有影响结果。
我想改变概率阈值的主要原因是我想通过XGBClassifier
方法测试具有不同概率阈值的GridSearchCV
。 xgb.predict_proba
似乎无法合并到GridSearchCV
。如何改变XGBClassifier
的概率阈值?
当您使用ROC AUC(ROC =接收器操作特性,AUC =曲线下面积)作为评分函数时,gridsearch将使用predict_proba()完成。所选择的分类器超参数将是在所有可能的决策阈值上具有最佳整体性能的参数。
GridSearchCV(scoring='roc_auc', ....)
然后,您可以绘制ROC曲线,以确定决策阈值,从而为您提供精确与召回/真阳性与假阴性之间的平衡。