解决多标签分类问题的技术

摘要:
基本上,有三种方法可以解决多标签分类问题,即:问题转换和自适应算法集成方法4.1问题转换在这种方法中,我们将尝试将多标签问题转换为单标签问题。现在,在多标签分类问题中,我们不能简单地使用我们的标准来计算预测的准确性。因此,标签powerset将此问题转化为单个多类问题,如下所示。例如,kNN的多标签版本由MLkNN表示。

多标签分类基本上,有三种方法来解决一个多标签分类问题,即:

  1. 问题转换
  2. 改编算法
  3. 集成方法

4.1问题转换

在这个方法中,我们将尝试把多标签问题转换为单标签问题。这种方法可以用三种不同的方式进行:

  1. 二元关联(Binary Relevance)
  2. 分类器链(Classifier Chains)
  3. 标签Powerset(Label Powerset)

4.4.1二元关联(Binary Relevance)

这是最简单的技术,它基本上把每个标签当作单独的一个类分类问题。例如,让我们考虑如下所示的一个案例。我们有这样的数据集,X是独立的特征,Y是目标变量。

解决多标签分类问题的技术第1张

在二元关联中,这个问题被分解成4个不同的类分类问题,如下图所示。

解决多标签分类问题的技术第2张

我们不需要手动操作,multi-learn库在python中提供了它的实现。那么,让我们看看它在随机生成的数据上的实现。

# 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)

注意:在这里,我们使用了Naive Bayes的算法,你也可以使用任何其他的分类算法。

现在,在一个多标签分类问题中,我们不能简单地用我们的标准来计算我们的预测的准确性。所以,我们将使用accuracy score。这个函数计算子集的精度,这意味着预测的标签集应该与真正的标签集完全匹配。

那么,让我们计算一下预测的准确性。

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

我们的准确率达到了45%,还不算太糟。它是最简单和有效的方法,但是这种方法的惟一缺点是它不考虑标签的相关性,因为它单独处理每个目标变量。

4.1.2分类器链(Classifier Chains)

在这种情况下,第一个分类器只在输入数据上进行训练,然后每个分类器都在输入空间和链上的所有之前的分类器上进行训练。
让我们试着通过一个例子来理解这个问题。在下面给出的数据集里,我们将X作为输入空间,而Y作为标签。

解决多标签分类问题的技术第3张

在分类器链中,这个问题将被转换成4个不同的标签问题,就像下面所示。黄色部分是输入空间,白色部分代表目标变量。

解决多标签分类问题的技术第4张

这与二元关联非常相似,唯一的区别在于它是为了保持标签相关性而形成的。那么,让我们尝试使用multi-learn库来实现它。

# 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)
0.21212121212121213

我们可以看到,使用这个我们得到了21%的准确率,这比二元关联要低得多。可能是因为没有标签相关性,因为我们已经随机生成了数据。

4.1.3标签Powerset(Label Powerset)

在这方面,我们将问题转化为一个多类问题,一个多类分类器在训练数据中发现的所有唯一的标签组合上被训练。让我们通过一个例子来理解它。

解决多标签分类问题的技术第5张

在这一点上,我们发现x1和x4有相同的标签。同样的,x3和x6有相同的标签。因此,标签powerset将这个问题转换为一个单一的多类问题,如下所示。

解决多标签分类问题的技术第6张

因此,标签powerset给训练集中的每一个可能的标签组合提供了一个独特的类。让我们看看它在Python中的实现。

# 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)
0.5757575757575758

这使我们在之前讨论过的三个问题中得到了最高的准确性,57%。唯一的缺点是随着训练数据的增加,类的数量也会增加。因此,增加了模型的复杂性,并降低了精确度。

现在,让我们看一下解决多标签分类问题的第二种方法。

4.2改编算法

改编算法来直接执行多标签分类,而不是将问题转化为不同的问题子集。例如,kNN的多标签版本是由MLkNN表示的。那么,让我们快速地在我们的随机生成的数据集上实现这个。

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)
0.69

很好,你的测试数据已经达到了69%的准确率。

在一些算法中,例如随机森林(Random Forest)和岭回归(Ridge regression),Sci-kit learn提供了多标签分类的内置支持。因此,你可以直接调用它们并预测输出。

如果你想了解更多关于其他类型的改编算法,你可以查看multi-learn库。地址:http://scikit.ml/api/api/skmultilearn.adapt.html#module-skmultilearn.adapt

4.3集成方法

集成总是能产生更好的效果。Scikit-Multilearn库提供不同的组合分类功能,你可以使用它来获得更好的结果。

对于直接实现,你可以查看:http://scikit.ml/api/classify.html#ensemble-approaches

免责声明:文章转载自《解决多标签分类问题的技术》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇将两个ListMap中同下标的map去重合并java反射调用get/set方法,你还在拼接方法名吗?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

机器学习相关的面试问题

机器学习: 伪代码实现:LR、梯度下降、最小二乘、KNN、Kmeans; 基本知识:1)监督与非监督区别;2)L1L2区别;3)生成模型和判别模型区别 算法的优缺点以及相应解决方案:k-means, KNN, apriori 算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神经网络,协同过滤,em算法 常见问题:...

机器学习算法中的评价指标(准确率、召回率、F值、ROC、AUC等)

参考链接:https://www.cnblogs.com/Zhi-Z/p/8728168.html 具体更详细的可以查阅周志华的西瓜书第二章,写的非常详细~ 一、机器学习性能评估指标 1.准确率(Accurary) 准确率是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。 准确率确实是一个很...

Halcon学习笔记之支持向量机(二)

例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法。通过这个案例,相信大家可以对支持向量机的使用有一个更加清晰的了解。在相当多的检测和识别的应用中,都可以使用相同的方法来解决分类问题。 图1. 卤素灯图像 大致原理: 一、准备阶段:...

维数灾难

Content 1 引言 2 维数灾难与过拟和 3 怎样避免维数灾难 4 总结  1 引言 本文章讨论的话题是“curse of dimension”,即维数灾难,并解释在分类它的重要性,在下面的章节我会对这个概念做一个直观的解释,并清晰的描述一个由维数灾难引起的过度拟合的问题。 下面不如正题,考虑我们有一堆猫和狗的图片,现在要做一个分类器,它可以把猫和狗...

第九节、人脸检测之Haar分类器

人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。 目前人脸检测的方法主要有两大类:基于知识和基于统计。 基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来...

PythonOpencv-分类器—SVM,KNearest,RTrees,Boost,MLP

原文链接:http://blog.csdn.net/gjy095/article/details/9243153 上一篇文章,不是很详细,这一篇解释的清晰些,请访问原始链接。 Rtrees介绍!参考链接:http://docs.opencv.org/modules/ml/doc/random_trees.html Opencv提供了几种分类器,例程里通过字...