2 - 感知机(perceptron)

感知机(perceptron)是二类分类线性分类模型,输入为实例的的特征向量,输出为实例的类别,取+1和-1二值。

感知机模型对应于输入空间(特征空间)中将训练数据进行线性划分的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的超平面,为此导入误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。

感知机算法简单而易于实现,分为原始形式对偶形式

感知机是神经网络与支持向量机的基础

1 感知机模型

输入空间XRn,输出空间Y={+1,1}。由输入空间到输出空间的函数:

f(x)=sign(wx+b)

称为感知机。其中w和b为感知机模型参数,w为权值向量(weight vector),b为偏置(bias),w·x表示w和x的内积(dot product)。sign是符号函数:
sign(x)={+1,x01,x<0

感知机模型是一种线性分类模型,属于判别模型。感知机模型的假设空间是定义在特征空间的所有线性分类模型(linear classification model)或线性分类器(linear classifier),即函数集合{f|f(x)=wx+b}

感知机的几何解释:线性方程

wx+b=0

对应于特征空间Rn中的一个超平面,其中w是超平面的法向量,b是超平面的截距。这个超平面将特征空间划分为两个部分,位于两部分的点分布为正负两类。因此超平面S称为分离超平面(seperating hyperplane)。

perceptron

2 感知机学习策略

2.1 数据集的线性可分性

给定一个数据集,如果存在某个超平面S能够将数据集的正实例点和负实例点完全正确的划分到超平面的两侧,那么称数据集为线性可分数据集(linear separable data set),否则,称为线性不可分。

2.2 感知机学习策略

假设训练集线性可分,感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面,确定参数w,b,需要确定一个学习策略,即定义loss function并将其最小化。

损失函数的一个自然地选择是误分类点的总数,但是这样的损失函数不是参数w,b的连续可导函数,不易于优化。感知机采用的是误分类点到超平面S的总距离来作为损失函数。

数学知识告诉我们,任一点x0到超平面S的距离:

1w|wx0+b|

其中w是w的L2范数,即w=(|x1|2+|x2|2+...+|xn|2)1/2

对于我们的模型,考虑误分类点,必定有yi(wxi+b)>0成立(注意yi取值为±1)。因此误分类点到超平面的距离为:

1wyi(wxi+b)

这样,所有误分类点到超平面的总距离为:

1wxiMyi(wxi+b)

不考虑1w,就得到了感知机学习的损失函数。

给定训练集 T={(x1,y1),(x2,y2),...,(xN,yN)},其中,xiRny{+1,1}。感知机sign(w·x +b) 学习的损失函数定义为:

L(w,b)=xiMyi(wx+b)

其中,M为误分类点的集合。这就是感知机学习的经验风险损失函数。

3 感知机学习算法

经过上面讨论,感知机学习问题现在变为损失函数最优化问题,最优化的方法是随机梯度下降法

3.1 感知机学习算法的原始形式

现在要求参数w,b,使其为以下损失函数极小化问题的解:

minL(w,b)=xi inMyi(wxi+b)

其中M为误分类点的集合。

感知机学习是误分类推动的,具体采用随机梯度下降法(stocastic gradient descent,SGD)。首先,选取初始值w0,b0,然后采用梯度下降法不断地极小化目标函数,极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

以上损失函数L(w,b)对w和b求偏导可得:

wL(w,b)=xiMyixibL(w,b)=xiMyi

这便是损失函数的梯度,据此我们可以对w,b进行更新。

随机选择一个误分类点(xi,yi),对w,b进行更新:

ww+ηyixibb+ηyi

其中η(0<η1)是步长,又称为学习率(learning rate)。这样就能使L不断减小,直到0。

算法:感知机学习算法的原始形式:
输入:线性可分的训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)},其中xiRnyi{+1,1} ,i = 1, 2, … , N ; 学习率η(0<η1)
输出:w,b;感知机学习模型f(x)=sign(wx+b)

