【Python机器学习系列】构建逻辑回归多标签分类器实现多标签文本分类(案例+源码)

这是我的第384篇原创文章。

一、引言

      多标签分类(Multi-label Classification)问题是指一个样本可以同时被赋予多个标签,这些标签之间不是互斥的。多标签分类任务的目标是预测一个样本同时属于哪些标签集合中的标签。这与二元或多类分类不同,其中标签输出是相互排斥的。

      多标签分类应用场景有文本主题标注(一篇文章可能同时涉及政治、经济、文化等多个主题)、图像标注(一张图片可能包含多个对象或场景)等。

      多标签分类常见方法是将多标签分类问题转化为多个二分类问题来解决,或者利用上一个输出的标签作为下一个标签分类器的输入。

      使用Scikit-Learn的MultiOutputClassifier,我们可以开发多标签分类器,为每个标签训练一个分类器。在模型评估方面,最好使用Hamming Loss指标,因为准确率得分可能无法正确反映整体情况。接下来尝试使用Scikit-Learn搭建多标签分类器。

二、实现过程

2.1 读取数据

df = pd.read_csv('data.csv')
df = df.drop([...], axis =1)
print(df)
X = df["abstractText"]
y = np.asarray(df[df.columns[1:]])

df:

图片

2.2 数据划分

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

2.3 分词embedding

将文本数据转换为TF-IDF表示,以便Scikit-Learn模型能够接受训练数据。

vectorizer = TfidfVectorizer(max_features=2500, max_df=0.9).fit(X)
# 分词embedding
X_train_tfidf = vectorizer.transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)

为了简化教程,本文跳过了预处理数据的步骤,例如删除停顿词。

2.4 模型构建与训练

完成所有准备工作后,我们将开始训练多标签分类器。

clf = MultiOutputClassifier(LogisticRegression()).fit(X_train_tfidf, y_train)

在Scikit-Learn中,我们将使用MultiOutputClassifier对象来训练多标签分类器模型。该模型背后的策略是为每个标签训练一个分类器。基本上,每个标签都有自己的分类器。

2.5 模型预测

训练完成后,让我们使用模型预测测试数据

prediction = clf.predict(X_test_tfidf)
print(prediction)

predicttion:

图片

预测结果是每个MeSH类别的标签数组。每一行代表一个句子,每一列代表一个标签。

2.6 模型评估

最后,我们需要对多标签分类器进行评估。我们可以使用准确率指标来评估模型

print('Accuracy Score: ', accuracy_score(y_test, prediction))
print('Hamming Loss: ', round(hamming_loss(y_test, prediction),2))

结果:

图片

准确度得分结果为0.145,这表明该模型只能在不到14.5%的情况下能预测出准确的标签组合。然而,对于多标签预测评估来说,准确率得分存在不足。准确率得分需要每个句子的所有标签都出现在准确的位置上,否则就会被认为是错误的。

为了解决这个问题,我们必须评估标签的预测而不是它们的组合。在这种情况下,我们可以使用Hamming Loss评估指标。汉明损失通过将错误预测与总标签数的比例来计算。因为汉明损失是一种损失函数,得分越低越好(0表示没有错误预测,1表示所有预测都错误)。

图片

我们的多标签分类器Hamming Loss模型为0.13,这意味着我们的模型在独立情况下约有13%的错误预测。这意味着每个标签的预测可能有13%的错误。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

猜你喜欢

转载自blog.csdn.net/sinat_41858359/article/details/145124025