[统计学习方法] 感知机模型

本文的代码实现 Statistical-learning-methods

感知机

感知机是二类分类的线性分类模型,它将输入空间的实例划分为正负两类的分离超平面。而其学习旨在求出可以将训练数据进行线性划分的超平面。当引入误分类的损失函数后,可利用梯度下降法对损失函数进行极小化,损失函数值最小所对应的超平面即为所求。

感知机在1957年由Rosenblatt提出,是神经网络与支持向量机的基础。

感知机模型

假设输入空间为 X ⊆ R n \mathscr{X} \subseteq R^{n} XRn,输出空间为 Y = { + 1 , − 1 } \mathscr{Y} = \{+1, -1\} Y={+1,1},输入 x ∈ X x \in \mathscr{X} xX表示实例的特征向量,对应输出空间的点,输出 y ∈ Y y \in \mathscr{Y} yY表示实例的类别,由输入空间到输出空间的如下函数 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w·x+b) f(x)=sign(wx+b)称为感知机,其中 w , b w,b w,b称为感知机模型参数, w ∈ R n w \in R^{n} wRn称为权值或者, b ∈ R b \in R bR称为偏置, w ⋅ x w·x wx w w w x x x的内积, s i g n sign sign为符号函数。

感知机学习策略

线性可分性

通俗来讲,若给定一组含有正负样本的数据,若可以找到一个超平面,将其完美的分为两类,即一侧为正样本,一侧为负样本,那么这组数据即为线性可分的

换言之, ∀ x i ∈ X , y i ( x i w + b ) > 0 \forall x_i \in \mathscr{X}, y_i(x_iw+b)>0 xiX,yi(xiw+b)>0,对应的 w , b w,b w,b即为能将数据完美分开的超平面。可想而知,对于一般的数据集,一般不能线性可分。

感知机的学习策略

首先假设数据是线性可分的,那么我们就需要找到一个超平面(一组 w , b w,b w,b)将数据分开。定义损失函数,则希望这个损失函数越小越好,即完美分割的平面损失函数值最小。那么自然想到,如果将其定义为误分类点的个数,那么当超平面完美地将数据分割为2组时,误分类的点为0,但是显然这个函数是离散的,无法求导,不易优化。

转换思路,误分类的点离这个超平面越近,则说明误分类的程度越小,故可将损失函数定义为误分类点到超平面的距离和,用公式表示为 ∑ x I ∈ M − y i ( w ⋅ x + b ) ∣ ∣ w ∣ ∣ \sum_{x_I\in M} -\frac{y_i(w·x+b)}{||w||} xIMwyi(wx+b)。然而此时我们只在这只值的大小,不考虑分母未知 w w w的L2范数也是可以的,即定义为 L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x + b ) L(w,b) = -\sum_{x_i\in M} {y_i(w·x+b)} L(w,b)=xiMyi(wx+b),显然可得, L ( w , b ) L(w,b) L(w,b)为非负函数。

感知机的学习算法

原始形式

现在明确我们的优化目标

a r g   m i n w , b − ∑ x i ∈ M y i ( w ⋅ x + b ) \mathop{arg\ min}\limits_{w,b} -\sum_{x_i\in M} {y_i(w·x+b)} w,barg minxiMyi(wx+b)

感知机学习算法是误分类驱动的,可以采用梯度下降算法。假定误分类点集合 M M M是固定的,损失函数的 L ( w , b ) L(w,b) L(w,b)的梯度由下面两个式子确定。

∇ w L ( w , b ) = − ∑ x i ∈ M y i x i \nabla_wL(w,b)=-\sum_{x_i \in M}y_ix_i wL(w,b)=xiMyixi

∇ b L ( w , b ) = − ∑ x i ∈ M y i \nabla_bL(w,b)=-\sum_{x_i\in M}yi bL(w,b)=xiMyi

那么对于一个误分类点,可以按照如下方式更新

w ← w + η y i x i w \leftarrow w + \eta y_ix_i ww+ηyixi

b ← b + η y i b \leftarrow b +\eta y_i bb+ηyi

其中 η \eta η为步长,也被称为学习率,这样迭代可以使得损失函数 L ( w , b ) L(w,b) L(w,b)不但减小,直至为0为止。

梯度下降的种类

总共有3种较为常用的梯度下降算法,批量梯度下降(Batch Gradient Descent),随机梯度下降(Stochastic gradient descent),小批量梯度下降(Mini-Batch Gradient Descent)。

