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

时间:2015-04-21 12:55:50

标签: python classification

假设我在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)

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

1 个答案:

答案 0 :(得分:2)

据我所知,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-probability低的数据做什么。这个解决方案完全抛弃它。