首页 文章

在Matlab中使用自定义内核预测SVM非常慢

提问于
浏览
2

我正在使用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

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

相关问题