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)的单词嵌入
LightGBM
中,您可以使用scale\u pos\u weight
参数更改类权重
或者这是最大可能的准确度。?我怎么能肯定呢
你永远不会知道。但是你可以做一个实验:让几个人给你的测试样本贴上标签,并相互比较。如果只有90%的标签是一致的,那么即使是人类也无法相对地对其余10%的样本进行分类,因此您已经达到了最大值
再说一次,不要太注重准确性。也许,对于您的业务应用程序来说,如果您错误地将某些正面评论标记为负面评论,只要成功识别出所有负面评论,就可以了。当数据不平衡时,不计算准确度,而应该计算召回率、准确度和F1分数等指标。您可以使用sklearn库 为了计算这些指标,您可以尝试使用不同的“加权”或“微”值来平均数据。 请检查以下内容:
谢谢您提供的信息。我用
Textacy
清理了数字、笑脸等数据,我还尝试了不同的词干分析器和lemmations
我尝试了auc
作为度量标准,但没有任何改进。我没有使用word2vec,因为我无法在我的机器中使用该模型。我曾尝试使用Keras
训练LSTM
,但结果没有那么有希望。你能解释或链接我如何使用bigrams
数据吗?@SreeramTP,合并bigrams的最简单方法是使用CountVectorizer.ngram\u range
。