SVM classification with different kernels

7 次查看(过去 30 天)
I am using an SVM (SVM_train, Bioinformatics toolbox) to classify data, and I would like to have my final trained SVM models with different kernel functions. I didn't understand how to specify my own kernel maps: if I would like to use a Cauchy kernel defined as
k=(1/(1+(|u-v|^2/sigma))
where u,v are the vectors of the X data, and sigma is the parameter defined by the user (sigma=2.5). How I have to edit this matlab statement?
svmStruct = svmtrain(X,group,'Kernel_Function', 'rbf','RBF_Sigma', 2.5, 'Method', 'QP');
Thank you!
  1 个评论
Jeremy Huard
Jeremy Huard 2023-1-31
Users using R2014b or newer should use the fitcsvm function for for one-class and binary classification or fitcecoc for multiclass classification instead.
There you can specify a custom kernel function by adding the 'KernelFunction','myfunction' name-value pair, where myfunction is the name of your function containing the kernel function definition.

请先登录,再进行评论。

回答(4 个)

Ilya
Ilya 2012-12-27

caterina
caterina 2012-12-28
Hi Ilya anche thank you for you answer. I read it that thread before writing and still I did not understand what it is wrong in my code. I created my kernel code that I saved in a folder 'pgm_qkda'. You can find the code below
clear all
clc;
addpath('/Users/Documents/Parallels/shared/D/KQDA/matlab2/pgm_qda');
x=[3 3 4 5 6 7 8 0.1 0.2
3 4 3 5 7 7 5 0.5 0.6
7 7 2 3 3 4 5 0.4 0.5
3 3 4 5 6 2 6 0.2 0.3];
group=[1,1, 2, 2]';
p1=2.5;
svmStruct = svmtrain(x,group,'Kernel_Function', @(u,v) kfun(u,v,p1), 'Method', 'QP');
The kfun function is defined as:
function kval = kfun(u,v,p1);
dot=((u-v)*(u-v)')/p1;
kval = 1/(1+dot);
Matlab gives me a warning message: Error using ==> svmtrain at 453 Error calculating the kernel function: Matrix dimensions must agree.
I do not understand where is my mistake. If you can help me I really appreciate.
  2 个评论
Ilya
Ilya 2012-12-28
Replace
kval = 1/(1+dot);
with
kval = 1./(1+dot);
./ is for elementwise division. / is for matrix division.
Also, please do not post follow-up questions as answers to your own posts. Use comments for that.
Fourth Sem Geethanjali Electrical and Electronics Engineering
hi
svmStruct = svmtrain(x,group,'Kernel_Function', @(u,v) kfun(u,v,p1), 'Method', 'QP');
how will the function call change if i use fitcsvm instead of svmtrain.
can you please help me.

请先登录,再进行评论。


Sandy
Sandy 2014-10-3
Hi Caterina,
Just want to check whether you are able to rectify tha above issues. I am also getting the same error. Will you post me the code for above custom kernel.
Thanks in advance.

muqdad aljuboori
muqdad aljuboori 2017-4-2
Hi I very interested in this discussion I tried to apply the new funcion in my project but it doesnt work that what i did
SVR1 = fitrsvm(TrainInputs,TrainTargets,...
'KernelFunction', @(u,v) kfun3(u,v) ,...
'KernelScale','auto','Standardize',true);__
and the error is
Error using classreg.learning.modelparams.SVMParams.make (line 225) You must pass 'KernelFunction' as a character vector.
Error in classreg.learning.FitTemplate/fillIfNeeded (line 598) this.MakeModelParams(this.Type,this.MakeModelInputArgs{:});
Error in classreg.learning.FitTemplate.make (line 124) temp = fillIfNeeded(temp,type);
any suggestion ??? thanks
  1 个评论
Jeremy Huard
Jeremy Huard 2023-1-31
You should specify the kernel function as char array:
SVR1 = fitrsvm(TrainInputs,TrainTargets,...
'KernelFunction', 'kfun3',...
'KernelScale','auto','Standardize',true);

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Classification Ensembles 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by