机器学习

感知器学习(Perceptrons)

感知器学习的一般形式:
f ( x ) = { + 1  if  w 1 x 1 + w 2 x 2 + … w d x d ≥ θ − 1  otherwise  f(\mathbf{x})=\left\{\begin{array}{ll}{+1} & {\text { if } \mathbf{w}_{1} \mathbf{x}_{1}+\mathbf{w}_{2} \mathbf{x}_{2}+\ldots \mathbf{w}_{\mathrm{d}} \mathbf{x}_{\mathrm{d}} \geq \mathbf{\theta}} \\ {-\mathbf{1}} & {\text { otherwise }}\end{array}\right. f(x)={+11 if w1x1+w2x2+wdxdθ otherwise 
输入: x i x^i xi y i y^i yi,目标:找出一组权重 w 1 w_1 w1 w 2 w_2 w2、…、 w d w_d wd使得该模型能将数据正确分类
spam
对于上述垃圾邮件分类的例子而言,若 w ∗ x > 0 w*x>0 wx>0,则说明其为正常邮件;若 w ∗ x < 0 w*x<0 wx<0,说明其为垃圾邮件。
权重更新的过程:
updata_weight
说明: I ( t ) I^{\left(t\right)} I(t)为权重 w ( t ) w^{\left(t\right)} w(t)的法线; I ( t + 1 ) I^{\left(t+1\right)} I(t+1)为权重 w ( t + 1 ) w^{\left(t+1\right)} w(t+1)的法线
如何理解更新公式为 w ( t + 1 ) = w ( t ) + η ⋅ y ( t ) ⋅ x ( t ) w^{(t+1)}=w^{(t)}+\eta \cdot y^{(t)} \cdot x^{(t)} w(t+1)=w(t)+ηy(t)x(t),上图的例子中, y ( t ) = 1 y^{\left(t\right)}=1 y(t)=1但却被错误分类为 y ( t ) = 0 y^{\left(t\right)}=0 y(t)=0,为了使得其被正确分类,则权重 w ( t ) w^{\left(t\right)} w(t)应该向 x ( t ) x^{\left( t\right)} x(t)的方向旋转,即 w ( t + 1 ) = w ( t ) + η ⋅ y ( t ) ⋅ x ( t ) w^{(t+1)}=w^{(t)}+\eta \cdot y^{(t)} \cdot x^{(t)} w(t+1)=w(t)+ηy(t)x(t),同理,对另一种情况分析也是合理的。
对于不能线性可分的情况,参数可能不能收敛,如何停止训练:

  1. 缓慢地降低学习速率,例如: η = c 1 / ( t + c 2 ) \eta=\mathfrak{c}_{1} /\left(\mathfrak{t}+\mathfrak{c}_{2}\right) η=c1/(t+c2)
  2. 当分类的错误率未发生改变时
  3. 某一部分数据用作测试集,当测试集的错误率停止下降时
  4. 当迭代次数达到某个固定值时

针对多分类问题,例如要分三类 A A A B B B C C C三类时,应该训练三个分类器 A A A B C BC BC B B B A C AC AC C C C A B AB AB三个分类器,使用时比较,三个分类器的值,若某一分类器的值大于其他两者,则认为其属于该类。
总结:

  1. 过拟合
  2. 当数据不能线性可分时,权重会出现摆动 (dance around )
  3. 分类器的分割方案不是最完美的(这一点会在之后的支持向量机中解决该问题)

Winnow算法

和之前提到的感知器学习算法类似,但在此处,权重全部为正值。
winnow
补充:如果 x x x被错误分类为正类,则应该减小 w w w;反之,若被错误分类为负类,则应该增加 w w w
当特征 x x x出现负值时,可以引入新的向量 x ′ = − x x^{'}=-x x=x,并且组成size为 2 d 2d 2d的向量。例如 x = [ 1 , . 7 , − . 4 ] , w = [ . 5 , . 2 , − . 3 ] x=[1, .7,-.4], w=[.5, .2,-.3] x=[1,.7,.4],w=[.5,.2,.3],新的 x x x w w w x = [ 1 , . 7 , − . 4 , x=[1, .7,-.4, x=[1,.7,.4,
− 1 , − . 7 , . 4 ] , w = [ . 5 , . 2 , 0 , 0 , 0 , . 3 ] -1,-.7, .4], \mathbf{w}=[.5, .2,0,0,0, .3] 1,.7,.4],w=[.5,.2,0,0,0,.3]
延伸:引入软间隔的概念
软间隔
算法的总结:
总结
当数据线性不可分时,可以对数据进行一些简单的处理,例如下图中的数据,可以将直角坐标转换为球坐标。
转换
Online Learning:处理的是流式数据,首先在训练数据集进行训练,实时处理某个数据时,当该数据被错误分类,则更新权重。

Instance Based Learning

常见的算法有最近邻、K近邻、Kernel Regression。前两种已经接触过很多,这里只介绍Kernel Resgression。
距离衡量的方式:欧式距离
邻居的数量:所有点
权重衡量及预测的方式: w i = e x p ( − d ( x i q ) 2 K w ) \boldsymbol{w}_{\boldsymbol{i}}=\mathbf{e x p}\left(-\frac{\boldsymbol{d}\left(\boldsymbol{x}_{\boldsymbol{i}} \boldsymbol{q}\right)^{2}}{\boldsymbol{K}_{\boldsymbol{w}}}\right) wi=exp(Kwd(xiq)2)
∑ i w i y i ∑ i w i \frac{\sum_{i} w_{i} y_{i}}{\sum_{i} w_{i}} iwiiwiyi
为了解决在高维空间搜索的复杂度较高这一问题,常用的其他方法有:线性扫描(Linear scan)、Kd-Tree、局部哈希敏感(Locality-Sensitive Hashing
)等

支持向量机(SVM)

原理

支持向量机的目标使得分类的间隔尽可能大,在下图中,右边的分类器的效果要明显好于左边的分类器。
SVM
如何计算间隔:
假设中间那条线的方程为 w ∗ x + b = 0 w*x+b=0 wx+b=0,则其上分界线为 w ∗ x + b = − 1 w*x+b=-1 wx+b=1,则其下分界线为 w ∗ x + b = 1 w*x+b=1 wx+b=1。为何会存在这样的两条线 w ∗ x + b = + 1 / − 1 w*x+b=+1/-1 wx+b=+1/1,假设中间那条线为 a ∗ x + y = 0 a*x+y=0 ax+y=0,上下分界线为 a ∗ x + y = + b / − b a*x+y=+b/-b ax+y=+b/b,两边同时除以 b b b,不难得到 a ′ ∗ x + b ′ = + 1 / − 1 a^{'}*x+b^{'}=+1/-1 ax+b=+1/1。根据平行线间的距离距离公式,不难得到,其间隔为 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} w2
a r g m a x 2 ∣ ∣ w ∣ ∣ ⟹ a r g m i n 1 2 ∣ ∣ w ∣ ∣ 2 argmax\frac{2}{||w||}\Longrightarrow argmin\frac{1}{2}||w||^2 argmaxw2argmin21w2
且其约束条件为:
y i ( w ∗ x i + b ) ≥ 1 y_{i}\left(w*x_i+b\right)\geq1 yi(wxi+b)1
但在实际情况中,如果严格按照上述的分类方法,可能会存在找不到这样的一个超平面。由于数据中会存在一些噪点,应该采取某些措施容忍这些噪点的存在。
在这里插入图片描述
对于上述公式做一些调整如下。
min ⁡ w , b , ξ i ≥ 0 1 2 ∥ w ∥ 2 + C ⋅ ∑ i = 1 n ξ i y i ( w ⋅ x i + b ) ≥ 1 − ξ i \begin{array}{l}{\min _{w, b, \xi_{i} \geq 0} \frac{1}{2}\|w\|^{2}+C \cdot \sum_{i=1}^{n} \xi_{i}} \\ \\{y_{i}\left(w \cdot x_{i}+b\right) \geq 1-\xi_{i}}\end{array} minw,b,ξi021w2+Ci=1nξiyi(wxi+b)1ξi
f ( w , b ) = 1 2 ∑ j = 1 d ( w ( j ) ) 2 + C ∑ i = 1 n max ⁡ { 0 , 1 − y i ( ∑ j = 1 d w ( j ) x i ( j ) + b ) } f(w, b)=\frac{1}{2} \sum_{j=1}^{d}\left(w^{(j)}\right)^{2}+C \sum_{i=1}^{n} \max \left\{0,1-y_{i}\left(\sum_{j=1}^{d} w^{(j)} x_{i}^{(j)}+b\right)\right\} f(w,b)=21j=1d(w(j))2+Ci=1nmax{0,1yi(j=1dw(j)xi(j)+b)}
参数求解可以采用SMO算法或者梯度下降(随机梯度下降)来求解。
若使用梯度下降法,则
∇ f ( j ) = ∂ f ( w , b ) ∂ w ( j ) = w ( j ) + C ∑ i = 1 n ∂ L ( x i , y i ) ∂ w ( j ) \nabla f^{(j)}=\frac{\partial f(w, b)}{\partial w^{(j)}}=w^{(j)}+C \sum_{i=1}^{n} \frac{\partial L\left(x_{i}, y_{i}\right)}{\partial w^{(j)}} f(j)=w(j)f(w,b)=w(j)+Ci=1nw(j)L(xi,yi)
∂ L ( x i , y i ) ∂ w ( j ) = 0  if  y i ( w ⋅ x i + b ) ≥ 1 = − y i x i ( j )  else  \begin{aligned} \frac{\partial L\left(x_{i}, y_{i}\right)}{\partial w^{(j)}} &=0 \quad \text { if } y_{i}\left(\mathrm{w} \cdot x_{i}+b\right) \geq 1 \\ &=-y_{i} x_{i}^{(j)} \quad \text { else } \end{aligned} w(j)L(xi,yi)=0 if yi(wxi+b)1=yixi(j) else 
如何将 S V M SVM SVM分类算法运用到多分类中,主要有以下两种方法(以A、B、C三类为例):

  1. 训练三个分类器( A A A VS B C BC BC B B B VS A C AC AC C C C VS A B AB AB,在对某个样例进行分类时,某个分类器的值大( arg ⁡ max ⁡ c w c x + b c \arg \max _{c} \mathbf{w}_{c} \mathbf{x}+\mathbf{b}_{c} argmaxcwcx+bc c c c为三个分类器中的某一个)就认为其是那一类

应用(Text categorization)

权重的更新:
w t + 1 ← w t − η t t + t 0 ( w t + C ∂ L ( x i , y i ) ∂ w ) w_{t+1} \leftarrow w_{t}-\frac{\eta_{t}}{t+t_{0}}\left(w_{t}+C \frac{\partial L\left(x_{i}, y_{i}\right)}{\partial w}\right) wt+1wtt+t0ηt(wt+CwL(xi,yi))
会时刻改变学习速率 η t \eta_{t} ηt t 0 t_{0} t0的值。
在这个例子中遇到的问题是数据过于稀疏,例如, x i = [ 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , … ] x_{i}=[0,0,0,1,0,0,0,0,5,0,0,0,0,0,0, \ldots] xi=[0,0,0,1,0,0,0,0,5,0,0,0,0,0,0,],存储时,可以将该向量变换成 x i = [ ( 4 , 1 ) , ( 9 , 5 ) , …   ] x_{i}=[(4,1),(9,5), \dots] xi=[(4,1),(9,5),],对于稀疏性数据,该如何使用 S G D SGD SGD方法来求解。
两个更新步骤:

  1. w ← w − η C ∂ L ( x i , y i ) ∂ w w \leftarrow w-\eta C \frac{\partial L\left(x_{i}, y_{i}\right)}{\partial w} wwηCwL(xi,yi),由于 x i x_{i} xi是稀疏的,则权重向量 w w w中将有很少的部分会被更新
  2. w ← w ( 1 − η ) w \leftarrow w(1-\eta) ww(1η)

其他参考阅读:
学习SVM,这篇文章就够了!(附详细代码)
SVM实现多分类的三种方案
支持向量机通俗导论(理解SVM的三层境界)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值