支持向量机
核函数一
为了使用SVM构造复杂的非线性分类器,我们使用核(kernel)这个概念。
我们先从一个非线性分类案例入手:
我们使用f1,f2,f3…来表示特征x1,x2,x1x2…,得到theta0+theta1f1+theta2f2+theta3x3+…
l是x对应的标记。在坐标轴上取三个x,对应三个l,构造特征f1,f2,f3,我们将相似度函数similarity()成为核函数,在这里,我们使用了高斯核函数。
我们来看看这个核函数做了什么:当x与标记l很接近的时候,构造出的特征f约等于1;当x与标记l差的很多的时候,构造出的特征f约等于0。
这些特征衡量的是x与l之间的相似度。
举个例子,当l为[3;5]的时候,从核函数的图像可以看出,当x1=3,x2=5时,核函数的值达到顶峰,相似度为1。
我们改变高斯核函数中σ^2的值,σ^2越小,核函数改变的速度越快,越大越慢。
最后我们来看一看核函数和标记点是如何对给定x值预测y值起作用的。
在图中,我们先取红色的点x,然后发现它离l1近,l2,l3远,那么算的
,大于等于0,预测y=1。
再取蓝色的点,算
,小于0,预测y=0。
最后我们根据参数theta的值,得到图中坐标轴上图中的决策边界。在红色圈内,预测y=1,在圈外预测y=0。这样我们就可以通过标记点和核函数来得到新的特征,从而训练出一个非线性的分类器。
核函数二
怎么选取标记点
直接将训练样本作为标记点
这样我们可以得到m个标记点(m为样本点数量),然后我们可以得到m个特征:
对于每一个训练样本,我们可以得到m个特征组成该样本的特征向量。可以知道,该向量中,有某一维度等于1,即图中红色笔记。
接下来我们得到了一系列特征f,要完成假设:
的条件下,y预测为1,那么我们需要知道参数theta,这就是我们要训练的内容。
如何选择参数C
C(=1/λ)
选择较大的C,意味着选择较小的λ,即不使用正则化,此时我们会得到高方差低偏差(过拟合)。
选择较小的C,意味着选择较大的λ,此时我们会得到高偏差低方差的模型(欠拟合)。
σ^2
选择较大的σ^2,特征f变化的很缓慢,高偏差低方差。
选择较小的σ^2,特征f变化的很剧烈,高方差低偏差。
使用SVM
推荐使用SVM软件包去实现(liblinear、libsvm…)训练参数θ。
需要详细说明的是:
- 参数C的选择
- 核函数的选择
如:线性核函数(即不使用核函数)或者高斯核函数
特征数n,样本数m
当n很大,m很小时,为了避免过拟合,我们会使用线性核函数。
当n很小,m很大时,我们会使用高斯核函数来拟合复杂的非线性决策边界。
高斯核函数:
在使用高斯核函数之前需要进行特征的缩放,比如房价预测,x1是房子大小1000feet^2,x2是房间个数,1-5个房间。那么我们在计算的时候,x1-f1会很大,而x2-f2会很小。所以需要特征的缩放。
其他核函数的选择
并不是所有的相似函数都是有效的核函数,必须满足默塞尔定理。
其他的核函数是非常非常少被用到的。
选择:
多项式核函数:
- x和l都是严格的非负数
字符串核函数
- 输入是文本字符串
卡方核函数
直方相交核函数
…
多类别分类
很多SVM包已经内置了多类别分类函数。
另外,我们可以使用一对多方法。即训练K个SVM,每个SVM将第i个类别从其他类别中分辨出来。
逻辑回归vs支持向量机
- 当n相对于m很大的时候,使用逻辑回归(或者线性核函数的SVM)。
- 如果n很小,m适中,使用带高斯核函数的SVM。
- 如果n很小,m很大,带高斯核函数的SVM运行非常慢,我们会尝试创造或加入更多的特征,然后使用逻辑回归或者带线性核函数的SVM
神经网络比上面这些设置的效果要好,但是训练速度慢。