(1)选取初值w0,b0
(2)在训练集中选取数据(xi,yi)
(3)如果yi(wxi+b)0

ww+ηyixibb+ηyi

(4)转至(2),直至训练集中没有误分类点

算法直观上的解释:当一个点被误分类,则调整w,b的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面之间的距离,直至超平面越过该误分类点使其被正确分类。

值得注意的是,感知机学习算法由于采用不同的初值或选取不同的误分类点,解可以不同

可以证明,对于线性可分数据集,感知机学习算法原始形式收敛,即经过有限次迭代可以得到一个将训练集完全正确划分的分离超平面及感知机模型。

3.2 感知机学习算法的对偶形式

感知机(perceptron)学习算法的原始形式和对偶形式与支持向量机(SVM)的原始形式和对偶形式相对应。

对偶形式基本思想:将w,b 表示为xi,yi的线性组合的形式,通过求解系数而得到w和b。

假设w0,b0 初值均为0,对于误分类点(xi,yi)通过

ww+ηyixibb+ηyi

逐步修改w,b ,设修改n次,则w,b关于(xi,yi)的增量分别是 αiyixiαiyi,这里 αi=niη,这样,可以看出最后学习到的w,b可以表示为:
w=i=1Nαiyixib=i=1Nαiyi

这里,αi0,当η=1时,表示第i个实例点由于误分类而进行更新的次数

算法:感知机学习算法的对偶形式
输入:线性可分的训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)},其中xiRnyi{+1,1} ,i = 1, 2, … , N ; 学习率η(0<η1)
输出α,b;感知机学习模型f(x)=sign(j=1N(αjyjxjx)+b),其中α=(α1,α2,...,αN)T
(1) α=0,b=0
(2)在训练集中选取数据(xi,yi)
(3)如果 yi(j=1N(αjyjxjxi)+b)0

αiαi+ηbb+ηyi

(4)转至(2)直至没有误分类数据

对偶形式中的训练实例仅以内积形式出现,为了方便,可以预先将训练集中实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram矩阵:

G=[xixj]N×N

一些理解上的提示:

  • j=1N(αjyjxjxi)代表向量α与Gram矩阵的第i列的内积
  • 若对xi点进行更新,那么αi=αi+1,b=b+yi(η=1)
### 感知机的概念 感知机是一种用于二元分类的线性分类算法,在机器学习领域具有重要意义[^3]。作为最简单形式的人工神经网络单元,感知机输入层和输出层组成,其中不包含隐藏层。 #### 输入与输出关系 对于给定的数据样本 \( (x_1, x_2,..., x_n) \),通过加权求和并加上偏置项 b 后传入激活函数 f() 得到最终预测结果 y: \[y = f(\sum_{i=1}^{n}(w_i * x_i)+b)\] 这里 w 表示权重向量;f() 是阶跃函数,当净输入大于等于某个阈值时返回 1 ,反之则返回 -1 或者 0 。这种机制使得感知机能有效地处理线性可分问题[^4]。 ```python import numpy as np class Perceptron(object): def __init__(self, eta=0.01, n_iter=50, random_state=1): self.eta = eta self.n_iter = n_iter self.random_state = random_state def fit(self, X, y): rgen = np.random.RandomState(self.random_state) self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1]) for _ in range(self.n_iter): errors = 0 for xi, target in zip(X, y): update = self.eta * (target - self.predict(xi)) self.w_[1:] += update * xi self.w_[0] += update errors += int(update != 0.0) return self def net_input(self, X): """Calculate net input""" return np.dot(X, self.w_[1:]) + self.w_[0] def predict(self, X): """Return class label after unit step""" return np.where(self.net_input(X) >= 0.0, 1, -1) ``` 此代码实现了单层感知器的学习过程,包括初始化权重、调整权重直至收敛等功能。 尽管如此,由于其局限性——仅能解决线性分离问题且无法提供最大间隔解法,因此在现代复杂场景下的应用受到一定限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值