繁体   English   中英

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

[英]Sentiment Analysis with Imbalanced Dataset in LightGBM

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

我认为数据集不平衡会影响我的模型的性能。 我获得了大约90%精度,但是即使我已经对参数进行了微调,它也不会进一步提高。 我认为这不是最大可能的准确性,因为还有其他人的得分比这更好。

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

我曾尝试对数据集up-sampling ,但结果导致模型不佳(我尚未调优该模型)

我已经使用尝试is_unbalance的参数LightGBM ,但它并没有给我一个更好的模式。

是否有任何方法可用来处理这种不平衡的数据集? 如何进一步改善模型? 我应该尝试下采样吗? 还是最大可能的准确性? 我怎么能确定呢?

是否有任何方法可用来处理这种不平衡的数据集?

您的数据集几乎是平衡的 70/30接近相等。 有了令人赏心悦目的助树,就可以训练更多不平衡的数据,例如信用评分,欺诈检测和医疗诊断,其中阳性的百分比可能小于1%。

您的问题可能不是类不平衡,而是您使用的指标错误 在计算准确性时,您会对假阴性和假阳性平均隐含地惩罚模型。 但是真的是这样吗? 如果类之间不平衡,或者从业务或物理角度看是无法比拟的,则其他指标(例如精度,召回率或ROC AUC)可能比精度更有用。 对于您的问题,我建议使用ROC AUC。

也许,您真正想要的是概率分类。 而且,如果您想将其保留为二进制,请使用用于分类的阈值。

如何进一步改善模型?

因为它是文本分析,所以我建议更准确地清除数据。 开始的一些指示:

  • 您是否尝试过不同的词条化/词干处理机制?
  • 您如何预处理特殊的实体,例如数字,笑脸,缩写,公司名称等?
  • 您是否通过将双字母组甚至三字母组与单词一起包含在模型中来利用搭配?
  • 您如何处理否定? 单个“否”可能会极大地改变含义,而CountVectorizer抓住这一点。
  • 您是否尝试从单词中提取语义,例如匹配同义词或从诸如word2vec或fastText之类的预训练模型中使用单词embeddins?

也许基于树的模型不是最佳选择。 以我自己的经验,最好的情感分析是通过线性模型(例如逻辑回归或浅层神经网络)执行的。 但是您应该对它们进行正则化,并且应该明智地扩展功能,例如使用TF-IDF。

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

我应该尝试下采样吗?

不,您永远不应该降低采样率 ,除非您有太多数据要在计算机上处​​理。 下采样会在您的数据中产生偏差。

如果您确实确实想增加少数派类别对您的分类器的相对重要性,则可以重新调整观察值 据我所知,在LightGBM您可以使用scale_pos_weight参数更改类权重。

还是最大可能的准确性? 我怎么能确定呢?

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

再说一次,不要太注重准确性。 也许,对于您的业务应用程序来说,只要您成功地识别了所有负面评论,就可以将一些正面评论错误地标记为负面评论。

当数据不平衡时,不会计算准确性,而是应该计算诸如召回率,精度和F1得分之类的指标。 您可以使用sklearn库计算此类指标,也可以尝试使用不同的“加权”或“微”值对数据进行平均。 请检查以下内容: http : //scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM