2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。
概述
本篇文章将要讲解的算法为感知机算法,它最初是一种最简单的二分类算法,后来根据它的提出不断衍生了很多基于它的相关算法,比如支持向量机还有现在比较流行的神经网络,可以说神经网络就是多层感知机的叠加,不过还是优质的神经网络结构还是有其它的其它的网络块的。
感知机算法就是找到一条直线能够完全分类两种样本数据,但是感知机算法简单就简单在只是找到这么一条即可,因为在上图中可能存在很多条都能将两种样本进行分类,但是感知机只要找到一条即可,但是支持向量机不同,它是找到最优的那一条,让所有样本距离该直线距离最大的那一条,因为这样会增大模型的泛化能力,如果有新样本进来的话,大几率仍会正确分类。
感知机算法原理
感知机的原理就是不断调整参数w的值,直到拟合的直线能够区分所有的样本点,那么我们就需要定义一个损失函数来进行衡量。
假设我们的模型为:
f ( x ) = s i g n ( w T x + b ) f(x)=sign(w^Tx+b)f(x)=sign(wTx+b)
其中sign为越阶函数,如果函数值大于0,结果为1,反之为-1,那么就有:
s i g n ( w T x + b ) = { 1 w T x + b ≥ 0 − 1 w T x + b < 0 sign(w^Tx+b)=
{1wTx+b≥0−1wTx+b<0{1wTx+b≥0−1wTx+b<0
sign(wTx+b)={1wTx+b≥0−1wTx+b<0
所以我们就想能不能使用误分类的个数作为损失,那么构造的就是0-1损失:
L ( w ) = ∑ i = 1 m I ( y i ( w T x + b ) < 0 ) L(w)=\sum_{i=1}^mI(y_i(w^Tx+b)<0)L(w)=i=1∑mI(yi(wTx+b)<0)
该式中的 I ( x ) I(x)I(x) 为指示函数,意思是如果 x成立,结果为1,否则为0,我们的损失函数意思就是只要某个样本误分类,总的分类错误个数就+1。
但是这样也会存在问题,这个损失函数是不可导的,因为指示函数不连续,所以无法采用算法进行优化,那么就需要采用一种新的方式去进行衡量损失。
我们观察到只要满足 y i ( w T x + b ) < 0 y_i(w^Tx+b)<0yi(wTx+b)<0 ,就说明是误分类的,也就是说如果这个式子越接近0,那么代表的损失越小,但是因为它的乘积是小于0的,我们表示损失需要一个正数,该数值越小损失越小,所以我们在前面添加一个负号就变成了:
L ( w ) = ∑ i = 1 D − y i ( w T x + b ) L(w)=\sum_{i=1}^D-y_i(w^Tx+b)L(w)=i=1∑D−yi(wTx+b)
但是我们求和的不是所有样本,而是分类错误的样本数据,D为分类错误的样本数,我们只关注分类错误的,正确的不予理会。
然后针对于该损失函数,由于没有极值点,所以不可直接求导,我们需要使用梯度下降法找到接近最优解的参数 w。
w t + 1 = w t − λ ∂ L ( w ) ∂ w w_{t+1}=w_t-\lambda \frac{\partial L(w)}{\partial w}wt+1=wt−λ∂w∂L(w)