情感分类中的缺失值

Missing values in sentiment classification

我正在尝试使用 python 的 sklearn 包构建一个情绪分析引擎。 问题是分析 Rotten Tomatoes 对这个 Kaggle 竞赛的评论

https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews

情绪可以取 5 个可能的值

我正在使用以下分类器

  1. 多项朴素贝叶斯
  2. 逻辑回归
  3. 随机梯度下降

因为这些都是适用于二进制分类的线性分类器,所以这里是我必须采取的步骤

  1. 将训练集和测试集分成 5 个部分,每个情绪一个部分。 假设情绪的可能值为 a、b、c、d、e。因此,在我的数据的一部分中,我将拥有所有评论,但具有情绪 'a' 的评论将被标记为正面,而所有其他评论将被标记为负面。同样,我为其他情绪值创建了其他部分。

  2. 清理所有5个部分的数据

  3. 创建一个管道并将所有测试集部分一个接一个地馈送到我的分类器。我将为每个部分存储一个结果。所以第一部分的分类结果是 partOneRes 等等。 partOneRes 中标记为积极的任何内容都属于情绪 'a'。其他部分类似。

  4. 最后我想合并所有 5 个部分的结果。我会看看 partOneRes。任何标记为正面的内容都将更改为情绪 'a'。我将对所有其他部分做类似的事情。然后我简单地合并结果。

  5. 如果我没有重叠或重复,那就太理想了。但是我得到了少量重复项,这很好。我可以添加一些逻辑来处理它。

  6. 我会对所有三个分类器都这样做,最后我想找出哪个分类器给我最好的结果。

我的问题是我可以看到我的分类器无法将许多评论归入任何类别!为什么会这样?会不会是数据集小的缘故?

重申一下,问题是您训练的五个二元模型并不相互穷举。有几种可能性。 首先,您是否对五种情绪中的每一种都进行了 100% 干净的 class 验证,或者是否存在一些公认的 class 验证错误?

您需要一套互斥详尽无遗的集。您的方法表明但很难保证会出现这种结果。您可能会考虑一个确实做出此保证的集成解决方案。 Multi-class SVM 就是其中之一,但可能不适用于您的情况。

如果 classes 不是 100% 准确,您可以很容易地让所有五个都拒绝特定观察。这表明您的 class 化算法需要调整,或者数据本身并不像您希望的那样适合 class 化。

您还可以检查您是否已正确清理该数据;一些错误会严重移动 class 边界。

我怀疑正在发生的是一个小边界效应:每个 class,当与其他四个的组合相比时,"pulls in" 它的边界,在最后一组之间留下无人认领的领土。

你有办法在训练后检查class化参数吗?如果是这样,您能否形象化选择的五个边界?如果您确实发现病态差距,是否有可以调整的训练参数,例如为训练组提供更大的 epsilon?

希望对您有所帮助。