使用Scikit-Learn实现多标签分类,助力机器学习

这篇具有很好参考价值的文章主要介绍了使用Scikit-Learn实现多标签分类,助力机器学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,在机器学习任务中,分类是一种监督学习方法,用于根据输入数据预测标签。例如,我们想要根据历史特征预测某人是否对销售优惠感兴趣,通过使用可用的训练数据训练机器学习模型,可以对输入数据执行分类任务。

平常会遇到一些经典分类任务,例如二元分类(两个标签)和多类分类(两个以上标签)。在这种情况下,我们会训练分类器,模型会尝试从所有可用标签中预测一个标签。用于分类的数据集类似于下面的图像:

使用Scikit-Learn实现多标签分类,助力机器学习,机器学习与深度学习,机器学习,scikit-learn,分类

上面的图像显示目标(销售优惠)在二元分类中包含两个标签,在多类分类中包含三个标签,模型会从可用特征中进行训练,然后仅输出一个标签。

多标签分类与二元或多类分类不同,在多标签分类中,我们不仅尝试预测一个输出标签,相反,多标签分类会尝试预测尽可能多的适用于输入数据的标签,输出可以是从没有标签到最大数量的可用标签。

多标签分类通常用于文本数据分类任务,下面是一个多标签分类的示例数据集。

使用Scikit-Learn实现多标签分类,助力机器学习,机器学习与深度学习,机器学习,scikit-learn,分类

在上面的示例中,假设文本1到文本5是可以归类为四个类别的句子:事件、体育、流行文化和自然。通过上述训练数据,多标签分类任务可以预测哪个标签适用于给定的句子。每个类别之间并不相互对立,因为它们不是互斥的;每个标签可以被视为独立的。

更详细地说,我们可以看到文本1标记为体育和流行文化,而文本2标记为流行文化和自然。这表明每个标签是互斥的,多标签分类的预测输出可以是没有标签或同时包含所有标签。

有了上述介绍,接下来尝试使用Scikit-Learn搭建多标签分类器。

使用Scikit-Learn进行多标签分类

本文将使用Kaggle上公开可用的生物医学PubMed多标签分类数据集,该数据集包含各种特征,但本文只使用abstractText特征和它们的MeSH分类(A:解剖学,B:有机体,C:疾病等)。示例数据如下图所示:

【生物医学PubMed多标签分类数据集】:https://www.kaggle.com/datasets/owaiskhan9654/pubmed-multilabel-text-classification

使用Scikit-Learn实现多标签分类,助力机器学习,机器学习与深度学习,机器学习,scikit-learn,分类

上述数据集表明,每篇论文都可以被分为多个类别,这就是多标签分类的案例。有了这个数据集,那么就可以使用Scikit-Learn建立多标签分类器,在训练模型之前,首先准备好数据集。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.read_csv('PubMed Multi Label Text Classification Dataset Processed.csv')
df = df.drop(['Title', 'meshMajor', 'pmid', 'meshid', 'meshroot'], axis =1)

X = df["abstractText"]
y = np.asarray(df[df.columns[1:]])

vectorizer = TfidfVectorizer(max_features=2500, max_df=0.9)
vectorizer.fit(X)

在上面的代码中,将文本数据转换为TF-IDF表示,以便Scikit-Learn模型能够接受训练数据。此外,为了简化教程,本文跳过了预处理数据的步骤,例如删除停顿词。

数据转换完成后,我们将数据集分割为训练集和测试集。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)
  
X_train_tfidf = vectorizer.transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)

完成所有准备工作后,我们将开始训练多标签分类器。在Scikit-Learn中,我们将使用MultiOutputClassifier对象来训练多标签分类器模型。该模型背后的策略是为每个标签训练一个分类器,每个标签都有自己的分类器。

在这个示例中,我们将使用逻辑回归,并使用MultiOutputClassifier将其扩展到所有标签。

from sklearn.multioutput import MultiOutputClassifier
from sklearn.linear_model import LogisticRegression

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

我们可以更改模型并调整传递给MultiOutputClasiffier的模型参数,因此请根据自己的要求进行管理。训练完成后,使用模型预测测试数据。

prediction = clf.predict(X_test_tfidf)
prediction

使用Scikit-Learn实现多标签分类,助力机器学习,机器学习与深度学习,机器学习,scikit-learn,分类

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

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

from sklearn.metrics import accuracy_score
print('Accuracy Score: ', accuracy_score(y_test, prediction))****

准确率得分为0.145。

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

例如,第一行预测与测试数据之间仅有一个标签的差异。

使用Scikit-Learn实现多标签分类,助力机器学习,机器学习与深度学习,机器学习,scikit-learn,分类

