1
我想实现一个svmtrain函数。它在训练时起作用,它在对训练矩阵进行分类的采样数相同的样本矩阵时起作用。我做错了什么?使用我自己的内核函数时的SVM分类错误 - Matlab
主要功能
function [ output_args ] = RBFTest(xtrain, ytrain)
output_args=svmtrain(xtrain,ytrain,'Kernel_Function',@mine,...
'boxconstraint',1);
end
核函数(其设定为与RBF内核,我试图加速使用GPU)
function [ output ] = mine(U,V)
sig=1;
n=size(U,1);
K=U*V'/sig^2;
d=diag(K);
K=K-ones(n,1)*d'/2;
K=K-d*ones(1,n)/2;
output=exp(K);
end
我训练....
>> R2=RBFTest(X(1:3000,:),Y(1:3000,:))
R2 =
SupportVectors: [3000x57 double]
Alpha: [3000x1 double]
Bias: -0.0219
KernelFunction: @mine
KernelFunctionArgs: {}
GroupNames: [3000x1 double]
SupportVectorIndices: [3000x1 double]
ScaleData: [1x1 struct]
FigureHandles: []
我尝试对样本中较小的一部分进行分类...但它不起作用
>> mean(svmclassify(R2,X(1:2000,:))==Y(1:2000))
Error using svmclassify (line 114)
An error was encountered during classification.
Matrix dimensions must agree.
我尝试分类相同的数据用于训练...工作!
>> mean(svmclassify(R2,X(1:3000,:))==Y(1:3000))
ans =
0.9990
我再培训与较小的样本....
>> R2=RBFTest(X(1:1000,:),Y(1:1000,:))
R2 =
SupportVectors: [1000x57 double]
Alpha: [1000x1 double]
Bias: -0.0549
KernelFunction: @mine
KernelFunctionArgs: {}
GroupNames: [1000x1 double]
SupportVectorIndices: [1000x1 double]
ScaleData: [1x1 struct]
FigureHandles: []
我归类不同的样本,但使用相同的矩阵和矢量大小...以及它的工作原理
>> mean(svmclassify(R2,X(1001:2000,:))==Y(1001:2000))
ans =
0.4610
为什么它不使用不同大小的训练和分类矩阵时不工作?
非常感谢!现在它工作! – user3774343