机器学习公开课笔记(7):支持向量机

支持向量机(Support Vector Machine, SVM)

考虑logistic回归,对于y=1的数据,我们希望其hθ(x)1,相应的θTx0; 对于y=0的数据,我们希望hθ(x)0,相应的θTx0。每个数据点的代价为: [ylog(hθ(x))+(1y)log(1hθ(x))]y=1时其代价cost1(z)=log(11+ez);当y=0时其代价cost0(z)=log(111+ez),分别如图1左右所示。

图1 当y=1y=0单个数据点的代价随z的变化

logistic回归的假设为minθ1m[i=1my(i)(log(hθ(x(i))))+(1y(i))(log(1hθ(x(i))))]+λ2mj=1nθj2通过去掉1m并且将A+λB的形式变为CA+B的形式,可以得到SVM的假设为minθC[i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθj2

最大间隔(Large Margin Intuition)

对于y=1的数据,我们希望θTx1而不仅仅是0; 对于y=0的数据,我们希望hθ(x)1而不仅仅是<0。当C很大时,由于CA+B要取最小值,因此A0,从而SVM最大化间隔问题变为minθ12j=1nθj2s.t.{θTx(i)1y(i)=1θTx(i)1y(i)=0

图2 支持向量机最优超平面和最大Margin(两条虚线之间的距离),支撑向量指的是位于两条虚线上的点(在高维空间中,每个点可以看作是从原点出发的向量,所以这些点也称为向量)

参数C表示对错误的容忍程度,C值越大表示越不能容忍错误分类,容易出现过拟合现象(如图3所示).


图3 参数C对分类的影响,C越大越不能容忍错误分类;反之能够接受少量错误分类.

Kernel

对于低维空间中线性不可分的情况,可以通过增加高阶多项式项将其映射到高维空间,使得在高维空间中通过一个超平面可分(如图4所示)。Kernel解决如何选择合适的高维特征问题,对于任意低维数据点x,定义它与低维空间中预先选定的标记点l(i)(landmarks)之间的相似性为fi=similarity(x,l(i))=exp(||xl(i)||22σ2)这样当有k个landmarks时,我们将得到k个新的特征fi,这样就将低维空间的点x投射为高维(k维)空间中一个点。如果x距离l(i)非常近,即xl(i), 则相似性fi1; 否则如果x距离l(i)非常远,则相似性fi0。接下来一个问题是如何选择landmarks,一种做法是选择所有的m个样本点作为landmarks,这样对于具有n个特征的数据点x(i),通过计算fi,将得到一个具有m维空间的数据点f(i)


图4 通过kernel函数将低维线性不可分数据投射到高维空间从而使得线性可分. 

 

SVM with kernels

假设(Hypothesis):给定数据点x,计算新的特征f。当θTf0时,预测y=1;反之,预测y=0

训练(Training):minθC[i=1my(i)cost1(θTf(i))+(1y(i))cost0(θTf(i))]+12j=1nθj2

参数C(1λ)的影响:

  • large C: low bias, high variance
  • small C: high bias, low variance

参数σ2的影响:

  • large σ2:high bias, low variance (fi vary more smoothly)
  • small σ2:low bias, high variance (fi vary less smoothly)

支持向量机实践

实际应用中不会要求自己实现SVM,更多是调用线程的库例如liblinear,libsvm等来求解。需要指定参数C和kernel函数。

Linear kernel: 不指定kernel,即“No kernel”,也称为“linear kernel”(用于特征n较大,同时example数m较小时).

Gaussian kernel: fi=exp(||xl(i)||22σ2),其中l(i)=x(i),需要指定参数σ2(用于n较小,m较大时)。注意在使用Gaussian kernel之前需要对数据进行feature scaling.

其他常见的kernel包括

  • Polynomal kernel:k(x,l)=(αxTl+c)d,其中可调节参数包括坡度α,常量c和多项式度d
  • string kernel: 对字符串直接进行变换,不需要将字符串数值化,具体公式见wikipedia:string kernel
  • chi-square kernel:k(x,y)=1k=1n(xkyk)212(xk+yk)
  • histogram intersection kernel:k(x,y)=k=1nmin(xk,yk)

 多元分类:采用one-vs-all的方法,对于k个分类,需要训练k个svm.

logistic回归和SVM

当n较大时(nm, n=10000, m = 1000),使用logistic回归或者SVM(with linear kernel)

当n较小,m中等时(n=10-1000, m = 10-100000),使用SVM(with Gaussian kernel)

当n较小, m较大时(n=1-1000, m = 500000),增加新的特征,然后适用logistic回归或者SVM(with linear kernel)

神经网络在各类n, m情况下都工作的很好,缺陷是训练速度比较慢

参考文献

[1] Andrew Ng Coursera 公开课第七周

[2] Kernel Functions for Machine Learning Applications. http://crsouza.com/2010/03/kernel-functions-for-machine-learning-applications/#chisquare

[3] Wikipedia: string kernel. https://en.wikipedia.org/wiki/String_kernel

[4] Hofmann T, Schölkopf B, Smola A J. Kernel methods in machine learning[J]. The annals of statistics, 2008: 1171-1220.

posted @   python27  阅读(2784)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示