[英]Sentiment Analysis with Imbalanced Dataset in LightGBM
我正在尝试对2类(二进制分类)的数据集执行情感分析。 数据集严重失衡约70% - 30%
。 我正在使用LightGBM
和Python 3.6
制作模型并预测输出。
我认为数据集不平衡会影响我的模型的性能。 我获得了大约90%
精度,但是即使我已经对参数进行了微调,它也不会进一步提高。 我认为这不是最大可能的准确性,因为还有其他人的得分比这更好。
我已经用Textacy
和nltk
清理了数据集。 我正在使用CountVectorizer
编码文本。
我曾尝试对数据集up-sampling
,但结果导致模型不佳(我尚未调优该模型)
我已经使用尝试is_unbalance
的参数LightGBM
,但它并没有给我一个更好的模式。
是否有任何方法可用来处理这种不平衡的数据集? 如何进一步改善模型? 我应该尝试下采样吗? 还是最大可能的准确性? 我怎么能确定呢?
是否有任何方法可用来处理这种不平衡的数据集?
您的数据集几乎是平衡的 。 70/30
接近相等。 有了令人赏心悦目的助树,就可以训练更多不平衡的数据,例如信用评分,欺诈检测和医疗诊断,其中阳性的百分比可能小于1%。
您的问题可能不是类不平衡,而是您使用的指标错误 。 在计算准确性时,您会对假阴性和假阳性平均隐含地惩罚模型。 但是真的是这样吗? 如果类之间不平衡,或者从业务或物理角度看是无法比拟的,则其他指标(例如精度,召回率或ROC AUC)可能比精度更有用。 对于您的问题,我建议使用ROC AUC。
也许,您真正想要的是概率分类。 而且,如果您想将其保留为二进制,请使用用于分类的阈值。
如何进一步改善模型?
因为它是文本分析,所以我建议更准确地清除数据。 开始的一些指示:
CountVectorizer
抓住这一点。 也许基于树的模型不是最佳选择。 以我自己的经验,最好的情感分析是通过线性模型(例如逻辑回归或浅层神经网络)执行的。 但是您应该对它们进行正则化,并且应该明智地扩展功能,例如使用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.