感知机 (Perceptron)
通俗易懂算法
感知机是一种用于二分类问题的简单线性分类算法。可以把它想象成试图找到一个超平面来把数据点分成两类。
工作原理
假设我们有一组数据点,每个数据点可以表示为一个特征向量 x = ( x 1 , x 2 , … , x n ) \mathbf{x} = (x_1, x_2, \ldots, x_n) x=(x1,x2,…,xn),并且都有一个对应的标签 y y y(通常为1或-1,分别表示两个不同的类别)。
感知机算法的目的是找到一个权重向量 w = ( w 1 , w 2 , … , w n ) \mathbf{w} = (w_1, w_2, \ldots, w_n) w=(w1,w2,…,wn) 和一个偏置 b b b,使得决策边界(超平面):
f ( x ) = w ⋅ x + b = w 1 x 1 + w 2 x 2 + … + w n x n + b f(\mathbf{x}) = \mathbf{w} \cdot \mathbf{x} + b = w_1 x_1 + w_2 x_2 + \ldots + w_n x_n + b f(x)=w⋅x+b=w1x1+w2x2+…+wnxn+b
这个边界可以将不同类别的数据点分隔开。如果我们要分类一个新数据点 x \mathbf{x} x,我们只需检查 f ( x ) f(\mathbf{x}) f(x) 的符号:如果 f ( x ) > 0 f(\mathbf{x}) > 0 f(x)>0,则分类为1;如果 f ( x ) < 0 f(\mathbf{x}) < 0 f(x)<0,则分类为-1。
训练过程
-
初始化:将所有权重 w i w_i wi 和偏置 b b b 初始化为0(或者随机小值)。
-
迭代:对每个训练样本 x i \mathbf{x}_i xi 和对应的标签 y i y_i yi,执行以下步骤:
- 计算预测值 y ^ i = sign ( f ( x i ) ) \hat{y}_i = \text{sign}(f(\mathbf{x}_i)) y^i=sign(f(xi))。
- 如果
y
^
i
≠
y
i
\hat{y}_i \neq y_i
y^i=yi,即分类错误,更新权重和偏置:
w = w + η y i x i \mathbf{w} = \mathbf{w} + \eta y_i \mathbf{x}_i w=w+ηyixi
b = b + η y i b = b + \eta y_i b=b+ηyi
其中 η > 0 \eta > 0 η>0 是学习率。
-
重复:重复步骤2,直到所有训练数据被正确分类或者达到最大迭代次数。
示例
假设我们有下面的二维数据点和标签:
- 点 ( 2 , 3 ) (2, 3) (2,3),标签 1 1 1
- 点 ( 1 , 1 ) (1, 1) (1,1),标签 1 1 1
- 点 ( − 1 , − 1 ) (-1, -1) (−1,−1),标签 − 1 -1 −1
- 点 ( − 2 , − 3 ) (-2, -3) (−2,−3),标签 − 1 -1 −1
感知机会找到一条直线来区分这些点,比如 w 1 x 1 + w 2 x 2 + b = 0 w_1 x_1 + w_2 x_2 + b = 0 w1x1+w2x2+b=0,这条直线尽可能分离正类和负类的数据点。
特点
- 感知机只能处理线性可分的数据集,如果数据线性不可分,算法可能无法收敛。
- 可以用于在线学习,因为它是增量地更新权重的。
- 实现简单,计算效率高。
底层原理
感知机(Perceptron)算法是机器学习中一个简单而基本的线性分类器。其基本思想是将输入映射到一个高维空间,并尝试通过一个线性超平面将数据分开。为了更好地理解感知机算法,我们可以从以下几个方面来探讨:模型假设、损失函数和更新规则。
模型假设
感知机的基本假设是,给定一个输入向量
x
∈
R
n
\mathbf{x} \in \mathbb{R}^n
x∈Rn,我们希望找到一个权重向量
w
∈
R
n
\mathbf{w} \in \mathbb{R}^n
w∈Rn 和一个偏置
b
∈
R
b \in \mathbb{R}
b∈R,使得线性函数:
f
(
x
)
=
w
⋅
x
+
b
f(\mathbf{x}) = \mathbf{w} \cdot \mathbf{x} + b
f(x)=w⋅x+b
可以将数据集中的正样本和负样本分开。输出为正的样本被分到一类,输出为负的样本被分到另一类。
损失函数
感知机使用的损失函数基于分类错误的样本来定义。对于一个样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi),其中 y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi∈{−1,+1} 是样本的标签:
如果样本被正确分类,即
y
i
=
sign
(
f
(
x
i
)
)
y_i = \text{sign}(f(\mathbf{x}_i))
yi=sign(f(xi)),则损失为零;
如果样本被错误分类,则损失为
−
y
i
(
w
⋅
x
i
+
b
)
-y_i (\mathbf{w} \cdot \mathbf{x}_i + b)
−yi(w⋅xi+b)。
因此,感知机的损失函数可以表示为:
L ( w , b ) = − ∑ i ∈ M y i ( w ⋅ x i + b ) L(\mathbf{w}, b) = -\sum_{i \in \text{M}} y_i (\mathbf{w} \cdot \mathbf{x}_i + b) L(w,b)=−i∈M∑yi(w⋅xi+b)
其中 M \text{M} M 是所有被误分类样本的索引集合。
更新规则
感知机算法采用迭代的方式更新模型参数。具体的参数更新规则如下:
-
初始化权重向量 w \mathbf{w} w 和偏置 b b b(通常初始化为0)。
-
随机选择一个样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi)。
-
如果该样本被误分类,即 y i ( w ⋅ x i + b ) ≤ 0 y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \leq 0 yi(w⋅xi+b)≤0,则更新权重和偏置:
w ← w + η y i x i \mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i w←w+ηyixib ← b + η y i b \leftarrow b + \eta y_i b←b+ηyi
其中 η > 0 \eta > 0 η>0 是学习率。
-
重复步骤2和3,直到所有样本都被正确分类或者达到最大迭代次数。
数学直观
通过感知机的更新规则,每次错误分类后, w \mathbf{w} w 和 b b b 会在误分类样本的反方向进行调整。这种方法使得感知机尝试将误分类样本推回到正确边界的一侧。感知机算法唯一有效的前提是数据是线性可分的,这使得算法可以在有限次更新后收敛到一个可以正确分类所有样本的解。
总结,感知机算法利用简单的线性模型和逐步更新权重的方法来寻找最优的分类超平面,其核心在于对误差样本的自我修正能力。
常用面试考点
感知机 (Perceptron) 算法是一个简单的线性分类模型,经常被用于线性可分数据集的二分类问题。下面从常见的面试考点层面讲解感知机算法。
感知机算法的基本概念
感知机用于解决线性可分问题,其目标是找到一个超平面将两个类别的样本分开。对于二维空间来说,这个超平面就是一条直线。感知机假设输入数据为$ \mathbf{x} = (x_1, x_2, \ldots, x_n) ,每个输入对应一个类别输出 ,每个输入对应一个类别输出 ,每个输入对应一个类别输出 y \in {-1, +1} $。
公式表示
感知机的决策函数可以表示为:
f ( x ) = sign ( w ⋅ x + b ) f(\mathbf{x}) = \text{sign}(\mathbf{w} \cdot \mathbf{x} + b) f(x)=sign(w⋅x+b)
其中,$ \mathbf{w} 是权重向量, 是权重向量, 是权重向量, b 是偏置项, 是偏置项, 是偏置项,\cdot$表示向量点乘。
学习策略
由于我们希望最大化类别间的区分,因此我们需要调整参数向量$ \mathbf{w} 和偏置 和偏置 和偏置 b $。更新规则通常是采用随机梯度下降的方法:
-
初始化权重向量$ \mathbf{w} 和偏置 和偏置 和偏置 b $为零或随机小值。
-
对于每个错误分类的样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi),根据以下规则更新:
- 若 $ y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \leq 0 $,更新参数:
w ← w + η y i x i \mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i w←w+ηyixi
b ← b + η y i b \leftarrow b + \eta y_i b←b+ηyi
其中$ \eta $是学习率,通常为一个小的正数。
停止条件
感知机算法的停止条件有几种常用的方式:
- 数据集上没有错误分类的样本。
- 达到预设的最大迭代次数。
收敛性
对于线性可分的数据集,感知机算法可以在有限步内收敛到一个正确的分类超平面。然而,对于线性不可分的数据集,算法可能不会收敛。
优缺点
- 优点:实现简单且在处理线性可分数据集时表现良好。
- 缺点:对线性不可分数据表现不佳,不能处理复杂的非线性问题。
面试考点
- 知道感知机的基本概念与公式,能够推导其更新规则。
- 理解感知机算法的收敛性及其应用局限性。
- 能够针对给定数据集说明算法执行步骤。