matlab svm的可视化----使用quadprog 求解SVM对偶问题
2020年12月6日00:09:50
解决问题: matlab求解凸优化工具箱使用
SVM 的原始数据、支持向量、决策边界可视化
高斯非线性核函数
简单的调参过程
可优化扩展方向:其他经典模型的实现
其他核函数的实现
代码优化----减少循环嵌套
quadprog Quadratic programming.
code
main.m
clc;clear
%%
% main
% 使用quadprog 求解凸优化实现 SVM-软间隔基本问题
% @author haoqi
% @version 1
% */
%% 载入数据
load('trainData.txt')
X = trainData(:,1:2);
X = zscore(X); % 数据标准化
Y = trainData(:,3);
% 2-8 fold
X_test = X(ceil(length(X)*0.8):end,:)
Y_test = Y(ceil(length(X)*0.8):end,:)
X = X(1:ceil(length(X)*0.8),:);
Y = Y(1:length(X),:);
class1 = X((Y(:,1)==1),:);
class2 = X((Y(:,1)==-1),:);
[m n]=size(X);
%% 设置参数调整过程
c = [1 10 100 1000 ];
sigma = [0.001 0.01 0.1 1 10 ];
lambda = zeros(m,1,5,6);
b = zeros(1,5,6);
accuracy = zeros(4,5);
k = 0;% idx of subplot
%% 生成阵点
xx = linspace(min(X(:,1)),max(X(:,1)),50);
yy = linspace(min(X(:,2)),max(X(:,2)),50);
[x1,y1] = meshgrid(xx,yy);
for i=1:4
for j=1:5
k= k+1;
[lambda(:,:,i,j) b(:,i,j)] = svm_dual(X,Y,c(i),sigma(j));
W= lambda(:,:,i,j);
subplot(4,5,k)
%% plot orgin data
scatter(class1(:,1),class1(:,2),'y','filled');
hold on
scatter(class2(:,1),class2(:,2),'b','filled');
suppter_v_index = find(W>0.9); % support vectors(SVs)
suppter_v = X(suppter_v_index,:);
hold on