Scikit学习默认类

问题描述 投票:1回答:2

我正在使用scikit-learn对一些文本进行分类,我有10个类,并且我正在使用svm.SVC(kernel='linear',probability=True,class_weight='balanced')MultinomialNB()tree.DecisionTreeClassifier()进行分类。

树分类器做得很好,三个分类器的准确性在80-90%之间(对我的应用程序来说足够了。)>

问题是,某些文本不属于10个类别中的任何一个,我的意思是应该有一个“ Others”或“ Not Class found”类别,但是我找不到解决方法,我有尝试添加该类并使用随机文本训练分类器,但结果效果不佳(准确度为50-60%)。

我正在尝试使用朴素贝叶斯为我提供的clf.predict_proba函数并定义阈值的概率,但这有点“过度拟合”了分类器。

有人解决了这样的问题吗?预先感谢。

注意:

我使用了1000个文本来训练分类器

我正在使用scikit-learn对一些文本进行分类,我有10个类,并且正在使用svm.SVC(kernel ='linear',probability = True,class_weight ='balanced'),MultinomialNB()和树。 DecisionTreeClassifier()到...

class scikit-learn classification svm naivebayes
2个回答
1
投票

[遇到类似问题时,我在训练集中添加了空白数据示例,并标有'unknown'类。虽然某些模型的空白功能不能很好地执行,但某些模型却可以(Bernoulli Naive Bayes,随机森林...)。然后(通过使用必要的空行数)确保对未知类的调用为1。您训练有素的矢量化器将不会识别新文本中的任何输入,而这些输入与训练数据没有什么共同之处(所有功能都为0),然后您的模型会将它们分类为未知。使用熊猫:


0
投票

您可以对输出概率设置阈值,以确定未知/“域外”。只要您仅使用训练(或验证)集来确定正确的阈值,并且仅在测试集上对其进行评估-我不会看到过拟合的问题。阈值可以视为决策函数的超参数。它可以使用全局阈值,也可以使用每个类别的阈值。

© www.soinside.com 2019 - 2024. All rights reserved.