我正在尝试使用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。标记为肯定的任何内容都将更改为情感“ a”。对于其他所有部分,我也会做类似的事情。然后我简单地合并结果。
如果我没有重叠或重复,那将是理想的。但是我得到了一小部分重复,这很好。我可以添加一些逻辑来处理。
我将对所有三个分类器都执行此操作,最后我想找出哪个分类器能给我最好的结果。
我的问题是我可以看到分类器无法在任何类别中添加很多评论!为什么会这样?可能是因为数据集的规模太小了吗?
重申一下,问题在于您所训练的五个二进制模型并不相互穷举。有几种可能性。首先,您是否对这五种情感有100%的清晰分类,还是存在一些公认的分类错误?
您需要一个互斥且穷举的集合。您的方法建议(但几乎不能保证)此结果。您可能会考虑采用能够确保这一点的集成解决方案。多类SVM就是这样的一种,但可能不适用于您的情况。
如果分类不是100%准确的,您可以很容易地让所有五个拒绝特定的观察。这表明分类算法需要调整,或者数据本身不如您所愿地适合分类。
您可能还需要检查是否已正确清理了该数据。一些错误会严重改变班级界限。
我怀疑正在发生的是一个小边界效应:与其他四个类别的组合相比,每个类别都“拉入”其边界,从而在最后一组之间保留了无人认领的领土。
训练后您有办法检查分类参数吗?如果是这样,您可以形象地显示所选的五个边界吗?如果您确实发现了病理学差距,是否可以调整训练参数,例如将更大的epsilon给予训练组?
我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句