我正在使用lightgbm。我想知道如何获得类别标签(0或1)而不是分类的可能性。
我知道lightgbm提供了scikit-learn API。 API具有“ predict”功能以获取标签,并具有“ predict_proba”功能。我想直接获取标签而不使用scikit-learn API。
问题与如何基于概率获取标签相似。我们可以使用阈值。超过阈值的概率设置为1,小于阈值的概率设置为零。显然,阈值0.5是不合适的。
我使用以下代码找到最佳阈值,但一定有问题:
def find_optimal_cutoff(target, predicted):
fpr, tpr, threshold = roc_curve(target, predicted)
i = np.arange(len(tpr))
roc = pd.DataFrame({'tf': pd.Series(tpr - (1 - fpr), index=i), 'threshold': pd.Series(threshold, index=i)})
roc_t = roc.loc[(roc.tf - 0).abs().argsort()[:1]]
return list(roc_t['threshold'])[0]
def find_optimal_cutoff2(target, predicted):
fpr, tpr, threshold = roc_curve(target, predicted)
optimal_idx = np.argmax(tpr - fpr)
optimal_threshold = threshold[optimal_idx]
return optimal_threshold
thre1 = find_optimal_cutoff(self, target, predicted)
thre2 = find_optimal_cutoff2(self, target, predicted)
thre1
与thre2
有点不同。但这不是核心问题。如果lightgbm模型的参数不合适,我的实验将显示auc约为0.5。但是,thre1
是1,thre2
是2。
答案 0 :(得分:0)
您可以使用 np.where(predictions_lgbm_prob> 0.5,1,0)