批量梯度下降(BGD)

批量梯度下降中,单次迭代使用全部的训练集样本来更新模型。当训练集非常大的时候,会十分耗时,他的优点也非常明显,收敛快,迭代次数少。

随机梯度下降(SGD)

为了克服BGD带来的训练速度慢的问题,提出了SGD方法。随机梯度下降中,单次迭代随机选择训练集中的一个样本来更新模型,同时也带来了问题,由于有噪音的问题,单次迭代可能不会朝着优化的方向进行,但是可以说总体是朝着更优的方向移动的。

小批量梯度下降(MBGD)

小批量梯度下降是为了折中上面的两种算法,即每次既不用一个,也不用全部训练集来更新模型,而是选择一部分来更新模型。这样既可以保证模型的训练速度,又可以保证参数的准确性。

这里值得一提的是,使用梯度下降更新模型,也只是对那些误分类的样本更新,对已经正确分类的样本则不用更新。

口袋算法(Pocket Algorithm)

感知机模型是针对可以线性可分的数据进行的,若不可线性可分,则会算法会一直运行下去。为了解决这个问题,STEPHEN I. GALLANT在论文《Perceptron-Based Learning Algorithms》中提出了Pocket Algorithm。

Pocket Algorithm的基本思想为,在感知机求解超平面的过程中,保存当前的最优解,即使得测试集误分类样本最少的 w , b w,b w,b的值,当超过迭代次数后,算法输出保存的最优解。为了求解出这个解,则必须在单次迭代后,遍历一遍训练集,找出对于当前的模型有多少误分类的样本数,增大了开销。

相比之下,感知机自动收敛到最优结果(当然要求线性可分,否则停不下来),使用口袋算法的感知机则设定最大迭代次数,输出迭代过程中的最优结果。

感知机在二分类方面的应用

数据集采用威斯康辛乳腺癌数据集,该数据集来自南斯拉夫卢布尔雅那大学医疗中心肿瘤研究所,由M. Zwitter 与 M. Soklic 二者提供,感谢。该数据集可在UCI数据库中找到。该数据库是加州大学欧文分校提出的用于机器学习的数据库,是一个常用的标准测试数据集。该数据集的详细说明可以在这里找到。

数据缺失处理

在原始数据集中有16个样本包含缺失值,官方给出的说明如下:

  1. Missing attribute values: 16

    There are 16 instances in Groups 1 to 6 that contain a single missing

    (i.e., unavailable) attribute value, now denoted by “?”.

在处理过程中,采用属性均值填充。

训练

训练前随机划分训练集和测试集,各占50%,同时随机初始化参数,迭代次数设置为2500次。使用口袋算法(Pocket Algorithm)并分别采用三种梯度下降算法训练对不,在使用SBGD时,选用50%的训练集来更新模型。训练结果如下(未多次训练求最好的结果,只是单次结果)。

SGD


训练参数:

learnRate = 0.01

maxIteration = 2500

训练结果:

training time:4.8299880027771
misclassified: 16
loss: 10.916601030099235
precision: 0.9514285714285714

可以看到在训练过程中,会有反复的波动,因为每次选取的样本不一定会使模型向更优的方向移动。

BGD

在这里插入图片描述

训练参数:

learnRate = 0.0001

maxIteration = 2500

训练结果:

training time:9.35741138458252
misclassified: 8
loss: 0.993716639270181
precision: 0.9685714285714285

可以看出训练时间明显增长。在选择合适的学习速率时,会出现如图的曲线。当学习速率过大时,也会出现类似SGD的波动情况,不过波动情况较少。

MBGD

在这里插入图片描述

训练参数:

learnRate = 0.0001

maxIteration = 2500

samplingRatio = 0.5

训练结果:

training time:8.382853746414185
misclassified: 13
loss: 2.4231216654664562
precision: 0.9628571428571429

参考

[1] 感知机(Perceptron)及python实现

[2] python感知机分类乳腺癌数据集

[3] 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

[4] Sklearn-train_test_split随机划分训练集和测试集

[5] 详解梯度下降法的三种形式BGD、SGD以及MBGD

[6] 练习(二)——威斯康辛乳腺癌数据集

[7] Perceptron

[8] STEPHEN I. Perceptron-based learning algorithms[J]. IEEE Transactions on neural networks, 1990, 50(2): 179.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值