情感分类中的缺失值

我正在尝试使用Python的sklearn包构建一个情感分析引擎。问题在于分析烂番茄影评,这是在Kaggle竞赛中的一个项目

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

情感可以有五种可能的值

我使用了以下分类器

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

由于这些都是适合二元分类的线性分类器,我需要采取以下步骤

  1. 将训练集和测试集分成五个部分,每个部分对应一种情感。假设情感的可能值为a、b、c、d、e。那么在我的数据的第一部分中,我将拥有所有评论,但标记为情感’a’的评论将被标记为正面,其余所有评论将被标记为负面。同样,我为其他情感值创建其他部分。

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

  3. 创建一个管道,并将所有测试集部分依次输入到我的分类器中。我将为每个部分存储一个结果。因此,分类第一部分的结果是partOneRes,依此类推。在partOneRes中标记为正面的任何内容都属于情感’a’。其他部分也是如此处理。

  4. 最后,我希望将所有五个部分的结果结合起来。我会查看partOneRes。任何标记为正面的内容将被更改为情感’a’。我将对所有其他部分进行类似的处理。然后我只需合并结果。

  5. 理想情况下,我不会有重叠或重复的情况。但我确实有少量的重复,这是可以接受的。我可以添加一些逻辑来处理这个问题。

  6. 我将对所有三个分类器执行此操作,最后我想找出哪个分类器给我带来的结果最佳。

我的问题是,我可以看到许多评论我的分类器无法归入任何类别!为什么会这样?这是否因为数据集的规模较小?


回答:

重申一下,问题在于你训练的五个二元模型并非相互排斥的。有几种可能。首先,你对五种情感的分类是否完全准确,或者是否有一些已知的分类错误?

你需要一个既相互排斥又完全覆盖的数据集。你的方法暗示了这一点,但几乎不能保证这一结果。你可以考虑一个集成解决方案,这样可以保证这一点。多类支持向量机就是这样一种方法,但可能不适用于你的情况。

如果类别不是100%准确,你很容易让所有五个分类器拒绝一个特定的观察。这表明你的分类算法需要调整,或者数据本身并不像你希望的那样适合分类。

你还可以检查你是否适当地清理了数据;一些错误可能会严重影响类别边界。

我怀疑发生的情况是小边界效应:每个类别在与其他四个类别的组合进行比较时,“拉近”其边界,留下了最终集合之间的未被认领的区域。

你有办法在训练后检查分类参数吗?如果有,你能可视化选定的五个边界吗?如果你发现病态的间隙,是否有可以调整的训练参数,比如给训练组一个更大的epsilon?

希望这些对你有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注