我正在使用Matlab函数fitcsvm来训练带有RBF内核的SVM . 我正在使用以下电话:
SVMModel = fitcsvm(X_train,labels,'KernelFunction','rbf','KernelScale',0.2087,'BoxConstraint',2.8779);
[~,scores] = predict(SVMModel,X_test);
X_train是具有训练数据的NxD矩阵,标签是具有训练数据的标签的Nx1向量,X_test是具有测试数据点的MxD矩阵 .
现在我想使用自定义内核 . 首先,我决定尝试RBF内核 . 实施如下:
SVMModel = fitcsvm(X_train,labels,'KernelFunction','rbfKernel','BoxConstraint', 2.8779);
[~,scores] = predict(SVMModel,X_test);
function K = rbfKernel(U,V)
sigma = 0.2087;
gamma = 1 ./ (2*(sigma ^2));
K = exp(-gamma .* pdist2(U,V,'euclidean').^2);
end
我将函数rbfKernel存储在rbfKernel.m文件中 .
内置内核以及自定义内核的结果非常相似,并且fitcsvm方法非常快速地运行这两种方法 .
问题是使用自定义内核时预测方法非常慢 . 它需要大约1分钟,而内置内核需要5秒 .
为什么是这样?我做错了吗?
1 回答
可能是由于代码优化 . MATLAB工程师花了很多时间来优化他们的代码,所以我敢打赌,尽管你的代码与内置函数的代码相同,但它的执行速度并不像MATLAB代码那么快 .