对于准确率得分来说,这将被认为是错误的预测,因为标签组合不同,这就是模型具有较低度量分数的原因。

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

from sklearn.metrics import hamming_loss
print('Hamming Loss: ', round(hamming_loss(y_test, prediction),2))

汉明损失为0.13。

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

总结

多标签分类是一种机器学习任务,其输出可以是没有标签或给定输入数据的所有可能标签。这与二元或多类分类不同,其中标签输出是相互排斥的。

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

 文章来源地址https://www.toymoban.com/news/detail-666011.html

到了这里,关于使用Scikit-Learn实现多标签分类,助力机器学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习笔记 - 基于Scikit-Learn的各种分类器进行分类并比较

            scikit-learn是基于python语言构建机器学习应用程序的最佳库之一。简单易用,并且它有很多示例和教程。除了监督式机器学习(分类和回归)外,它还可用于聚类、降维、特征提取和工程以及数据预处理。该接口在所有这些方法上都是一致的,因此它不仅易于使用,

    2024年02月09日
    浏览(60)
  • Python案例|使用Scikit-learn实现客户聚类模型

    聚类是一种经典的无监督学习方法,无监督学习的目标是通过对无标记训练样本的学习,发掘和揭示数据集本身潜在的结构与规律,即不依赖于训练数据集的类标记信息。聚类试图将数据集划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。 聚类算法体现了“物

    2024年02月15日
    浏览(31)
  • 机器学习-决策树-分类-汽车数据集-fetch_openml python scikit-learn

    在这个使用决策树的分类任务中,将使用OpenML提供的汽车数据集来预测给定汽车信息的汽车可接受性。将使用Sklearn ’ fetch_openml \\\'函数加载它。 此次获取的数据的版本是2。在数据集的版本1中,目标类有4个类(unacc, acc, good, vgood),但在第二个版本中,大多数类是Positive§,而其

    2024年02月22日
    浏览(46)
  • scikit-learn实现线性回归

    要学习scikit-learn,我们必须要到scikit-clearn的官网中去查看公式和原理 scikit-learn 官网 scikit-learn 中文社区 进入官网一以后我们找到回归,然后再有监督学习中找到线性模型 公式: L2范数是指向量中每个元素的平方和的平方根。在数学中,L2范数也称为欧几里得范数,通常用 ∣

    2024年02月04日
    浏览(42)
  • 交叉验证以及scikit-learn实现

    交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题。 主要有三种方式: 简单交叉验证(HoldOut检验)、 k折交叉验证(k-fold交叉验证)、 自助法。 本文仅针对k折交叉验证做详细解释。 方法 :将原始数据集随机划分成训练集和验证集两部分。比如说

    2024年02月04日
    浏览(47)
  • Python案例|使用Scikit-learn进行房屋租金回归分析

    回归分析是一种预测性的建模技术,研究的是因变量(目标)和自变量(预测器)之间的关系。回归分析是建模和分析数据的重要工具。比如预测股票价格走势、预测居民收入、预测微博互动量等等。常用的有线性回归、逻辑回归、岭回归等。本文主要使用线性回归。 本文使

    2024年02月15日
    浏览(53)
  • AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月05日
    浏览(36)
  • 如何在spark中使用scikit-learn和tensorflow等第三方python包

    首先我们用conda包管理工具对我们需要的python包进行虚拟环境创建: 下面是对每个参数的解释(😁这里让chatgpt给出的解释,自己就不手打了😊) conda create: 这是创建Conda环境的命令。 -n python37: -n参数后跟着你想要创建的环境的名称,这里是python37。你可以将环境名称替换为你

    2024年02月08日
    浏览(38)
  • 【数据科学】Scikit-learn

    Scikit-learn 是 开源的Python库 ,通过统一的界面实现 机器学习 、 预处理 、 交叉验证及可视化算法 。   以上是使用 scikit-learn 库 进行 k-最近邻(KNN)分类 的流程,得到 KNN 分类器在 iris 数据集上的预测准确率。    Scikit-learn 处理的数据是 存储为 NumPy 数组或 SciPy 稀疏矩阵

    2024年02月07日
    浏览(45)
  • 【scikit-learn基础】--概述

    Scikit-learn 是一个基于 Python 的开源机器学习库,它提供了大量的机器学习算法和工具,方便用户进行数据挖掘、分析和预测。 Scikit-learn 是基于另外两个知名的库 Scipy 和 Numpy 的, 关于 Scipy 和 Numpy 等库,之前的系列文章中有介绍: Scipy 基础系列 Numpy 基础系列 自从 AlphaGo 再度

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包