我正在尝试使用python的sklearn包构建情感分析引擎。 问题是分析这个Kaggle比赛的烂番茄评论
https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews
情绪可能需要5个可能的值
我正在使用以下分类器
由于这些都是适合二进制分类的线性分类器,以下是我必须采取的步骤
将训练和测试组分为5个部分,每个部分一个部分。 让我们说情绪的可能值是a,b,c,d,e。因此,在我的数据的第一部分中,我将获得所有评论,但是有情绪的评论' a'将被标记为正数,所有其他人将被标记为否定。同样,我为其他情绪值创建了其他部分。
清理所有5个部分的数据
创建一个管道并将所有测试集部件一个接一个地提供给我的分类器。我会为每个部分存储一个结果。因此,对第一部分进行分类的结果是partOneRes等。在partOneRes中标记为正数的任何内容都属于情感' a'。与其他部分类似。
最后,我想结合所有5个部分的结果。我将看看partOneRes。任何标记为正面的内容都将更改为Sentiment' a'。我将对所有其他部分做同样的事情。然后我简单地合并结果。
如果我没有重叠或重复,那将是理想的。但我得到了少量重复,这很好。我可以添加一些逻辑来处理它。
我会为所有三个分类器执行此操作,最后我想找出哪个分类器给我最好的结果。
我的问题是,我可以看到有很多评论,我的分类器无法放入任何类别!为什么会这样?可能是由于数据集的小尺寸?
答案 0 :(得分:1)
重申,问题是你训练的五个二元模型并不是相互详尽的。有几种可能性。 首先,对于五种情绪中的每种情绪,您是否都有100%的清洁分类,或者是否存在一些公认的分类错误?
您需要一个互斥的和详尽的集合。你的方法建议,但几乎不能保证,这个结果。您可以考虑使用这种保证的集成解决方案。多类SVM就是其中之一,但可能不适合您的情况。
如果课程不是100%准确,那么你可以很容易地让所有五个人拒绝一个特定的观察。这表明您的分类算法需要调整,或者数据本身不适合您的分类。
您还可以检查您是否已正确清理了这些数据;一些错误可以严重地改变阶级界限。
我怀疑正在发生的是一个小边界效应:每个类别,与其他四个组合相比,"拉入"它的边界,在最终集之间留下无人认领的领土。
训练后你有办法检查分类参数吗?如果是这样,你能看到所选择的五个边界吗?如果您确实发现了病理性差距,是否有可以调整的训练参数,例如为训练组提供更大的epsilon?
我希望这会有所帮助。