是否有任何方法可以处理这种不平衡的数据集?
您的数据集几乎是平衡的。70/30
接近相等。使用 gratient boosted 树,可以在更多不平衡的数据上进行训练,例如信用评分、欺诈检测和医疗诊断,其中正数的百分比可能低于 1%。
您的问题可能不在于类别不平衡,而在于您使用了错误的指标。当你计算准确率时,你隐含地对假阴性和假阳性的模型进行同样的惩罚。但真的是这样吗?当类不平衡,或者从业务或物理角度无法比较时,其他指标,如精度、召回或 ROC AUC 可能比准确度更有用。对于您的问题,我会推荐 ROC AUC。
也许,您真正想要的是概率分类。如果您想保持二进制,请使用用于分类的阈值。
我怎样才能进一步改进我的模型。?
因为是文本分析,我建议更准确的数据清洗。一些开始的方向:
- 您是否尝试过不同的词形还原/词干化机制?
- 您如何预处理特殊实体,如数字、笑脸、缩写、公司名称等?
- 您是否通过在模型中包含双元组甚至三元组以及单词来利用搭配?
- 你是如何处理否定的?一个单一的“不”可以极大地改变意思,并且
CountVectorizer
很难理解。
- 您是否尝试从单词中提取语义,例如匹配同义词或使用来自 word2vec 或 fastText 等预训练模型的词嵌入?
也许基于树的模型不是最佳选择。以我自己的经验,最好的情感分析是通过逻辑回归或浅层神经网络等线性模型执行的。但是您应该对它们进行大量正则化,并且应该明智地扩展您的功能,例如使用 TF-IDF。
如果您的数据集很大,您可以尝试深度学习并在您的数据上训练 RNN。LSTM 通常是许多文本相关问题的最佳模型。
我应该尝试下采样吗?
不,你永远不应该下采样,除非你有太多数据要在你的机器上处理。下采样会在您的数据中产生偏差。
如果你真的想增加分类器中少数类的相对重要性,你可以重新加权观察值。据我所知,LightGBM
您可以使用参数更改类权重scale_pos_weight
。
或者它是最大可能的精度。?我怎么能确定呢。?
你永远不可能知道。但是你可以做一个实验:让几个人给你的测试样本贴上标签,然后相互比较。如果只有 90% 的标签重合,那么即使是人类也无法可靠地对其余 10% 的样本进行分类,所以你已经达到了最大值。
再说一次,不要过分关注准确性。也许,对于您的业务应用程序,如果您错误地将一些正面评论标记为负面,只要成功识别出所有负面评论即可。