class - Scikit-learn 默认类

标签 class scikit-learn classification svm naivebayes

我正在使用 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/

相关文章:

python - 关于继承和 super()

python - 带有分层的 Test_train_split

machine-learning - 根据精确率-召回率曲线计算真阳性的数量

python - 如何从描述符将属性请求委托(delegate)给 MRO 链

java - 在哪里验证字符串参数

python - 找不到真正的 FFmpeg 安装(ffprobe 自带)

python - Scikit 学习交叉验证拆分

machine-learning - 所选单词的词义消歧

c++ - 发送类实例时是否会调用覆盖,就好像它是没有覆盖的类型一样?

scikit-learn - 增量主成分分析