我计划使用Python Scikit进行一些文本分类,并计划使用TfidfVectorizer和MultinomialNB。
但我意识到MultinomialNB将始终将我的样本预测为现有(已知)类别。
例如,如果我有:
category A: trained with sample "this is green"
category B: trained with sample "this is blue"
category C: trained with sample "this is red"
我尝试预测:"this is yellow"
它会给我category A
(或任何其他,因为在这种情况下所有类别的概率都相同)。
我的问题是:是否有一个分类器会给我"未知" (或者没有,或者错误,或者错误)上面的测试用例?
我想知道我的测试用例何时无法用给定的训练集预测。
我想我可以检查my_classifier.predict_proba(X_test))
是否返回一个具有所有相等或接近值的数组(在此示例中为[[ 0.33333333 0.33333333 0.33333333]]
)。
实际上,我必须检查这些值是否接近其默认值,因为每个类别的概率可能不同:)
所以...任何更好的方法或......是否有一个我可以使用的置信度阈值的分类器?
答案 0 :(得分:1)
如果您有一些未标记的训练数据,您可以添加包含所有未标记数据的垃圾箱类。在您的示例中,此类将具有解释"而不是绿色,蓝色或红色"中的一种颜色。 http://arxiv.org/abs/1511.03719
中详细介绍了这种方法答案 1 :(得分:0)
你可以考虑做novelty detection。我会查看该链接和相关的example。在这个例子中,这个想法是使用:
单类SVM是一种无监督算法,可以学习新奇检测的决策函数:将新数据分类为与训练集相似或不同。
(重点是我的。)我不知道你的例子中的少量数据会如何表现,我猜错了#34;但我相信{ {3}}就是你在这里寻找的东西。