gpt4 book ai didi

python - MultiOutputClassifier + SVC 的类数量有限?

转载 作者:行者123 更新时间:2023-12-04 08:53:03 31 4
gpt4 key购买 nike

我正在处理机器学习问题,但我遇到了使用 MultiOutputClassifier 可以运行的类(class)数量限制和 SVC .特别是,当类数> 14 时,拟合失败。我按照 MultiOutputClassifier 中报告的示例进行操作手册页,但使用 SVCn_classes=15 :

import numpy as np
from sklearn.datasets import make_multilabel_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.svm import SVC

X, y = make_multilabel_classification(n_classes=15, random_state=0)
clf = MultiOutputClassifier(SVC()).fit(X, y)
此代码失败并显示以下错误消息:

"ValueError: The number of classes has to be greater than one; got 1 class"


通过使用 KNeighborsClassifier它不会失败。
怎么了?我怎样才能让它工作?

最佳答案

问题在于错误消息本身,因为它具有误导性。您的问题是 n_samples 的默认值设置为 100 并且使用 n_classes=15 时,有些类没有在 y 中表示输出是错误的根源。分类器期望每个类至少被表示一次。
只需更改 n_samples对于更大的值,假设 1000 将“解决”错误,因为现在,每个类都将被表示。

X, y = make_multilabel_classification(n_classes=15, random_state=0, n_samples=1000)
clf = MultiOutputClassifier(SVC()).fit(X, y)
这里是简单的复制案例。
给定 (5x5) 输入和 (5x5) 输出(身份矩阵),这将工作得很好。
y = np.eye(5)
x = np.ones((5, 5))
clf = MultiOutputClassifier(SVC()).fit(x, y)
现在让我们更改 y 的第一行有 1改为在第二列中(第一类将不再表示)
y = np.eye(5)
y[0, 0] = 0
y[0, 1] = 1
x = np.ones((5, 5))
clf = MultiOutputClassifier(SVC()).fit(x, y)
这将抛出相同的错误

ValueError: The number of classes has to be greater than one; got 1 class

关于python - MultiOutputClassifier + SVC 的类数量有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63994637/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com