多标签学习的利器——MLkNN

一、 MLkNN是什么

1、MLkNN全称为Multi-Label k-Nearest Neighbor。它是一种基于kNN算法的多标签分类算法。

2、其思想是将每个标签看作一维空间,在这个N维空间中,将每个样本看作一个点,尽可能保证样本点与其所属的N个标签点的距离比离其它标签点更近,从而将样本分类。

3、MLkNN算法的主要思路是对每个标签独立运用k-NN算法确定该标签的可能取值范围。而对于每个标签来说,所确定的可能取值范围可以是任何子集。

二、 MLkNN的实现原理

1、首先,利用训练数据建立一个多标签模型。同时,构建一个词典,其中包含了每个标签的所有可能取值。


from skmultilearn.adapt import MLkNN
from sklearn.metrics import accuracy_score

model = MLkNN(k=20)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print("Accuracy = ", accuracy_score(y_test, predictions))

其中,k是最近邻的数目。建模时需要输入权重改变策略,有标签计数、平等、对数等多种选项。

2、模型得出多个相似度值时,则取目标值最大的标签作为预测的分类。


y_train_pred = model.predict_proba(X_train)
y_test_pred = model.predict_proba(X_test)

三、 MLkNN的优缺点

1、优点:
1.1 适用于训练集的数据量较大,但标签数相对不大的情况,例如文本分类、图片标注等任务;
1.2 准确度较高,尤其针对单标签,使得模型的泛化能力较好;
1.3 比起传统机器学习算法,运行时间较短;
1.4 将训练阶段和测试阶段的计算分开,可以并行计算,这使得算法的效率更高。

2、缺点:
2.1 MLkNN模型对数据集的特征较为敏感,因此需要利用一些特征选择的方法来进行降维;
2.2 MLkNN的计算方式在训练集非常大时,计算量较大;
2.3 对于标签取值的不平衡情况,模型的表现较为糟糕,需要进行平衡处理。

四、 MLkNN的应用案例

1、文本分类:MLkNN主要应用于文本的多标签分类。例如,为文章标注多个标签,使其最终能够被准确分类至目标标签中。

2、音乐分类:利用MLkNN算法,对音乐集合进行分类,既可以从风格的角度划分,也可以从情感色调的角度进行划分。

3、视频分类:针对大量的视频标签进行分类,例如对视频属性进行标注(如情感、性别、年龄、场景等)。


import numpy as np
from skmultilearn.dataset import load_dataset
from skmultilearn.model_selection import iterative_train_test_split
from skmultilearn.adapt import MLkNN
from sklearn.metrics import accuracy_score

X, y = load_dataset('scene')
X_train, y_train, X_test, y_test = iterative_train_test_split(X, y, test_size = 0.2)
model = MLkNN(k=20)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print("Accuracy = ", accuracy_score(y_test, predictions))

原创文章,作者:YDBK,如若转载,请注明出处:https://www.506064.com/n/136542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
YDBKYDBK
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • Python刷课:优化学习体验的利器

    Python刷课作为一种利用自动化技术优化学习体验的工具已经被广泛应用。它可以帮助用户自动登录、自动答题等,让用户在学习过程中可以更加专注于知识本身,提高效率,增加学习乐趣。 一、…

    编程 2025-04-29
  • lsw2u1:全能编程开发工程师的利器

    lsw2u1是一款多功能工具,可以为全能编程开发工程师提供便利的支持。本文将从多个方面对lsw2u1做详细阐述,并给出对应代码示例。 一、快速存取代码段 在日常开发中,我们总会使用…

    编程 2025-04-29
  • Python条形图添加数据标签

    Python是一种多用途、高级、解释型编程语言。它是一种动态类型语言,具有高级内置数据结构,支持面向对象编程、结构化编程和函数式编程方式。Python语言旨在简化代码的阅读、编写和…

    编程 2025-04-28
  • HBuilder2.0:一站式开发利器

    本文将从如下几个方面对HBuilder2.0进行详细阐述,帮助初学者快速了解并开始使用该工具: 一、简介 HBuilder2.0是一个跨平台的HTML5集成开发工具。它综合了编码、…

    编程 2025-04-28
  • Python按标签分类切分数据解析

    本文将为大家详细介绍如何使用Python按标签分类切分数据。如果您需要对数据进行分类处理,可以阅读本文,并按照给出的例子运用到实际的项目之中。 一、按标签分类切分数据的概念及应用场…

    编程 2025-04-28
  • Powersploit:安全评估与渗透测试的利器

    本文将重点介绍Powersploit,并给出相关的完整的代码示例,帮助安全人员更好地运用Powersploit进行安全评估和渗透测试。 一、Powersploit简介 Powers…

    编程 2025-04-28
  • JL Transaction – 实现分布式事务管理的利器

    本文将为大家介绍JL Transaction,这是一款可以实现分布式事务管理的开源事务框架,它可以帮助企业在分布式环境下有效地解决事务的一致性问题,从而保障系统的稳定性和可靠性。 …

    编程 2025-04-28
  • 全自动股票交易软件:实现自动交易赚取更多收益的利器

    全自动股票交易软件是一款能够帮助股票投资者实现自动交易,据此获取更多收益的利器。本文将从多个方面详细阐述该软件的特点、优点、使用方法及相关注意事项,以期帮助读者更好地了解和使用该软…

    编程 2025-04-27
  • Python饼状图的标签设置

    Python是一门功能强大的编程语言,可以进行各种数据可视化操作,其中饼状图是一种常用的图表。在Python中,我们可以通过设置饼状图的标签来实现更好的展示效果。本文将从多个方面对…

    编程 2025-04-27
  • 基于标签文件管理

    本文将从文件管理的角度出发,深入探讨基于标签的文件管理。 一、标签文件管理简介 标签文件管理即通过给文件打上标签来进行分类和管理的方式。与传统文件管理相比,标签文件管理更加灵活方便…

    编程 2025-04-27

发表回复

登录后才能评论