前言
从本篇开始我们将讲解一些机器学习中常用的算法模型及实现原理,本系列会一直更新,把自己走过的弯路都记录下来,也希望后人学习的过程能更顺畅一点。
正文
感知机的理解
感知机属于机器学习算法中最简单的一种算法,其原理可以看下图:
感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别,分别是+1和-1,属于判别模型。
假设训练数据集是线性可分的,感知机学习的目标就是求解出一个能将训练数据集正实例点和负实例点完全正确分开的超平面。如果是非线性可分数据,则最后无法获得超平面,感知机由Rosenblatt大神于1957年提出,是神经网络和支持向量机(SVM)的基础。
举个例子,如下图所示:假设这是一个工厂零件是否合格图示
比如说我们有一个二维平面坐标系(下图中黑色的线),横向的为X轴,纵向为Y轴,图中的每一个点都是由(x,y)决定的,如果我们将这张图应用在判断工厂产品零件是否合格上,x表示零件长度,y表示零件质量,坐标轴表示零件的均值长度和均值重量,并且蓝色的为合格产品,黄色为劣质产品,需要剔除。那么很显然如果零件的长度和重量都大于均值,说明这个零件是合格的。也就是在第一象限的所有蓝色点。反之如果两项都小于均值,就是劣质的,比如在第三象限的黄色点。
预测其实很简单,拿到一个新产的零件,我们测出它的长度x,质量y,如果两项都大于均值,说明零件合格。
那么对于程序来说,或者说我们写的代码怎么知道这个零件的长度质量都大于均值的零件是否合格呢?或者说程序怎么学习迭代出一个规则呢?
传到程序手里的是当前图内所有点的信息及标签信息,说的明白些就是他知道所有样本点的坐标信息{(X,Y)......(Xn,Yn)},这些 点有可能属于蓝色或者是黄色,对于这些样本要是能找到一条直线把他们分开就好了,这样我拿到一个新零件,知道了它的长度和质量,我就可以判断它在线的哪一侧,进一步就可以知道它属于合格零件还是不合格零件了。例如图中的黄、蓝、粉三条线,都可以完美地把当前的两种情况划分开。甚至X坐标轴或Y坐标轴都能成为一个划分直线(这两个直线均能把所有点正确地分开)
怎样一条直线属于最佳的划分直线?实际上感知机无法找到一条最佳的直线,它找到的可能是图中所有画出来的线,只要能把所有的点都分开就好了,更简洁明了的说就是如果一条直线能够不错分一个点,那就是一条好直线。用公式来说就是,假设错分点集合到这条直线的距离求和,让这段距离最小(最好是0,这样就表示没有错分点了),这条直线就是我们要找的。
感知机模型
好了,通过上面举例想必大家也能理解了,下面是感知机的数学定义和求解推理过程。