感知机思想:在二维就是找到一条直线,在三维或者更高维就是找到一个分离超平面,将所有二元类别分开。
使用感知机最大前提就是数据线性可分。支持向量机面对不可分时通过核函数让数据高维可分,神经网络通过激活函数和隐藏函数让数据可分。
一、感知机模型
由输入空间(特征空间)到输出空间的如下函数:
f(x)=sign(ω⋅ x+b)(1)
称为感知机。ω 叫权值或权值向量,b 叫偏置。sign 是符号函数。
sign(x)={1,x≥0−1,x<0(2)
二、感知机学习策略
1.数据集线性可分
数据集:T=(x1,y1),(x2,y2),...,(xN,yN),i=1,2,⋯,N
如果存在超平面 S 将数据集完全正确的划分到超平面两侧,即对所有 yi=1 的实例 i ,有 ω⋅ xi+b>0 ,对所有 yi=−1 的实例 i ,有 ω⋅ xi+b<0,则称数据集 T 线性可分,否则,线性不可分。
2.感知机学习策略
学习策略:定义损失函数并将损失函数极小化。
损失函数的两个选择:一是误分类点的总数,二是误分类点到超平面 S 的总距离。但是前者的损失函数不是 ω、b 的连续可导函数,不易优化。所以感知机采用后者。
任一点 x0 到超平面 S 的距离:
1∥ω∥|ω⋅ x0+b|
∥ω∥ 是 ω 的 L2 范数。
误分类点 xi 到超平面 S 的距离:
−1∥ω∥yi(ω⋅ xi+b)
因为是误分类点,所以当 ω⋅ xi+b>0 时,yi=−1;当 ω⋅ xi+b<0 时,yi=1。
所有误分类点到超平面 S 的距离(误分类点集合 M):
−1∥ω∥∑xi∈Myi(ω⋅ xi+b)
不考虑 1∥ω∥,就得到感知机的损失函数:
L(ω,b)=−∑xi∈Myi(ω⋅ xi+b)(3)
结论:
-
损失函数非负。如果没有误分类点,损失函数值为0。
-
误分类点越少,误分类点离超平面越近,损失函数越小。
-
损失函数 L(ω,b) 是 ω、b 的连续可导函数。
三、感知机学习算法
随机梯度下降法。基于所有样本的梯度和均值的批量梯度下降法(BGD)行不通,原因在于损失函数有限定,只有 M 里的样本才参与损失函数的优化。只能采用随机梯度下降(SGD)或小批量梯度下降(MBGD)。
1.原始形式
损失函数极小化:
minω, bL(ω, b)=−∑xi∈Myi(ω⋅ x+b)(4)
选取一个超平面 ω0,b0,用梯度下降法不断极小化目标函数 (3)。极小化过程不是一次使 M 中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
损失函数 L(ω,b) 的梯度由
∇wL(ω,b)=−∑xi∈Myixi∇bL(ω,b)=−∑xi∈Myi
给出。
随机选取一个误分类点,对 ω,b 更新:
ω←ω+η yixi(5)
b← b+η yi(6)
η 是步长,通过迭代使损失函数 L(ω,b) 不断减小,直到为0。
感知机学习算法的原始形式:
输入:训练集 T=(x1,y1),(x2,y2),...,(xN,yN),学习率 η(0<η≤1)
输出:ω,b;感知机模型f(x)=sign(ω⋅ x+b)
(1)选取初始值 w0,b0
(2)在训练集选取数据 (xi,yi)
(3)如果 yi(ω⋅ x+b)≤0
ω←ω+η yixib← b+η yi
(4)转至(2),直到没有误分类点。
例 1:正实例点 x1=(3,3)T,x2=(4,3)T,负实例点 x3=(1,1)T,用感知机学习算法的原始形式求感知机模型 f(x)=sign(ω⋅ x+b)。这里 ω=(ω(1),ω(2))T,x=(x(1),x(2))T。

解:构建最优化问题:
minω, bL(ω, b)=−∑xi∈Myi(ω⋅ x+b)
按照以上算法求解 ω,b。
(1)取初始值 ω0=0,b0=0
(2)对正实例点 x1=(3,3)T,
因为是正实例点,所以 y1=1,则 y1(ω0⋅ x1+b0)=0,
因为损失函数等于0,更新 ω、b。
ω1=ω0+y1x1=(3,3)T, b1=b0+y1=1
得到:
ω1⋅ x+b1=3x(1)+3x(2)+1
(3)对 x1,x2,显然,yi(ω1⋅ xi+b)>0,被分类正确,不修改 ω,b;
对负实例点 x3=(1,1)T,y3(ω1⋅ x3+b1)<0,被误分类,更新 ω,b。
ω2=ω1+y3x3=(2,2)T, b2=b1+y3=0
得到:
ω2⋅ x+b2=2x(1)+2x(2)
如此下去,直到
ω7=(1,1)T, b7=−3ω7⋅ x+b7=x(1)+x(2)−3
对所有数据点 yi(x7⋅ xi+b7)>0,没有误分类点,损失函数达到极小。
分离超平面:x(1)+x(2)−3=0
感知机模型:f(x)=sign(x(1)+x(2)−3)
迭代过程如下表 1.1。
迭代次数![]() |
误分类点![]() |
ω![]() |
b![]() |
ω⋅ x+b![]() |
0 |
|
0 |
0 |
0 |
1 |
x1 |
(3,3)T |
1 |
3x(1)+3x(2)+1 |
2 |
x3 |
(2,2)T |
0 |
2x(1)+2x(2) |
3 |
x3 |
(1,1)T |
−1 |
x(1)+x(2)−1 |
4 |
x3 |
(0,0)T |
−2 |
−2 |
5 |
x1 |
(3,3)T |
−1 |
3x(1)+3(2)−1 |
6 |
x3 |
(2,2)T |
−2 |
2x(1)+2x(2)−2 |
7 |
x3 |
(1,1)T |
−3 |
x(1)+x(2)−3 |
8 |
0 |
(1,1)T |
−3 |
x(1)+x(2)−3 |
上面是误分类点先后取 x1,x3,x3,x3,x1,x3,x3,得到的分离超平面。
如果误分类点依次取 x1,x3,x3,x3,x2,x3,x3,x3,x1,x3,x3,得到分离超平面是 2x(1)+x(2)−5=0。
所以,感知机学习算法采用不同的初值或选取不同顺序的分类点,结果不同。
2.对偶形式
感知机学习算法的对偶形式与支持向量机学习算法的对偶形式相对应。
对偶形式的思想:将 ω、b 表示为 xi 和 yi 的线性组合形式求解 ω、b。
对误分类点 (xi,yi) 通过
ω←ω+η yixib← b+η yi
逐步修改 ω、b,设修改 n 次,则最后得到的 ω、b 表示为(αi=niη):
ω=N∑i=1αiyixi(7)
b=N∑i=1αiyi(8)
这里 αi≥0, i=1,2,...,N,当 η=1 时,表示第 i 个实例点由于误分而更新的次数。实例点更新次数越多,意味距离分离超平面越近,越难正确分类。
输入:训练集 T=(x1,y1),(x2,y2),...,(xN,yN),学习率 η(0<η≤1)
输出:α,b;感知机模型 f(x)=sign(∑Nj=1αiyixi⋅ x+b),其中 α=(α1,α2,...,αN)T。
(1)α←0, b←0;
(2)在训练集选取数据 (xi,yi);
(3)如果 yi(∑Nj=1αiyixi⋅ x+b)≤0,
αi←αi+ηb← b+η yi
(4)转至(2)直到没有误分类数据。
对偶形式中的实例仅以内积形式出现。所以将实例间的内积计算出来并以矩阵形式储存,这个矩阵就是格拉姆矩阵(Gram 矩阵)。
G=[xi⋅ xj]N×N
例 2:正样本点 x1=(3,3)T,x2=(4,3)T,负样本点 x3=(1,1)T,用感知机学习算法的对偶形式求感知机模型。
解:
(1)取 αi=0, b=0, i=1,2,3, η=1
(2)计算 Gram 矩阵
G=⎡⎢⎣1821621257672⎤⎥⎦
(3)误分条件
yi(N∑j=1αiyixj⋅ xi+b)≤0
参数更新
αi←αi+1, b←b+yi
(4)迭代。结果如下表 1.2;
(5)
ω=2x1+0x2−5x3=(1,1)Tb=−3
分离超平面
x(1)+x(2)−3=0
感知机模型
f(x)=sign(x(1)+x(2)−3)
迭代过程如下表 1.2:
k![]() |
0![]() |
1![]() |
2![]() |
3![]() |
4![]() |
5![]() |
6![]() |
7![]() |
|
|
x1 |
x3 |
x3 |
x3 |
x1 |
x3 |
x3 |
α1 |
0 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
α2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
α3 |
0 |
0 |
1 |
2 |
3 |
3 |
4 |
5 |
b |
0 |
1 |
0 |
−1 |
−2 |
−1 |
−2 |
−3 |
对照表 1.1,结果一致,迭代步骤也相互对应。
与原始形式一样,感知机学习算法的对偶形式迭代也是收敛的,存在多个解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)