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

问题描述

我正在尝试使用 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) 

我的方法哪里错了?

解决方法

SVCGaussianNB 不支持多目标变量分类。 因此,它不会接受一维数组以外的任何东西来解决您需要为每个目标拟合一个分类器的问题。

已经有 API Multioutput 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,n_features = X.shape

gnb = GaussianNB()
multi_target_forest = MultiOutputClassifier(gnb,Y).predict(X)