多标签分类问题 [case study]

多标签问题

比如音乐,同一首歌曲有不同的标签,比如流行,pop,R&B,民族等
每个实例所属于的类别不是唯一的,同一个实例可以同时属于多个类别。

多类别问题

每个实例所属于的类别是唯一的,同一个实例不能同时属于多个类别。

软件包

sklearn提供了独立的用于多标签问题的软件包 scikit-multilearn

多标签数据集

多标签数据集(by MULAN )
这些数据集的格式:arff

利用scipy加载数据集:

import scipy
from scipy.io import arff
data, meta = scipy.io.arff.loadarff('yeast-train.arff')
df = pd.DataFrame(data)
多标签分类问题 [case study]_第1张图片
image.png

Attr: 表示属性,class:表示类别

sklearn.dataset 模块可以生成人工多标签数据集

from sklearn.datasets import make_multilabel_classification
# this will generate a random multi-label dataset
X, y = make_multilabel_classification(sparse = True, n_labels = 20,
return_indicator = 'sparse', allow_unlabeled = False)

解决多标签问题的技术

  1. 转换问题为多分类问题
  2. 调整多分类算法适应多标签问题
  3. Ensemble 方法

转换问题

  1. Binary Relevance (二值相关)
  2. Classifier Chains (分类器串联)
  3. Label Powerset (标签集合)

Binary Relevance

将多标签问题转换为多个分类问题。例如,


多标签分类问题 [case study]_第2张图片
image.png

多标签分类问题 [case study]_第3张图片
image.png
# using binary relevance
from skmultilearn.problem_transform import BinaryRelevance
from sklearn.naive_bayes import GaussianNB

# initialize binary relevance multi-label classifier
# with a gaussian naive bayes base classifier
classifier = BinaryRelevance(GaussianNB())

# train
classifier.fit(X_train, y_train)

# predict
predictions = classifier.predict(X_test)

多标签问题不能使用通常的多分类问题的 metrics,我们使用 accuracy_score 计算预测标签集合和真实标签集合的准确性

from sklearn.metrics import accuracy_score
accuracy_score(y_test,predictions)

Classifier Chains

多标签分类问题 [case study]_第4张图片
image.png

黄色区域为输入空间,白色区域代表学习目标。
该方法和 Binary relevance很相似,区别在于:考虑了标签之间的相关性

# using classifier chains
from skmultilearn.problem_transform import ClassifierChain
from sklearn.naive_bayes import GaussianNB

# initialize classifier chains multi-label classifier
# with a gaussian naive bayes base classifier
classifier = ClassifierChain(GaussianNB())

# train
classifier.fit(X_train, y_train)

# predict
predictions = classifier.predict(X_test)

accuracy_score(y_test,predictions)

Label Powerset

多标签分类问题 [case study]_第5张图片
image.png

多标签分类问题 [case study]_第6张图片
image.png

相同颜色表示对应的标签一致,因此可以讲他们看成同一类。转化成多分类问题。
缺点:当数据集很大时,类别数目非常多,会增加模型复杂度,导致精确度降低

# using Label Powerset
from skmultilearn.problem_transform import LabelPowerset
from sklearn.naive_bayes import GaussianNB

# initialize Label Powerset multi-label classifier
# with a gaussian naive bayes base classifier
classifier = LabelPowerset(GaussianNB())

# train
classifier.fit(X_train, y_train)

# predict
predictions = classifier.predict(X_test)

accuracy_score(y_test,predictions)

Adapted Algorithm

多标签knn算法

from skmultilearn.adapt import MLkNN

classifier = MLkNN(k=20)

# train
classifier.fit(X_train, y_train)

# predict
predictions = classifier.predict(X_test)

accuracy_score(y_test,predictions)

Ensemble Approaches

通常能够提供更好的效果。
参见 Scikit-Multilearn library

参考

  1. 原文

你可能感兴趣的:(多标签分类问题 [case study])