前期回顾
第一期:介绍了什么是支持向量,以及支持向量机的发展历程;
第二期:介绍了线性支持向量机(LSVM)的原理和一般算法流程,讨论了软间隔的处理方式;
本期概述
•非线性分类引入
•核函数
•线性不可分的处理方法
•非线性SVM 算法
1 非线性分类引入
如图4所示,在一维空间(原空间)上有一些点,但是无法利用LSVM将其分类(线性不可分问题),因为找不到一个超平面(此时是点)将其分开。此时,有了新的想法,将这些点映射到二维空间(特征空间)中去,那么可以找到一个超平面(直线)将这两类点分开!这里采用的映射非常简单,就是利用函数y = x^2 将x映射成(x, x^2),这就是核方法的一个最简单应用!
图4:特征空间映射
图4的matlab源代码
close all
%% 一维样本
subplot(121)
x=[-2 -3 0 2 4 5 6];
y=[-6 7 8];
scatter(x,x*0,50,'filled','r');hold on
scatter(y,y*0,50,'filled','b');
set(gcf,'Color','w')
set(gca,'LineWidth',2)
title('原空间')
axis equal
axis([-8 12 0 0.1])
grid off
%% 二维样本
% 将x映射到(x,x^2)的二维空间!
subplot(122)
scatter(x,x.^2,50,'filled','r');hold on
scatter(y,y.^2,50,'filled','b');
plot([-8 12],[20 50]+2,'m','LineWidth',2)
set(gcf,'Color','w')
set(gca,'LineWidth',2)
title('特征空间')
axis equal
axis([-8 12 0 100])
grid on
2 核函数
将原始低维空间中的向量作为输入向量,并返回特征空间(映射后的数据空间, 通常是更高维)中向量的点积的函数称为核函数。使用核函数,不需要显式地将特征空间中的函数值算出来(当然,如果能算出来也可以算出来),因为许多算法只需要特征空间中的内积(内积是标量);而不需要数据的坐标。以一个简单的例子来说明:
数求出内积即可。
这里的映射是随机构造的,也可能构造方式不唯一,我们也不可能一一去构造映射,再去求核函数。幸运的是,先贤大佬们已经为我们构造了很多核函数,大家只要自行选择使用即可!
3 线性不可分的处理方法
对于输入空间中的非线性分类问题,可以通过非线性变换将它转化为某个高维空间中的线性分类问题,在高维空间中学习线性支持向量机。由于在线性支持向量机学习的过程中,目标函数和分类决策函数都只涉及样本和样本之间的内积,所以不需要显式地指定非线性变换到底是什么,而只要用核函数替换非线性变换后得到的高维样本的内积即可。
最简单粗暴的解释就是将LSVM 推导过程中的(x, y) 替换成K(x, y)即可。具体的,可以比较非线性SVM 算法与LSVM 算法的细微差别!
4 非线性SVM 算法
非线性SVM算法
***更多完整资料请看本人主页介绍***