使用 SVM 对多维输出类进行分类时出现值错误

Posted

技术标签:

【中文标题】使用 SVM 对多维输出类进行分类时出现值错误【英文标题】:Value Error while classifying for multidimensional output classes using SVMs 【发布时间】:2021-05-30 05:43:39 【问题描述】:

我正在尝试使用 SVM 对我的数据进行拟合和分类。 我的输入数据由 11 个特征(维度)和 1335 个样本组成,输出数据由 17 个类(1335x17)组成

from sklearn.svm import SVC
svclassifier = SVC(kernel='linear')
svccl = svclassifier.fit(x_train, y_train)

(甚至对于 kernel = poly) 我收到以下错误:

ValueError: y should be a 1d array, got an array of shape (934, 17) instead.

当我尝试使用朴素贝叶斯分类器进行分类时出现同样的错误

from sklearn.naive_bayes import GaussianNB 
gnb = GaussianNB().fit(x_train, y_train) 
gnb_predictions = gnb.predict(x_test) 

我的方法哪里错了?

【问题讨论】:

【参考方案1】:

SVCGaussianNB 不支持多目标变量分类。 因此,它不会接受除一维数组之外的任何其他内容来解决您需要为每个目标安装一个分类器的问题。

已经有APIMultioutput classification

您可以将其与您想要的任何分类器结合使用。

将多输出与 SVC 相结合

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

X = np.random.rand(934, 100)
Y = np.random.randint(17, size = [934, 17])

n_samples, n_features = X.shape 

svc = SVC()
multi_target_forest = MultiOutputClassifier(svc, n_jobs=-1)

multi_target_forest.fit(X, Y).predict(X)

结合多输出与 GaussianNB

from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.naive_bayes import GaussianNB 
import numpy as np

X = np.random.rand(934, 100)
Y = np.random.randint(17, size = [934, 17])

n_samples, n_features = X.shape

gnb = GaussianNB()
multi_target_forest = MultiOutputClassifier(gnb, n_jobs=-1)

multi_target_forest.fit(X, Y).predict(X)

【讨论】:

我收到以下错误: ValueError: The number of classes has to be greater than 1;上了一堂课 您提到的错误是针对我上面提供的示例 sn-ps 的吗?如果您将其作为基本代码并修改了配置,我建议您查看 API 文档或查看 ClassifierChain 如果您想做一些自定义的事情。 我按照你提供的API文档,然后尝试了代码。我将数据转换为 ndarray(如文档中所述),然后进一步进行。每次我得到同样的错误: ValueError: Unknown label type: 'continuous' 现在我无法克服这个错误! 看起来你在 y 中传递浮点/双精度值,如果你使用逻辑回归之类的东西,那么它会期望你有整数值 是的,浮点值被传递,因为所有列都标准化为 1。但我的目标值是整数,只有输入特征是浮点值。此外,我使用的是分类器(不是回归模型),所以我认为分类器在处理浮动 pt 值时没有问题? @anuragwagh

以上是关于使用 SVM 对多维输出类进行分类时出现值错误的主要内容,如果未能解决你的问题,请参考以下文章

在训练 SVM 对图像进行分类时设置具有序列错误的数组元素

使用python 3创建字典时出现值错误

在自定义数据集上使用 roboflow 对象检测 Yolov4 pytorch 模型时出现值错误

分类分数:SVM

在 CNN 提取特征之上使用 SVM - 如何进行多类分类?

使用 R2013b MATLAB 版本时出现 SVM 错误