【发布时间】:2019-09-01 04:24:48
【问题描述】:
我有一个关于使用 sklearn API 的 xgboost 分类器的问题。它似乎有一个参数来告诉应该返回多少概率为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,但不影响结果。
我想更改概率阈值的主要原因是我想通过GridSearchCV 方法以不同的概率阈值测试XGBClassifier。 xgb.predict_proba 似乎无法合并到 GridSearchCV 中。如何更改XGBClassifier中的概率阈值?
【问题讨论】:
-
predict_proba() 和 GridSearchCV 到底有什么问题?
-
对不起,我发现'不能合并到GridSearchCV'是相当误导的。例如,如果我写
grid = GridSearchCV(xb, param_grid, scoring='precision',fit_params=fit_params,cv=4)grid.fit(X=dtrain[features],y=dtrain[target])然后我会根据精度得到最好的参数当概率阈值为 0.5 时。但我想将概率阈值更改为 0.7 或 0.8。
标签: python-3.x scikit-learn xgboost