问题描述
我正在尝试使用 SVM 对我的数据进行拟合和分类。 我的输入数据由 11 个特征(维度)和 1335 个样本组成,输出数据由 17 个类(1335x17)组成
from sklearn.svm import SVC
svclassifier = SVC(kernel='linear')
svccl = svclassifier.fit(x_train,y_train)
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)
我的方法哪里错了?
解决方法
SVC
和 GaussianNB
不支持多目标变量分类。
因此,它不会接受一维数组以外的任何东西来解决您需要为每个目标拟合一个分类器的问题。
已经有 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)