使用 scikit-learn 进行多标签文本分类,使用哪些分类器?

Posted

技术标签:

【中文标题】使用 scikit-learn 进行多标签文本分类,使用哪些分类器?【英文标题】:Multi-label text classification with scikit-learn, which classifiers to use? 【发布时间】:2018-07-27 19:58:10 【问题描述】:

我已经使用导入这些分类器的 scikit-learn Python 库完成了文本分类:

from sklearn.linear_model import RidgeClassifier
from sklearn.svm import LinearSVC
from sklearn.linear_model import SGDClassifier
from sklearn.linear_model import Perceptron
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.naive_bayes import BernoulliNB, MultinomialNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import NearestCentroid
from sklearn.ensemble import RandomForestClassifier

输入文本的格式为:

('some text 1', 'class1')
('some text 2', 'class2')
('some text 3', 'class3')
...

一切都很好。但我想知道的是我是否有多标签文本,例如:

('some text 1', 'class1', 'class3')
('some text 2', 'class2', 'class1')
('some text 3', 'class3')
...

如果可以使用这些分类器,还是应该使用其他分类器?

【问题讨论】:

【参考方案1】:

所有能够进行多类或多标签的分类器都在this page 上引用。

基于此,你的模型中只有2个可以直接用作多标签:

随机森林分类器 KNeighborsClassifier

在我完成之后(在练习中),将 OneVsAll 与另一个兼容的分类器一起使用,然后提取前 N 个或高于 X% 的所有标签(您拥有的标签越多,阈值越低,因为总和等于 1)。这不是你能做的最干净的事情,但它有效(我将它与多标签分类器结果进行了比较,它非常接近或相同)

希望对你有帮助 尼古拉斯

【讨论】:

感谢您非常简洁的回答,我会尝试您建议的方法。只是一个问题:multiclass-multioutput 是唯一可以用于多标签分类的吗?由于其他人似乎用于多类但没有多标签输出,这一事实是否有所不同 多类-多输出不同于简单的多标签。例如,如果你想用多标签对一顿饭进行分类,你可能会有(咸:是/否,好:是/否,暖:是/否)。使用 Multiclass-Multioutput 你可能有(味道:甜/咸/酸,好:Tastefull/correct/bad/horrible,...)。如果标签是二进制的,则可以使用 Support multilabel 或 Support multiclass-multioutput。你可以有多个输出,它只会支持多类多输出。但是您每次都可以通过在所有解决方案上执行 One Hot Encoder 将多输出转换为多标签

以上是关于使用 scikit-learn 进行多标签文本分类,使用哪些分类器?的主要内容,如果未能解决你的问题,请参考以下文章

GridSearch用于Scikit-learn中的多标签分类

与标签进行一对一匹配以进行文本分类

scikit-learn 在多标签分类中计算 F1

使用 Sklearn 进行多标签文本分类

scikit-learn 中为文本分类排列文本数据的标准方法是啥?

多标签分类的交叉验证错误