支持向量机(SVM)
假设函数:
形式
与神经网络的两点区别:
1.代价函数
可以从这个对比上看出原来的神经网络是对数形式的sigmoid函数我们将其替换为cost1和cost0,分别意味着预测结果距离1的代价和距离0的代价。
新代价函数图形,当距离足够远时直接令Z=0;
2.C的引入
正则化项前不再拥有参数
λ
λ
λ,反而是预测项拥有了系数C,我们这里可以把C理解为
1
/
λ
1/λ
1/λ。
大间距分类器
如图的一组正负样本,SVM所做的正式那条黑色的直线,尽力以最大的间距将两组数据分割开来(可以理解为到蓝色的直线的距离)
数学理解
为何能进行大间距分类?
我们将
θ
T
?
X
θ^T*X
θT?X看成向量内积的形式,那么其也可以写成
P
×
∣
∣
θ
∣
∣
P×||θ||
P×∣∣θ∣∣的形式,其中P为X在θ方向上的投影,因为我们想要我们的代价函数取最小值,所以我们会令
P
×
∣
∣
θ
∣
∣
P×||θ||
P×∣∣θ∣∣的绝对值尽量大,在θ不变的情况下,即令P的值尽量大
在这个示例里我们会让θ尽量贴近于坐标轴,而分割线则会垂直于坐标轴。
核函数(kernel)
引入
为了解决复杂的非线性分类问题
如图所示,如果想要解决这种问题,用神经网络的方法是将原来的特征进行排列组合,引入大量的多项式比如
x
1
2
,
x
2
x
3
x_1^2,x_2x_3
x12?,x2?x3?作为新的特征,但是这样会拖慢计算机的运行速度。
在SVM中我们引入了新的构造特征值的方法,即利用核函数。
也可理解为相似函数
给定一个训练样本x,我们利用x的各个特征与我们预先选定的地标(landmarks)
l
1
,
l
2
,
l
3
l_1,l_2,l_3
l1?,l2?,l3?的近似程度来选取新的特征。
高斯核函数:
当x与
l
1
l_1
l1?靠近时,
f
1
f_1
f1?的值趋近于1
当x与
l
1
l_1
l1?远离时,
f
1
f_1
f1?的值趋近于0
实例
对于如图的模型,假设我们训练出的参数如上,那最终我们会形成这样的分类效果。
特征点的选取
若训练集有m个样本,则选取m个特征点
对每一个样本都对其他所有点取高斯核函数,那么每一个点都可以形成一个这样的m维特征向量
方程进化
我们的代价函数也会相应地变成这样:
这时我们的判断就是当
θ
T
f
(
i
)
>
0
θ^Tf^{(i)}>0
θTf(i)>0时,predict y=1
当
θ
T
f
(
i
)
<
0
θ^Tf^{(i)}<0
θTf(i)<0时,predict y=0
有时我们也会用
θ
T
?
M
?
θ
θ^T*M*θ
θT?M?θ来代替
θ
2
θ^2
θ2,其中M的值取决于核函数
这样做的目的是简化计算,提高运行时的速度
参数选择
因为
C
=
1
/
λ
C=1/λ
C=1/λ
所以C过大,意味着λ偏小,可能导致高方差,过拟合
所以C过大,意味着λ偏大,可能导致高偏差,欠拟合
σ的大小和核函数的平滑程度有关
而σ过大,意味着高偏差,欠拟合
而σ过小,意味着高方差,过拟合
线性核函数
即不适用核函数的情况‘
因为它的作用是仅仅提供一个线性分类器,因此得名
适用于有大量特征值和很少数据集的情况
应用
多类分类问题
可以应用one vs all的方法,也可以直接调用SVM软件库里的多分类器(一般会有)
需要做的事
- 确定参数C
- 选择恰当的核函数(一般是高斯或线性)
算法选择
n为特征数,m为训练样本数。
SVM的速度主要取决于m的大小,逻辑回归速度取决于n的大小
-
n>>m,即训练集数据量不够支持我们训练一个复杂的非线性模型 我们选用逻辑回归模型或者不带核函数的支持向量机。 -
如果n较小,而且m大小中等 例如n在 1-1000 之间,而m在10-10000之间 使用高斯核函数的支持向量机。 -
如果n较小,而m较大,例如n在1-1000之间,而m大于50000 则使用支持向量机会非常慢,解决方案是创造、增加更多的特征 然后使用逻辑回归或不带核函数的支持向量机。
另这些情况使用训练得当的神经网络都会得到恰当的结果
但是比如上面第二种种情况SVM的速度会远快于神经网络
|