情感分类中的缺失值
Missing values in sentiment classification
我正在尝试使用 python 的 sklearn 包构建一个情绪分析引擎。
问题是分析 Rotten Tomatoes 对这个 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% 干净的 class 验证,或者是否存在一些公认的 class 验证错误?
您需要一套互斥和详尽无遗的集。您的方法表明但很难保证会出现这种结果。您可能会考虑一个确实做出此保证的集成解决方案。 Multi-class SVM 就是其中之一,但可能不适用于您的情况。
如果 classes 不是 100% 准确,您可以很容易地让所有五个都拒绝特定观察。这表明您的 class 化算法需要调整,或者数据本身并不像您希望的那样适合 class 化。
您还可以检查您是否已正确清理该数据;一些错误会严重移动 class 边界。
我怀疑正在发生的是一个小边界效应:每个 class,当与其他四个的组合相比时,"pulls in" 它的边界,在最后一组之间留下无人认领的领土。
你有办法在训练后检查class化参数吗?如果是这样,您能否形象化选择的五个边界?如果您确实发现病态差距,是否有可以调整的训练参数,例如为训练组提供更大的 epsilon?
希望对您有所帮助。
我正在尝试使用 python 的 sklearn 包构建一个情绪分析引擎。 问题是分析 Rotten Tomatoes 对这个 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% 干净的 class 验证,或者是否存在一些公认的 class 验证错误?
您需要一套互斥和详尽无遗的集。您的方法表明但很难保证会出现这种结果。您可能会考虑一个确实做出此保证的集成解决方案。 Multi-class SVM 就是其中之一,但可能不适用于您的情况。
如果 classes 不是 100% 准确,您可以很容易地让所有五个都拒绝特定观察。这表明您的 class 化算法需要调整,或者数据本身并不像您希望的那样适合 class 化。
您还可以检查您是否已正确清理该数据;一些错误会严重移动 class 边界。
我怀疑正在发生的是一个小边界效应:每个 class,当与其他四个的组合相比时,"pulls in" 它的边界,在最后一组之间留下无人认领的领土。
你有办法在训练后检查class化参数吗?如果是这样,您能否形象化选择的五个边界?如果您确实发现病态差距,是否有可以调整的训练参数,例如为训练组提供更大的 epsilon?
希望对您有所帮助。