【问题标题】:Missing values in sentiment classification情感分类中的缺失值
【发布时间】:2015-12-31 00:24:58
【问题描述】:

我正在尝试使用 python 的 sklearn 包构建情绪分析引擎。 问题是分析烂番茄对这个 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. 我会对所有三个分类器都这样做,最后我想找出哪个分类器给我最好的结果。

我的问题是我可以看到有很多评论我的分类器无法放入任何类别!为什么会发生这种情况?会不会是数据集太小了?

【问题讨论】:

    标签: python machine-learning nlp sentiment-analysis


    【解决方案1】:

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

    您需要一个相互排斥的集合穷举。您的方法表明但几乎不能保证这个结果。您可能会考虑一个确实可以保证这一点的集成解决方案。多类 SVM 就是这样一种,但可能不适用于您的情况。

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

    您还可以检查您是否已适当地清理了这些数据;一些错误可能会严重改变类边界。

    我怀疑正在发生的是小边界效应:当与其他四个类别的组合进行比较时,每个类别都会“拉入”其边界,在最后一组之间留下无人认领的领土。

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

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的建议!我将查看我的数据和分类器,并尝试弄清楚我是否可以正确调整它。我相信我没有太多的培训和测试数据,所以我想我可能不得不忍受这些差距。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2018-02-17
    • 2020-02-05
    • 2019-05-25
    • 2014-10-04
    • 2019-08-10
    • 2017-08-28
    • 2016-02-27
    相关资源
    最近更新 更多