Coursea-吴恩达-machine learning学习笔记(十二)【week 7之Support Vector Machines】

逻辑回归的代价函数如下:
J(θ)=minθ1m[i=1my(i)(log(hθ(x(i))))+(1y(i))(log(1hθ(x(i))))]+λ2mj=1nθ2j J ( θ ) = min θ 1 m [ ∑ i = 1 m y ( i ) ( − l o g ( h θ ( x ( i ) ) ) ) + ( 1 − y ( i ) ) ( − l o g ( 1 − h θ ( x ( i ) ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2

对于支持向量机来说:
log(hθ(x(i))) − l o g ( h θ ( x ( i ) ) ) 替换为 cost1(θTx(i)) c o s t 1 ( θ T x ( i ) ) ,如下图:
这里写图片描述
log(1hθ(x(i))) − l o g ( 1 − h θ ( x ( i ) ) ) 替换为 cost0(θTx(i)) c o s t 0 ( θ T x ( i ) ) ,如下图:
这里写图片描述
去掉 1m 1 m 常量以及正则项的 λ λ 参数,转而在第一项前加上 C C 系数,则得到支持向量机的代价函数:
J(θ)=minθC[i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθj2

假设函数:

hθ(x)={1,0,if θTx0otherwise h θ ( x ) = { 1 , i f   θ T x ⩾ 0 0 , o t h e r w i s e

不同于逻辑回归输出概率,支持向量机的假设函数直接预测 y y 的取值。

根据cost1(θTx(i)) cost0(θTx(i)) c o s t 0 ( θ T x ( i ) ) 的坐标图,为了最小化支持向量机(SVM)的代价函数,需满足以下条件:

{if y=1,if y=0,then we want θTx1then we want θTx1 { i f   y = 1 , t h e n   w e   w a n t   θ T x ⩾ 1 i f   y = 0 , t h e n   w e   w a n t   θ T x ⩽ − 1

支持向量机不仅正确地区分输入的正负样本,还加入了一个安全的间距因子,因此具有鲁棒性,也称其为大间距分类器。

在支持向量机的代价函数中:

  • C C 值如果设置很大,支持向量机易受到异常点的影响;
  • C值如果设置很小,支持向量机会忽略异常点的影响。

设存在两个二维向量:

u=[u1u2]v=[v1v2] u = [ u 1 u 2 ] v = [ v 1 v 2 ]

则向量的内积: uv=uTv=pu=u1v1+u2v2 u ⋅ v = u T ∗ v = p ∗ ‖ u ‖ = u 1 ∗ v 1 + u 2 ∗ v 2
p p 是向量v投射到 u u 上的长度,u是向量 u u 的长度=u12+u22
p p 是带符号的,若u v v 在坐标系内的夹角为θ(0θπ),则 uv=uvcosθ u ⋅ v = ‖ u ‖ ∗ ‖ v ‖ ∗ c o s θ

当支持向量机的代价函数中, C C 取值较大时,为了最小化代价函数,我们会找到令i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i)) 0 0 的最优解,则目标函数变为

minθ12j=1nθj2{θTx(i)1if y=1θTx(i)1if y=0

进行如下简化:特征数 n n 设为2,令θ0=0
目标函数可写作: 12(θ21+θ22)=12(θ21+θ22)2=12θ2 1 2 ( θ 1 2 + θ 2 2 ) = 1 2 ( θ 1 2 + θ 2 2 ) 2 = 1 2 ‖ θ ‖ 2
θTx(i)=p(i)θ=θ1x(i)1+θ2x(i)2 θ T x ( i ) = p ( i ) ⋅ ‖ θ ‖ = θ 1 x 1 ( i ) + θ 2 x 2 ( i )
则条件变为:

{p(i)θ1p(i)θ1if y(i)=1if y(i)=0 { p ( i ) ⋅ ‖ θ ‖ ⩾ 1 i f   y ( i ) = 1 p ( i ) ⋅ ‖ θ ‖ ⩽ − 1 i f   y ( i ) = 0

p(i) p ( i ) x(i) x ( i ) 投射到 θ θ 的长度, θ θ 向量与分界线垂直。
由于目标函数是令 12θ2 1 2 ‖ θ ‖ 2 尽可能小,同时要满足条件

{p(i)θ1p(i)θ1if y(i)=1if y(i)=0 { p ( i ) ⋅ ‖ θ ‖ ⩾ 1 i f   y ( i ) = 1 p ( i ) ⋅ ‖ θ ‖ ⩽ − 1 i f   y ( i ) = 0

所以 p(i) p ( i ) 应尽可能大。
这就是支持向量机(SVM)能有效产生大间距分类的原因。

Kernel K e r n e l (核函数)
这里写图片描述
如上图所述,如果想拟合一条非线性的判别边界来区分正负样本,有两种方法:

方法1
构造多项式特征变量,如果 θ0+θ1x1+θ2x2+θ3x1x2+θ4x21+θ5x22+>0 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + ⋯ > 0 ,则预测 y=1 y = 1

方法2
只定义三个特征变量 x0,x1,x2 x 0 , x 1 , x 2 ,其中 x0=1 x 0 = 1 ,可忽略,如下图所示,用 x1,x2 x 1 , x 2 作为坐标轴,手动选取三个点作为 l(1),l(2),l(3) l ( 1 ) , l ( 2 ) , l ( 3 )
这里写图片描述
给出样本 x x ,新的特征变量定义如下:

f1=similarity(x,l(1))=exp(xl(1)22σ2)f2=similarity(x,l(2))=exp(xl(2)22σ2)f3=similarity(x,l(3))=exp(xl(3)22σ2)

similarity s i m i l a r i t y 函数即为 Kernel K e r n e l 函数,此处为高斯核函数,可用 k(x,l(i)) k ( x , l ( i ) ) 表示。
f1 f 1 为例:
f1=similarity(x,l(1))=exp(xl(1)22σ2)=exp(j=1n(xjl(1)j)22σ2) f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ‖ x − l ( 1 ) ‖ 2 2 σ 2 ) = e x p ( − ∑ j = 1 n ( x j − l j ( 1 ) ) 2 2 σ 2 ) ,忽略 x0 x 0
如果 xl(1) x ≈ l ( 1 ) (即 x x l(1)很近): f1exp(022σ2)1 f 1 ≈ e x p ( − 0 2 2 σ 2 ) ≈ 1
如果 x x l(1)很远: f1exp((large Number)22σ2)0 f 1 ≈ e x p ( − ( l a r g e   N u m b e r ) 2 2 σ 2 ) ≈ 0
之前画的每一个点对应一个新的特征变量

本例中,假设函数为:当 θ0+θ1f1+θ2f2+θ3f30 θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 ⩾ 0 时,预测 y=1 y = 1
假设已得到 θ0=0.5,θ1=1,θ2=1,θ3=0 θ 0 = − 0.5 , θ 1 = 1 , θ 2 = 1 , θ 3 = 0 ,可以发现,样本离 l(1) l ( 1 ) l(2) l ( 2 ) 很近时,即 f1=0 f 1 = 0 f2=0 f 2 = 0 时, y=1 y = 1

如何选择 l(1),l(2),l(3) l ( 1 ) , l ( 2 ) , l ( 3 ) ⋯
设给定 m m 个训练样本(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))
选择 l(1)=x(1),l(2)=x(2),,l(m)=x(m) l ( 1 ) = x ( 1 ) , l ( 2 ) = x ( 2 ) , ⋯ , l ( m ) = x ( m )
f1=similarity(x,l(1))f2=similarity(x,l(2)) f 1 = s i m i l a r i t y ( x , l ( 1 ) ) f 2 = s i m i l a r i t y ( x , l ( 2 ) ) ⋯
则特征向量 f=f1f2fm f = [ f 1 f 2 ⋯ f m ] ,可添加 f0=1 f 0 = 1
对于支持向量机:给定样本集 x x ,计算特征向量fRm+1
如果 θTf0 θ T f ⩾ 0 ,预测 y=1 y = 1

如何得到 θ θ
minθC[i=1my(i)cost1(θTf(i))+(1y(i))cost0(θTf(i))]+12j=1nθ2j min θ C [ ∑ i = 1 m y ( i ) c o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T f ( i ) ) ] + 1 2 ∑ j = 1 n θ j 2
此处 n=m n = m
j=1nθ2j ∑ j = 1 n θ j 2 也可写作 θTθ θ T θ (忽略 θ0 θ 0 ),为了提升计算效率,改写成 θTmθ θ T m θ m m 为样本数。
不建议自己写最小化代价函数的代码,应使用成熟软件包

高斯核函数中σ参数的影响:
例: l(1)=[35] l ( 1 ) = [ 3 5 ] f1=exp(xl(1)22σ2) f 1 = e x p ( − ‖ x − l ( 1 ) ‖ 2 2 σ 2 )
σ2=1 σ 2 = 1 时:
这里写图片描述
x=[35] x = [ 3 5 ] 时,为最高点 f1=1 f 1 = 1 x x 取值离该点越远,f1越趋近于 0 0

σ2=0.5时:
这里写图片描述
随着 x x 取值远离l(1) f1 f 1 取值的下降趋势加快。

σ2=3 σ 2 = 3 时:
这里写图片描述
随着 x x 取值远离l(1) f1 f 1 取值的下降趋势减缓。

使用支持向量机时,参数 C C 的影响:

  • C取值较大,低偏差,高方差。(对应 λ λ 取值小)

    • C C 取值较小,高偏差,低方差。(对应λ取值大)
    • 使用支持向量机时,参数 σ2 σ 2 的影响:

      • σ2 σ 2 取值较大,特征向量 fi f i 越平滑,高偏差,低方差
      • σ2 σ 2 取值较小,特征向量 fi f i 越陡峭,低偏差,高方差

      使用SVM软件包求解参数 θ θ (如: liblinear,libsvm l i b l i n e a r , l i b s v m ):
      步骤一:选择参数 C C
      步骤二:选择核函数:

      1. 选择No kernel(也叫线性核函数)
        如果 θTx0 θ T x ⩾ 0 ,预测 y=1 y = 1
        当存在 n n 个特征值,m个样本, n n 很大,m很小,此时,适合使用线性核函数。

      2. 高斯核函数, fi=exp(xl(i)22σ2),l(i)=x(i) f i = e x p ( − ‖ x − l ( i ) ‖ 2 2 σ 2 ) , l ( i ) = x ( i )
        需选择参数 σ2 σ 2
        当存在 n n 个特征值,m个样本, n n 很小,m很大时,适合用高斯核函数。
        如果选择高斯核函数,需要实现一个核函数:
        functionf=kernel(x1,x2) f u n c t i o n f = k e r n e l ( x 1 , x 2 )
        f=exp(x1x222σ2) f = e x p ( − ‖ x 1 − x 2 ‖ 2 2 σ 2 )
        return r e t u r n
        其中, f f 代表f(i) x1 x 1 代表 x(i) x ( i ) x2 x 2 代表 l(j)=x(j) l ( j ) = x ( j )
        在使用高斯函数前,需要做特征归一化,避免单一特征值对 f f 的影响过大。
        注意:不是所有的相似度函数similarity(x,l)都是有效的核函数,需要满足默塞尔定理,确保软件包可以使用大量优化方法并快速得到参数 θ θ
        可能会遇到的其他核函数:
        1)多项式核函数: k(x,l)=(xTl+constant)degree k ( x , l ) = ( x T l + c o n s t a n t ) d e g r e e ,当 x,l x , l 都是严格非负数时使用;
        2)字符串核函数:当输入为文本或其他类型字符串时使用;
        3)卡方核函数;
        4)直方图交叉核函数。
      3. 如果有 k k 个类别的话,一般使用内置函数,否则,训练k个SVM,每个SVM将 1 1 类与其他类区分开。

        逻辑回归与SVM对比
        n为特征值数量, m m 为训练样本数

        • 如果相对于m n n 很大(如n=10000,m=101000)
          使用逻辑回归,或SVM使用线性核函数;

        • 如果 n n 很小,m中等大小(如 n=11000,m=1010000 n = 1 ∼ 1000 , m = 10 ∼ 10000 )
          选择SVM使用高斯核函数;
        • 如果 n n 很小,m很大(如 n=11000,m=50000+ n = 1 ∼ 1000 , m = 50000 + )
          增加更多特征值,使用逻辑回归或SVM不带核函数。
        • 对于所有情况,一个设计的很好的神经网络可能会非常有效,但训练起来很慢。

          SVM优化函数是凸函数,总能找到全局最小值,或接近它的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值