您的位置:

多标签学习的利器——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))