Python 3.x LightGBM中不平衡数据集的情感分析

Python 3.x LightGBM中不平衡数据集的情感分析,python-3.x,machine-learning,nlp,sentiment-analysis,lightgbm,Python 3.x,Machine Learning,Nlp,Sentiment Analysis,Lightgbm,我试图在一个包含两个类(二元分类)的数据集上进行情绪分析。数据集在70%-30%之间严重失衡。我使用LightGBM和python3.6创建模型并预测输出 我认为数据集的不平衡会影响模型的性能。我获得了大约90%的精确度,但即使我对参数进行了微调,精确度也不会进一步提高。我不认为这是最大可能的准确率,因为还有其他人得分比这更好 我已经用Textacy和nltk清理了数据集。我正在使用CountVectorizer对文本进行编码 我尝试了向上采样数据集,但它导致了糟糕的模型(我没有调整该模型) 我

我试图在一个包含两个类(二元分类)的数据集上进行情绪分析。数据集在
70%-30%
之间严重失衡。我使用
LightGBM
python3.6
创建模型并预测输出

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

我已经用
Textacy
nltk
清理了数据集。我正在使用
CountVectorizer
对文本进行编码

我尝试了
向上采样
数据集,但它导致了糟糕的模型(我没有调整该模型)

我曾尝试使用
LightGBM
is\u不平衡
参数,但它没有给我提供更好的模型

有什么方法可以用来处理这种不平衡的数据集吗。?我怎样才能进一步改进我的模型。?我应该试着减少取样吗。?或者这是最大可能的准确度。?我怎么能肯定呢

有什么方法可以用来处理这种类型的数据集吗 这是如此不平衡

您的数据集几乎是平衡的<代码>70/30接近相等。通过Gracent增强树,可以对更不平衡的数据进行培训,如信用评分、欺诈检测和医疗诊断,其中阳性率可能低于1%

您的问题可能不是班级不平衡,而是您使用的指标错误。当您计算准确度时,您会含蓄地对模型的误报和误报进行同等惩罚。但真的是这样吗?当类是不平衡的,或者从业务或物理的角度来看是不可比较的,其他指标,如精度、召回率或ROC AUC可能比准确性更有用。对于你的问题,我推荐ROC AUC

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

我怎样才能进一步改进我的模型

因为这是对文本的分析,我建议更精确的数据清理。从以下几个方向开始:

  • 你有没有尝试过不同的柠檬化/去梗方法
  • 您如何预处理特殊实体,如数字、笑脸、缩写、公司名称等
  • 你是否利用了搭配,在你的模型中加入了二元图甚至三元图以及单词
  • 你是如何处理否定的?一个“否”可能会显著改变其含义,
    CountVectorizer
    捕捉到了这一点
  • 您是否尝试从单词中提取语义,例如匹配同义词或使用来自预训练模型(如word2vec或fastText)的单词嵌入
也许基于树的模型不是最好的选择。根据我自己的经验,最好的情绪分析是通过逻辑回归或浅层神经网络等线性模型进行的。但是,您应该严格规范它们,并且应该明智地扩展您的功能,例如使用TF-IDF

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

我应该试着减少取样吗

不,除非您的机器上有太多数据需要处理,否则您应该永远不要关闭样本。下采样会在数据中产生偏差

如果您真的想增加少数类对分类器的相对重要性,您可以重新加权观察值。据我所知,在
LightGBM
中,您可以使用
scale\u pos\u weight
参数更改类权重

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

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


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

当数据不平衡时,不计算准确度,而应该计算召回率、准确度和F1分数等指标。您可以使用sklearn库 为了计算这些指标,您可以尝试使用不同的“加权”或“微”值来平均数据。 请检查以下内容:

谢谢您提供的信息。我用
Textacy
清理了数字、笑脸等数据,我还尝试了不同的
词干分析器
lemmations
我尝试了
auc
作为度量标准,但没有任何改进。我没有使用word2vec,因为我无法在我的机器中使用该模型。我曾尝试使用
Keras
训练
LSTM
,但结果没有那么有希望。你能解释或链接我如何使用
bigrams
数据吗?@SreeramTP,合并bigrams的最简单方法是使用
CountVectorizer.ngram\u range