我使用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秒钟。
这是为什么?我做错了吗?
答案 0 :(得分:0)
可能是由于代码优化。 MATLAB工程师花了很多时间来优化他们的代码,所以我敢打赌,尽管你的代码与内置函数的代码相同,但它并不像MATLAB代码那样快。