绘制核 SVM (RBF) 的决策边界

机器算法验证 数据可视化 支持向量机 libsvm 内核技巧
2022-03-25 21:01:57

假设我们有一个线性不可分的 2D 点的训练集。我用 RBF 内核训练二进制 SVM 以便对它们进行分类。我想要做的是绘制决策边界。

我训练的内核 SVM 导致以下形式的决策函数: 其中是支持向量的数量,分别是第个支持向量、相应的正拉格朗日乘数和相关的真值标签。我使用 LIBSVM 包来训练 SVM,因此以上所有内容都可以从创建的模型文件中得知。

f(x)=i=1Nsαiyik(x,xi)+b,
Nsxiαiyii

如果我们扩展上述决策函数,我们看到它是以支持向量为中心的高斯和,即 其中\gamma=\frac{1}{2\sigma^2}>0是用户定义的参数。

f(x)=i=1Nsαiyiexp(γxxi2)+b,
γ=12σ2>0

我如何在输入数据的同一空间(欧几里得二维空间)中绘制决策函数的轮廓?您能否提供一些方程式或想法?我已经尝试了一些东西,但我没有运气!

2个回答

我想出了需要做什么。实际上,这很简单,但似乎我有一个 matlaboid 错误......这是“XOR”二进制分类问题的代码和结果图。

gamma     = getGamma();
b         = getB();
points_x1 = linspace(xLimits(1), xLimits(2), 100);
points_x2 = linspace(yLimits(1), yLimits(2), 100);
[X1, X2]  = meshgrid(points_x1, points_x2);

% Initialize f
f = ones(length(points_x1), length(points_x2))*rho;

% Iter. all SVs
for i=1:N_sv
    alpha_i = getAlpha(i);
    sv_i    = getSV(i);
    for j=1:length(points_x1)
        for k=1:length(points_x2)
            x = [points_x1(j);points_x2(k)];
            f(j,k) = f(j,k) + alpha_i*y_i*kernel_func(gamma, x, sv_i);
        end
    end    
end

surf(X1,X2,f);
shading interp;
lighting phong;
alpha(.6)

contourf(X1, X2, f, 1);

函数在哪里

function k = kernel_func(gamma, x, x_i)
    k = exp(-gamma*norm(x - x_i)^2);
end

只产生核函数(RBF核),k(x,x)=exp(γxx2)

这是 XOR 问题的结果。这里γ=4

在此处输入图像描述

使用网格方法,将您的 2D 空间划分为 ak x k 网格,将该点作为 SVM 中的样本进行评估(即预测标签),并绘制所有点的预测。