带有lightgbm的python,预测类标签(0或1)而不是概率

时间:2019-09-11 08:24:18

标签: python-3.x lightgbm

我正在使用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)

thre1thre2有点不同。但这不是核心问题。如果lightgbm模型的参数不合适,我的实验将显示auc约为0.5。但是,thre1是1,thre2是2。

1 个答案:

答案 0 :(得分:0)

您可以使用 np.where(predictions_lgbm_prob> 0.5,1,0)