12,支持向量机
12.1优化目标
到目前为止,你已经见过一系列不同的学习算法。在监督学习中,许多学习算法的性能都非常相似,因此,重要的不是你该选择A算法还是B算法,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平。比如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,,,还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(SVM)。SVM,在学习复杂的非线性方程时提供了一种更为清晰,强大的方式。
为了描述支持向量机,将从逻辑回归开始展示我们如何一点一点修改来得到本质上的支持向量机。
那么,在逻辑回归中我们已经熟悉了这里的假设函数形式,和右边的S型激励函数。然而,为了解释一些数学知识,我们用z表示
现在考虑下我们想要逻辑回归做什么:如果有一个y=1的样本,现在我们希望h_θ(x)趋近1.因为我们想要正确地将此样本分类,这就意味着当h_θ(x)趋近于1时,应当远大于0,即z >> 0.相反地,如果我们有另一个样本,即y=0.z << 0
现在开始建立支持向量机,我们从这里开始:
我们会从这个代价函数开始,也就是开始修改,取这里的z=1,我们先画出将要用的代价函数
新的代价函数如上图紫红色的曲线,这里由两条线段组成,即位于右边的水平部分和位于左边的直线部分,先不要过多考虑左边直线部分的斜率,这并不重要。
同理,y=0时:
现在给这两个方程命名,cost1(z)和 cost0(z)。这里的下标指在代价函数中对应的y=1和y=0的情况。现在开始构建支持向量机。
最后有别于逻辑回归输出的概率,在这里,我们的代价函数,当最小化代价函数,获得参数θ时,支持向量机所做的是直接预测y的值是1,or 0
12.2 大边界的直观理解。
有人将支持向量机看作是大间距分类器。
现在我们来看一下,支持向量机中,这个因子会导致什么结果。具体而言,我们考虑一个特例。我们将这个常熟C设置成为一个非常大的值,比如100000
假设C非常大时,我们的优化会尽量使第一项为零,假设可以得到这样的参数,那么可以将代价函数转化为
C非常大(λ非常小),会尽量满足上面的约束,这样会导致对异常点非常敏感(过拟合)
这时会得到紫色的线,如果C适当减小,会得到黑线。
C 较大时,相当于? 较小,可能会导致过拟合,高方差。
C 较小时,相当于? 较大,可能会导致低拟合,高偏差。
12.3数学背后的最大边界分类(待补)
12.4 核函数 1
回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:
得到
然而,除了对原有的特征进行组合之外,有没有更好的方法来构造f1,f2,f3???我们可以利用核函数来计算出新的特征。
给定一个训练实例x,我们利用x的各个特征与我们预先选定的地标(landmarks),l(1),l(2),l(3)的近似程度来选取新的特征f1,f2,f3
其中:,为实例x中所有特征与地标l(1)之间的距离的和。similarity(x,l(1))就是核函数,这里是一个高斯核函数。
这些地标的作用是什么?如果一个训练实例x,与地标L之间的距离近似为0,则新特征f近似于1,如果距离较远,则f近似于0
假设我们的训练实例含有两个特征[x1,x2],给地标不同的σ:
只有当x与l(1)重合时,f才具有最大值。随着x的改变f值改变的速率受到?^2的控制。
在下图中,当实例处于洋红色的点位置处,因为其离l(1)更近,但是离l(2)和l(3)较远,因此f1接近1,而f2,f3接近0。因此,因此预测y=1。同理可以求出,对于离l(2)较近的绿色点,也预测y=1,但是对于蓝绿色的点,因为其离三个地标都较远,预测y=0。
这样,图中红色的封闭曲线的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界
12.5 核函数2
如何选取地标?
我们通常是根据训练集的数量选择地标的数量,假如训练集中有m个实例,则我们选取m个地标,
这样做的好处在于:现在我们得到的新特征建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:
1.给定x,计算新特征f,当,预测 y=1,否则反之。相应地修改代价函数为:
???
12.6使用支持向量机
尽量不要自己去写SVM函数,直接使用相关库,但是需要作几件事:
1.是提出参数C的选择。在之前视频中已经讨论过了C对方差偏差的影响
- 大C:低偏差,高方差(对应低λ,overfitting)因为C约等于λ的倒数。
- 小C:高偏差,低方差(对应高λ)
2.选择内核函数
以下是逻辑回归和支持向量机的选择:
1.相比于样本数m,特征数n大的多的时候,没有那么多数据量去训练一个非常复杂的模型,这时考虑用SVM
2.如果n较小,而且m大小中等,例如n在1-1000之间,而m在10-1000之间,使用高斯函数的支持向量机。
3.如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
神经网络在以上三种情况下都可以有较好的表现,但神经网络训练可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。