如何从支持向量机绘制 Z 轴上的内核?

问题描述 投票:0回答:0

我做了一个支持向量机代码,我想用 Z 轴上的内核绘制散点图。

首先,这是我的代码。

% Clear
clear all
close all

% Test data and labels y
X = [1 2; 1 1; 2 1; 7 7; 8 7; 7 8];
y = [1;1;1;-1;-1;-1];

% How many labels
m = size(y, 1);

% Polynomial kernel 2:nd
K = @(x1,x2) (1 + x1*x2').^2;

% Construct the gram-matrix Q
Q = zeros(m,m);
for i = 1:m
    for j = 1:m
        Q(i,j) = y(i)*y(j)*K(X(i,:), X(j,:));
    end
end

% Create QP-solution
c = -ones(m, 1);
A = y';
b = 0;
[x, solution] = quadprog(Q, c, A, b);

% Create bias and weights for the hyper plane
epsilon = 1e-6;
sv_idx = find(x > epsilon);
b = mean(y(sv_idx) - X(sv_idx,:)*X'*diag(y)*x);
w = X'*diag(y)*x;

% Create the hyper plane
[x1, x2] = meshgrid(min(X(:, 1)):max(X(:, 1)), min(X(:, 2)):max(X(:, 2)));
z = zeros(size(x1));
for i = 1:size(x1,1)
    for j = 1:size(x2,2)
        z(i,j) = -w(1)*x1(i,j) - w(2)*x2(i,j) - b;
    end
end

% Plot the hyper plane
surf(x1, x2, z, 'EdgeColor','none');
view(3);

% Plot the measurements
hold on
scatter3(X(:,1), X(:,2), y, 50, y, 'filled');

函数quadprog可以在这里找到。

我有一个名为

X
的矩阵。它有
6
行和
2
列。每一行都是一个测量值,
y
确定它是
1
类还是
-1
类。换句话说,类标签。

X
的问题是它在第二个维度上,我需要把它放到第三个维度上 3D。因此,我可以使用内核为我的矩阵
X
提供另一列数据。

K = @(x1,x2) (1 + x1*x2').^2;

但问题是

K
是一个矩阵,而不是
extra
X
列。正如您在此处看到的那样,这使得绘制我的散点数据变得更加困难。

 scatter3(X(:,1), X(:,2), y, 50, y, 'filled');

当我绘制

scatter3
时,测量值放置在
exactly
-1
1
远离超平面,因为
y
只包含负值和正值。

问题:

如果我有一个矩阵

X
,由于二次规划过程,我将其转换为
Q
。但我需要绘制散点图的深度,而不仅仅是使用
-1
1
作为 Z 轴值。

如何得到散点图的

deepth
?我需要为 Z 轴设置正确的值。

如果你不知道什么是支持向量机,那么这张图解释了有一个超平面将两个不同的类分开。

matlab machine-learning svm scatter-plot
© www.soinside.com 2019 - 2024. All rights reserved.