SVM在处理多分类时遇到的问题

最近在做一个关于卷积神经网络的SVM人脸分类的项目,昨天在调试项目的时候,遇到一个很另类的问题,解决了一天的时间,各种方法都试过,对卷积后的特征进行降维,重新去形成特征的结构等等,最后寻找到的原因是SVM训练标签出了问题。

在执行的实例程序:

import numpy as np
import cv2,random
from sklearn import svm
sample=random.sample(range(10),5)
arr=[[1,1],[2,2],[3,3],[4,4]]
labels=[[1,0],[2,0],[3,0],[4,0]]
clf=svm.SVC(decision_function_shape='ovo')
clf.fit(arr,labels)
res=clf.predict([2,2])
print(t)

出现的问题:

这里出现的是 ValueError: bad input shape (4, 2)的问题,主要的原因是设置的输出标签labels的维度错误。

我们知道SVM分类器可以解决多分类问题了,而且在sklearn包中已经有了相应的设置,直接可以训练,设置方法是把SVC的参数decision_function_shape设置为'ovo',表示一对多的模式,一般默认是一对一的模式。

但是SVM处理多分类时输出的标签不能是向量,只能是一个数,不同的数表示不同的类别,也就是在这里需要修改labels的值

labels=[1,2,3,4]

现在我们再运行程序,将正常运行!

附:

这里注意在SVM预测输出的时候,样本必须为一个二维数组,如果不是将出现以下错误:

这里需要将输入改为:

res=clf.predict([[2,2]])
或者:
tmp=[2,2
res=clf.predict(tmp)

如果我发现以上总结哪里问题,欢迎联系QQ:383714800

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值