我正在使用 scikit-learn 对一些文本进行分类,我有 10 个类,并且正在使用 svm.SVC(kernel='linear',probability=True,class_weight='balanced')
、MultinomialNB()
和 tree.DecisionTreeClassifier()
进行分类。
树分类器做得很好,这三个分类器的准确率在 80-90% 之间(这对于我的应用程序来说已经足够了)。
问题是有一些文本不属于 10 个类中的任何一个,我的意思是应该有一个“其他”或“未找到类”类,但我找不到方法来做到这一点,我曾尝试添加该类并使用随机文本训练分类器,但结果不太好(准确度为 50-60%)。
我正在尝试使用朴素贝叶斯为我提供的 clf.predict_proba 函数的概率并定义阈值,但这有点“过度拟合”分类器。
有人解决过这样的问题吗?提前致谢。
注释:
我使用了 1000 个文本来训练分类器
最佳答案
当遇到类似的问题时,我在训练集中添加了空数据示例,并标记为“未知”类。虽然有些模型不能很好地执行空特征,但有些模型却可以(伯努利朴素贝叶斯、随机森林......)。 然后确保(通过使用必要数量的空行)未知类的召回率为 1。 您经过训练的矢量化器将无法识别与训练数据没有任何共同点的新文本中的任何输入(所有特征均为 0),然后您的模型会将它们分类为未知。 使用 Pandas :
emptyline={ 'Text':'', 'label': 'Unknown'}
for i in range(300):
df=df.append(emptyline, ignore_index=True)
关于class - Scikit-learn 默认类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108905/