clear;clc;close all
load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,1:3);
y = species(inds);
SVMModel = fitcsvm(X,y,'KernelFunction','polynomial');
sv = SVMModel.SupportVectors;
figure
scatter3(X(:,1),X(:,2),X(:,3),10,categorical(y),'filled')
hold on
plot3(sv(:,1),sv(:,2),sv(:,3),'ko','MarkerSize',10)
hold on
d = 0.02;
[x1Grid,x2Grid,x3Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
min(X(:,2)):d:max(X(:,2)),min(X(:,3)):d:max(X(:,3)));
xGrid = [x1Grid(:),x2Grid(:),x3Grid(:)];
[~,scores] = predict(SVMModel,xGrid);
[faces,verts,colors] = isosurface(x1Grid,x2Grid,x3Grid, reshape(scores(:,2),size(x1Grid)), 0,x1Grid);
p=patch('Vertices', verts, 'Faces', faces, 'FaceColor','k','edgecolor', 'none', 'FaceAlpha', 0.5);
p.FaceColor = 'red';
grid on
box on