我正在尝试对2个类的数据集(二进制分类)执行情绪分析。数据集严重不平衡70% - 30%
。我使用LightGBM
和Python 3.6
来制作模型并预测输出。
我认为我的模型的数据集效果性能不平衡。我得到90%
准确度,但即使我已经对参数进行了微调,它也没有进一步增加。我不认为这是最大可能的准确性,因为有其他人得分比这更好。
我已使用Textacy
和nltk
清理了数据集。我正在使用CountVectorizer
来编码文本。
我已尝试up-sampling
数据集,但导致模型不佳(我没有调整该模型)
我尝试使用is_unbalance
的{{1}}参数,但它没有给我一个更好的模型。
是否有任何方法可以处理这种不平衡的数据集。我怎样才能进一步改进我的模型。我应该尝试下采样吗?或者它是最大可能的准确度。我怎么能确定它。?
答案 0 :(得分:5)
是否有任何方法可以处理此类数据集 这是如此不平衡。?
您的数据集几乎是平衡的。 70/30
接近平等。通过提供有利的树木,可以训练更多不平衡的数据,如信用评分,欺诈检测和医疗诊断,其中阳性百分比可能低于1%。
您的问题可能不是课堂不平衡,而是您使用的错误指标。当您计算准确度时,您会对假阴性和误报同等地惩罚您的模型。但事实确实如此吗?当类不平衡,或者只是从业务或物理角度来看无法比较时,其他指标(如精度,召回或ROC AUC)可能比准确性更有用。对于你的问题,我会推荐ROC AUC。
也许,你真正想要的是概率分类。如果你想保持二进制,请使用用于分类的阈值。
如何进一步改进我的模型?
因为是文本分析,我建议更准确的数据清理。一些方向开始:
CountVectorizer
可以很好地改变它。也许基于树的模型不是最佳选择。根据我自己的经验,最好的情绪分析是通过逻辑回归或浅层神经网络等线性模型进行的。但是你应该严格规范它们,你应该明智地扩展你的功能,例如:与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