具有不平衡类的朴素贝叶斯

机器算法验证 分类 朴素贝叶斯 自然语言
2022-03-22 09:44:58

作为大学项目的一部分,应该训练一个朴素贝叶斯分类器来对三个不同类别的问题和答案进行分类,这个任务应该很容易,因为这三个类之间确实不同。

数据集

该数据集是来自不同领域(家具和 C++ 课程)的问题和答案的混合体,它们使用不同的语言(意大利语和英语),因此乍一看应该很容易对它们进行分类。

数据集的唯一问题是它确实不平衡,例如 C++ 课程 2700 训练实例。家具英语200培训实例。家具意大利60培训实例。

特征提取

该功能只是 n-gram 计数,我不会删除停用词,因为我有 2 种不同的语言可供使用。

使用 TF-IDF 特征和词干标记,我得到了较低的结果。

NB算法

我自己实现了朴素贝叶斯,但它获得了与 scikit learn one 相同的结果。我已经用之前的每堂课训练过它,并使用 alpha=.5 进行了平滑处理

结果

最后的结果在某种意义上是好的

              precision    recall  f1-score   support

      0           0.92      1.00      0.96       318
      1           1.00      0.50      0.67        44
      2           1.00      0.33      0.50         6

avg / total       0.93      0.93      0.92       368

但唯一的缺点是 1 和 2 类的召回率很低,原因很简单(我们有不平衡的类)。

有一种方法可以实际获得更低但更平衡的结果,但受限于使用用朴素贝叶斯训练的单一模型?

干杯


编辑: 我需要获得更平衡的结果是因为我应该将此分类器用作问答任务的一部分。

2个回答

解决朴素贝叶斯文本分类器的不良假设建议对朴素贝叶斯进行一些修改,以纠正有偏差的样本集。

还可以看看这个(和类似的)关于类不平衡、不平衡类标签等的简历帖子。

我知道答案已被接受。我认为以下内容可以帮助未来的读者。尝试实现它来处理不平衡的类,这对我来说非常好。

具有不平衡类的文本分类的朴素贝叶斯