了解分类器对文本数据的性能

数据挖掘 机器学习 nlp 随机森林 逻辑回归 支持向量机
2021-09-17 16:49:48

我正在研究一个多标签文本分类问题(目标标签总数 90)。数据分布具有长尾和类别不平衡以及大约 190 万条记录。目前,我正在处理具有相似目标分布的大约 10 万条记录的小样本。我正在使用 OAA 策略(一对一)。我在数据上尝试了许多算法。

目前,每个标签至少有 5000 个数据行。类不平衡很高,最常见的标签大约有 80k 条记录,而最罕见的只有一个数据行,我在建模中没有考虑。该数据集包含来自学术期刊的文本。它有标题和摘要列。

我正在使用 HashingVectorizer(特征数 2**20,字符分析器)来生成特征,并使用 TSVD 来降低维度(n_components=200)。

LinearSVC(class_weight='balanced') # Got many warnings that it could not converge. I came to know that it may due to data not scaled properly. How can I scale text data??  
LogisticRegression(solver='lbfgs') # Converged very quickly
RandomForestClassifier(n_estimators=40,class_weight="balanced") # Train time ~2hr 

我注意到 LinearSVC 具有良好的召回率(更少的误报),而 Logistic 和 RF 具有良好的精度(更少的误报)分数。谁能帮助我找出这些分数背后的原因以及如何改进它们。

在此处输入图像描述

目前,由于计算资源有限,我没有使用深度学习/变压器模型。

3个回答

由于数据不平衡并且偏向少数类别,这就是为什么 RF 和 Logistic 结果存在偏差,导致高 FP 值,因此高精度和低召回率。
另一方面,SVC 可能试图创建超平面以充分利用曲线的另一侧,从而产生不同的结果。

为了改善结果,请尝试使用非线性内核,并在输入分类器之前尝试平衡输入数据(通过缩放等)。

分类器分析

尝试利用此 python 库获得更多见解: https ://github.com/marcotcr/lime 参考:https ://marcotcr.github.io/lime/tutorials/Lime%20-%20basic%20usage%2C%20two% 20class%20case.html

深度学习细节

对于深度学习模型,如果可能,您可以使用 Google Collab。

如果模型是基于深度学习并建立在 allennlp 之上的,则可以执行梯度可视化。有关情绪分析问题的演示,请参阅此链接, https: //demo.allennlp.org/sentiment-analysis/MTc0MzQwOA== 教程位于 https://allennlp-course.apps.allenai.org/

多标签细节

请参阅此处https://scikit-learn.org/stable/modules/multiclass.html

看起来您正在解决的问题是多标签分类。

这将为您提供类明智的报告,sklearn.metrics.classification_report。因此,缩小了表现不佳的班级。然后调整模型。

多标签问题有微观/宏观指标。请参阅此处多类分类设置中的微观平均与宏观平均性能

建议 我的建议是更好地探索指标是如何计算的。找到这里提到的 F1 的事实。

分析标签上的 F1、精度和召回率。然后,可以找出哪些标签表现不佳。

您还可以根据您使用的建模方法告知模型不平衡本身(真/假或“类权重”)。