【问题标题】:Setting a threshold in classifier output in Python在 Python 中的分类器输出中设置阈值
【发布时间】:2015-06-28 15:37:26
【问题描述】:

假设我在 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,我不想要它。如何仅保留具有特定阈值的标签?

【问题讨论】:

    标签: python classification


    【解决方案1】:

    据我所知,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)
    

    我不确定你想对机器学习概率低的数据做什么。此解决方案完全丢弃它。

    【讨论】:

    • 我想将分配给标签的概率低于 0.9 的数据视为异常值。
    • 好的,那么上面的解决方案就可以了,accepted_new_data 之外的所有内容都是异常值。
    • 使用 pandas.Dataframe 我应该导入哪个包?
    • import pandas。您的new_data 很可能已经是一个DataFrame。只需在 python 控制台上检查new_data.__class__。如果是DataFrame,可以去掉代码中的pandas.DataFrame
    • 在你的回答中,第 3 行给出了一个错误:ValueError: boolean index array should have 1 dimension
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2020-07-29
    • 2016-06-16
    • 2016-05-09
    • 1970-01-01
    • 2012-06-25
    • 2019-04-30
    • 2017-06-11
    相关资源
    最近更新 更多