感知机(perceptron),听着很牛比,其实就是二类分类的线性分类模型
属于判别模型,1957年由Rosenblatt提出,是神经网络和支持向量机的基础
任何统计机器学习都是三要素,只须要说清楚模型,策略和算法html
感知机是一种线性分类模型。
假设空间是定义在特征空间中的线性分类模型或线性分类器,即函数集合 网络
几何解释为,
线性方程,wx+b=0,对应于特征空间中的一个分离超平面(separating hyperplane),其中w为超平面的法向量,b是超平面的截距。该平面将数据点分为正,负两类机器学习
策略
策略就是要定义损失函数,并让损失函数极小化
如何选取损失函数很关键?
这里一个天然的选择是,用误分点的总数做为损失函数,但问题是这个损失函数和w,b不要紧,不易优化
因此这里选择误分点到超平面的总距离做为损失函数,这样损失函数对于w,b是连续可导的,这样就可使用梯度降低来找到最优解
任一点到平面S的距离,参考点到平面的距离公式
因此能够用来替换
假设误分点集合为M,那么全部误分点到超平面S的总距离为, 函数
损失函数是非负,若是没有误分点,为0,误分点越少,离超平面越近,损失函数值越小优化
算法3d
要解决的问题如上,因为损失函数是对于w和b连续可导的,因此这里使用梯度降低法(gradient descent)来找到最优解,
Andrew Ng的公开课,理解梯度降低比较好的例子是,想象一下你在山上若是要以最快的速度下山,你会选择如何走一步(注意只是一步,下一步取决于新的位置)
应该选择梯度的反方向,首先要定义梯度, blog
能够看出梯度就是对于损失函数求偏导数,对于w的梯度就是对于L(w,b)求w的偏导,一样对于b的梯度也是对L(w,b)求b的偏导数
导数和微分 (参考wiki)
导数描述了这个函数在这一点附近的变化率。导数的本质是经过极限的概念对函数进行局部的线性逼近。![]()
![]()
微分是对函数的局部变化率的一种线性描述。微分能够近似地描述当函数自变量的取值做足够小的改变时,函数的值是怎样改变的。
可微的函数,其微分等于导数乘以自变量的微分,所以,导数也叫作微商。
![]()
一个多变量的函数的偏导数是它关于其中一个变量的导数,而保持其余变量恒定![]()
几何意义是,在求偏导那维上的切线斜率
上面能够看到对于梯度的计算须要使用全部的误分样本点,若是M很是大的话,效率很低,因此这里使用的是随机梯度降低
随机梯度降低(stochastic gradient descent)
可见这里只是用一个样本点的损失函数的偏导值来修正w和b,效率会高
但问题是,此次修正只是减少对该样本点的损失值,而非全部样本点的总体的损失值,也就是所此次修正是对于该样本点的局部最优,而非对整个样本集的全局最优
因此随机梯度降低,会致使降低过程的震荡,但每每能够逼近全局最优
固然这个方法的优势,不须要遍历全部的样本点,能够针对每一个样本点对w和b进行迭代更新,这样经过部分样本点就可使损失函数达到最小或收敛
感知机学习算法,给不一样的初值或选取不一样的误分类点,获得的解多是不一样的,好比对于下图的例子,明显解不是惟一的,会有不少解,为了获得惟一的超平面,须要增长约束条件,这就是支持向量机的思路
而且能够证实(参考原书),当训练集线性可分时,感知机学习算法必定会收敛
可是若是非线性可分,那么会致使不收敛,迭代结果会反复发生震荡
对偶形式
假设初始值w0,b0均为0,而且通过以下迭代更新
最后学习到的w,b分别能够表示为
由于每次w,b更新后,偏差样本点会发生变化,只有偏差样本点会用于修正w,b,因此当屡次修正仍然是偏差点,说明该样本点很难正确分类, 和该样本点用于修正的次数成正比
下面是对偶形式的算法,
只是用那项去替换w,b没有替换,why?
替换后,由来替换
迭代
本质有什么区别吗?对偶形式的好处是什么?