gpt4 book ai didi

python-3.x - 使用Scikit-Learn API时如何在XGBoost分类器中调整概率阈值

转载 作者:行者123 更新时间:2023-12-02 04:24:51 24 4
gpt4 key购买 nike

我对使用sklearn API的xgboost分类器有疑问。看来它有一个参数可以告诉您应返回多少概率为True,但是我找不到它。

通常,xgb.predict将返回 bool 值,而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方法测试具有不同概率阈值的 GridSearchCVxgb.predict_proba似乎无法合并到 GridSearchCV中。如何更改 XGBClassifier中的概率阈值?

最佳答案

当您使用ROC AUC(ROC =接收器工作特性,AUC =曲线下面积)作为评分功能时,将使用predict_proba()完成网格搜索。所选分类器超参数将是在所有可能的决策阈值上具有最佳整体性能的分类器。
GridSearchCV(scoring='roc_auc', ....)
然后,您可以绘制ROC曲线,以便确定决策阈值,该阈值可为您提供所需的精度与召回率/真阳性率与假阴性率之间的平衡。

enter image description here

scikit-learn documentation on ROC中的更多信息

关于python-3.x - 使用Scikit-Learn API时如何在XGBoost分类器中调整概率阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55617153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com