摘要
本篇文章简单介绍了迈入机器学习大门将遇到的第一个算法——感知机学习算法。在这里我将从机器学习小白的角度介绍这个算法(因为我也是刚入门的小白喵)。
前提
在感知机学习算法中,训练数据集是线性可分的。这里我们就要来介绍一下什么是数据集的线性可分性。在李航老师的《统计学习方法》第二版中是这样定义的:
给定一个数据集
其中,
,
。如果存在某个超平面S:
能够将数据集的正实例点和负实例点完全正确地划分到超平面的两侧,即对所有 的实例
,有
,对所有
的实例
,有
,则称数据集
为线性可分数据集(linearly separable data set);否则,称数据集
线性不可分。
看着是不是感觉有点云里雾里,让我们举个例子:有一个饼,上面一部分有黑芝麻,一部分有白芝麻。这个饼上面所有的芝麻就是我们的数据集,黑芝麻假如就是我们的正实例点,那么白芝麻就是我们的负实例点。现在我们要切这张饼。如果在这张饼中能找到一个切法,使得白芝麻和黑芝麻的区域能被一刀分开,那么这张饼上面的芝麻所构成的数据集就是线性可分的。如果找不到这样的一种切法,不能使黑芝麻和白芝麻正确的被划分开,就是线性不可分。(为了方便理解这样讲可能不太严谨)
原理
让我们回到算法本身,既然我们的数据集是线性可分的,那我们感知机算法的目的就是找到这个超平面,能正确的划分两类点。那我们该怎么找到这个超平面呢?
我们现在随便找一个超平面,如果这个超平面刚好能正确划分两类点,那太棒了;可是正常情况下,这个超平面并没有那么好找。我们找到的这个初始超平面是不完美的,需要不断的矫正误差,去靠近那个超平面。
我们从前面的线性可分意识到:感知机的超平面本质是一个线性函数,其数学形式为:
w·x + b = 0
这里的w和b是变量。
我们的目标就是找到一组(w, b)
,让所有样本都满足:
- 若样本属于正类(标记为
y=+1
),则w·x + b > 0
; - 若样本属于负类(标记为
y=-1
),则w·x + b < 0
。
换句话说,所有样本是不是都要满足 y·(w·x + b) > 0。那么误分类的点是不是满足
,因此
(负数的绝对值等于其相反数)。
因此,误分类点到超平面S的距离是
。所有误分类点到超平面的总距离为
不考虑,因为我们注重的是减少误分类点的个数,就得到了感知机学习算法的损失函数:
那接下来,我们来看看这个损失函数。损失函数越小说明被误分类的点越少。我们要找到这个损失函数最小的计算,这时要用到一个方法——梯度下降法(这里不做叙述)。总之就是不断迭代,然后更新w,和b的值,直至训练集中没有误分类点。注意这里超平面不止有一个,如下图所示。下面两个超平面都可以正确分类两类点。
就这样,我们就掌握了感知机学习的策略:感知机学习的策略是极小化误分类点到超平面的距离,通过梯度下降法逐步调整权重和偏置,使误分类点尽可能减少,直到所有训练数据被正确分类或达到最大迭代次数,得到一个感知机模型。