在 Python 中设置分类器输出的阈值

Setting a threshold in classifier output in Python

假设我在 Python 中有一个训练有素的 SVM 分类器,其标志 "Probability=True" 为:

classifier = SVC(C = 1000000, gamma = 10, probability=True) 
classifier.fit(my_data, the_labels)

当我对新数据进行分类时,我只想保留概率高于阈值(假设为 0.90)的已分类新数据。我怎样才能做到这一点?直到现在我正在做这样的事情,但我被卡住了:

labels_predicted = classifier.predict(new_data)
probabilities = classifier.predict_proba(new_data)

第一个命令 returns 实际标签,第二个 returns 其标签的概率。因此,对于每个数据点,我都有它的最大似然标签和属于所有标签的所有相关概率。但最大似然标签可能是 0.4,我不想要它。如何只保留具有特定阈值的标签?

据我所知,SVC 本身不允许以您想要的方式对概率进行阈值处理。在构建 labels_predictedprobabilities.

之后,您可以进行第二次索引并获得接受的标签
thresh = 0.9
accepted_probabilities_idx = probabilities.max(axis=1) > thresh
accepted_labels_predicted = labels_predicted[accepted_probabilities_idx]
accepted_new_data = pandas.DataFrame(new_data, index=accepted_probabilities_idx)

我不确定您想如何处理 ML 概率较低的数据。此解决方案将其完全丢弃。