LightGBM中不平衡数据集的情感分析

时间:2017-11-08 19:09:01

标签: python-3.x machine-learning nlp sentiment-analysis lightgbm

我正在尝试对2个类的数据集(二进制分类)执行情绪分析。数据集严重不平衡70% - 30%。我使用LightGBMPython 3.6来制作模型并预测输出。

我认为我的模型的数据集效果性能不平衡。我得到90%准确度,但即使我已经对参数进行了微调,它也没有进一步增加。我不认为这是最大可能的准确性,因为有其他人得分比这更好。

我已使用Textacynltk清理了数据集。我正在使用CountVectorizer来编码文本。

我已尝试up-sampling数据集,但导致模型不佳(我没有调整该模型)

我尝试使用is_unbalance的{​​{1}}参数,但它没有给我一个更好的模型。

是否有任何方法可以处理这种不平衡的数据集。我怎样才能进一步改进我的模型。我应该尝试下采样吗?或者它是最大可能的准确度。我怎么能确定它。?

2 个答案:

答案 0 :(得分:5)

  

是否有任何方法可以处理此类数据集   这是如此不平衡。?

您的数据集几乎是平衡的70/30接近平等。通过提供有利的树木,可以训练更多不平衡的数据,如信用评分,欺诈检测和医疗诊断,其中阳性百分比可能低于1%。

您的问题可能不是课堂不平衡,而是您使用的错误指标。当您计算准确度时,您会对假阴性和误报同等地惩罚您的模型。但事实确实如此吗?当类不平衡,或者只是从业务或物理角度来看无法比较时,其他指标(如精度,召回或ROC AUC)可能比准确性更有用。对于你的问题,我会推荐ROC AUC。

也许,你真正想要的是概率分类。如果你想保持二进制,请使用用于分类的阈值。

  

如何进一步改进我的模型?

因为是文本分析,我建议更准确的数据清理。一些方向开始:

  • 您是否尝试过不同的词形化/词干制度?
  • 您是如何预处理特殊实体的,如数字,表情符号,缩写,公司名称等?
  • 您是否通过将双字母组合甚至三元组合包含在您的模型中以及单词来利用搭配?
  • 你是如何处理否定的?一个单一的“不”可以显着改变意义,而CountVectorizer可以很好地改变它。
  • 您是否尝试从单词中提取语义,例如匹配同义词或使用word2vec或fastText等预训练模型中的单词embeddins?

也许基于树的模型不是最佳选择。根据我自己的经验,最好的情绪分析是通过逻辑回归或浅层神经网络等线性模型进行的。但是你应该严格规范它们,你应该明智地扩展你的功能,例如:与TF-IDF。

如果您的数据集很大,您可以尝试深入学习并在数据上训练RNN。 LSTM通常是许多与文本相关的问题的最佳模型。

  

我应该尝试下采样吗?

不,您应该从不下采样,除非您的计算机上有太多数据需要处理。下采样会在数据中产生偏差。

如果您真的想提高少数群体对分类器的相对重要性,您可以重新加权观察。据我所知,在LightGBM中,您可以使用scale_pos_weight参数更改班级权重。

  

或者它是最大可能的准确度。我怎么能确定它。?

你永远不会知道。但是你可以做一个实验:让几个人给你的测试样品贴上标签,并将它们相互比较。如果只有90%的标签重合,那么即使是人类也无法对其余10%的样本进行可靠的分类,因此您已达到最大值。

再次,不要过分关注准确性。也许,对于您的商业应用程序,如果您错误地将一些正面评论标记为否定,只要所有负面评论都被成功识别,这是可以的。

答案 1 :(得分:0)

当数据不平衡时,不计算准确度,而应计算Recall,Precision和F1 Score等指标。你可以使用sklearn库 为了计算这些指标,您可以尝试使用不同的值“加权”或“微观”来平均数据。 请检查以下内容: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html