Scikit-learn 多目标分类

我留下了这个示例来创建使用 scikit-learn 的分类器图像。

虽然每个图像都属于单一类别且一切正常,但每个图像可能属于多个类别,例如:白天的狗的照片,夜晚的猫的图片,夜晚的猫和狗的图片等…我编写了:

target=[[0,1],[0,2],[1,2],[0,2,3]]target = MultiLabelBinarizer().fit_transform(target)classifier = svm.SVC(gamma=0.001)classifier.fit(data, target)

但我得到了这个错误:

Traceback (most recent call last):  File "test.py", line 49, in <module>    classifier.fit(data, target)  File "/home/mezzo/.local/lib/python2.7/site-packages/sklearn/svm/base.py", line 151, in fit    y = self._validate_targets(y)  File "/home/mezzo/.local/lib/python2.7/site-packages/sklearn/svm/base.py", line 514, in _validate_targets    y_ = column_or_1d(y, warn=True)  File "/home/mezzo/.local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 551, in column_or_1d    raise ValueError("bad input shape {0}".format(shape))ValueError: bad input shape (4, 4)

完整代码


回答:

Scikit-learn 的 SVM 实现原生不支持多标签分类,尽管它有其他各种支持的分类器


使用 SVM 进行多标签分类也是可能的,通过将每个标签的唯一组合视为一个单独的类。你可以简单地将 target 矩阵中的每一行替换为一个单独的整数标签,这可以通过使用 np.unique 高效完成

d = np.dtype((np.void, target.dtype.itemsize * target.shape[1]))_, ulabels = np.unique(np.ascontiguousarray(target).view(d), return_inverse=True)

然后你可以像单标签分类问题一样训练 SVM:

clf = svm.SVC()clf.fit(data, ulabels)

一个潜在的注意事项是,如果你没有大量的训练样本,分类器对稀有标签组合的表现可能较差。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注