在Matlab

时间:2016-05-11 21:08:15

标签: matlab svm

我使用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 个答案:

答案 0 :(得分:0)

可能是由于代码优化。 MATLAB工程师花了很多时间来优化他们的代码,所以我敢打赌,尽管你的代码与内置函数的代码相同,但它并不像MATLAB代码那样快。