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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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