微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。