1.1感知机的地位
尽管在现在的企业中感知机是不怎么用,用起来也没有现在的神经网络的准确率高,但是它却是神经网络和支持向量机的基础,因此想要学好后续的神经网络,感知机必须搞懂.
1.2.感知机的原理
适用于:二分类的线性问题,
**输入:**是实例的特征向量(多个信号),
**输出:**事例的类别(一个信号),eg:-1或者+1,
**属于:**判别模型.
如果说数据集线性可分,感知机学习目标是求得一个能够将正实例点和负实例点完全正确分开的分离超平面.如果线性不可分,最后将无法获得超平面
1.2.1计算方式(点线距离)
已知一个样本点的坐标和直线方程,求点到直线的距离.
直线方程:Ax+By+C=0,P(x0,y0)
1.2.2样本点到超平面的距离
已知一个样本点的坐标和超平面方程,求样本点到超平面的距离
超平面方程:h=wx+b,w=(w0,w1,w2…wm),x=(x0,x1…xm),
注意:在2维空间中的超平面是一条线,在3维空间中的超平面是一个平面。
1.3.感知机模型
1.3.1图示
输入:x
方程:y=wx+b
转化:f(x)=sign(y)
输出:f(x)=sign(wx+b)
注意:我们的sign函数是:
目的是将输入的值转换成-1或者1这两个值.该函数又称为符号函数.
1.3.2损失函数
首先有一个样本(xi,yi),如果(w.xi+b)/||w||>0则记yi=+1,如果(w.xi+b)/||w||<0则记为yi=-1.
这样取y的值有一个好处,就是方便定义损失函数.
因为正确分类的样本满足yi(w⋅xi+b)/||w||>0,而错误分类的样本满足yi(w⋅xi+b)/||w||<0。
我们损失函数的优化目标,就是期望使误分类的所有样本,到超平面的距离之和最小。
定义损失函数为:
因为1/||w||是一个常数,它的存在与否对我们的模型没有什么影响,因此祛除1/||w||之后就得到了我们真正的损失函数:
注意:为什么可以不考虑1/||w||?
原因一:1/||w||不影响f(x)对正负值的判断.因为感知机算法是误分类驱动的,1/||w||不影响我们对f(x)正负值的判断
原因二:不影响感知机学习算法的最终结果.因为他终止条件是将所有的输入正确分类,不存在误分类的点,此时损失函数为0
综上所述:1/||w||对感知机的学习算法执行过程无任何影响,反而更加简洁.
1.4.感知机学习算法
感知机学习算法是对上面损失函数进行极小化,求得w和b.但是如果我们使用普通的梯度下降法(基于所有样本的梯度和均值)行不通.因为我们的损失函数里面有限定只有误分类的M集合中的样本才能参与损失函数的优化,因此不能采用普通的批量梯度下降法,而是采用随机梯度下降法.
目标函数:
1.4.1原始形式算法
输入:训练数据集T=(x1,y1),(x2,y2),…,(xN,yN),yi∈{−1,+1},学习率η(0<η<1)
感知机模型:f(x)=sign(w⋅x+b)
输出:w,b;
算法流程:
- 赋初值w0,b0;
- 选取数据点(xi,yi)
- 判断该数据点是否为当前模型的误分类点,判断:yi(wxi+b)<=0则更新:
w=w+ηyixi
b=b+ηyi - 跳转到2,直到训练集合中没有误分类的点
1.4.2对偶形式算法
由于w,b的更新公式为:
我们的w和b经过n次修改后,蚕食可以变化为下面的公式,其中a=ny
输入:训练数据集T=(x1,y1),(x2,y2),…,(xN,yN),yi∈{−1,+1},学习率η(0<η<1)
感知机模型:
输出:a,b
其中α=(α1,α2,…,αn)T
算法流程:
- 赋初始值:a0,b0
- 选取数据点:(xi,yi)
- 判断该数据点是否为当前模型的误分类点,即判断若
则更新:
- 跳转到2,直到训练集中没有误分类点
为了减少计算量,我们可以预先计算式中的内积,得到Gram矩阵
1.4.3原始形式和对偶形式的选择
- 在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
- 在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法
1.5感知机训练过程
- 线性可分:
- 线性不可分: