学习笔记——第二章:感知机(实践)
感知机学习总结
- 感知机是根据输入实例的特征向量x对其进行二类分类的线性分类模型: f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w\cdot x+b) f(x)=sign(w⋅x+b),感知机模型对应于输入空间(特征空间)中的分离超平面 w ⋅ x + b = 0 w\cdot x+b=0 w⋅x+b=0。
- 感知机学习的策略是极小化损失函数: min w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) \min_{w,b}L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i + b) w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b),损失函数对应于误分类点到分离超平面的总距离。
- 感知机学习算法的基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现。原始形式中,首先任意选取一个超平面,然后用梯度下降法不断极小化目标。在这个过程中一次随机选取一个误分类点使其梯度下降。
- 当训练数据集线性可分时,感知机学习算法是收敛的。感知机算法在训练数据集上的误分类次数 k k k满足不等式: k < = ( R γ ) 2 k<=(\frac{R}{\gamma})^2 k<=(γR)2,当训练数据集线性可分时,感知机学习算法存在无穷多个解,其解由于不同的初值或不同的迭代顺序而可能有所不同。
二分类模型
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x + b)
f(x)=sign(w⋅x+b)
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
<
0
sign(x)=\begin{cases}+1, x\ge 0\\-1, x < 0\end{cases}
sign(x)={+1,x≥0−1,x<0
给定训练集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1, y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)},定义感知机的损失函数
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i +b)
L(w,b)=−∑xi∈Myi(w⋅xi+b)
算法:随机梯度下降法
Stochastic Gradient Descent
随机抽取一个误分类点使其梯度下降。
w
=
w
+
η
y
i
x
i
w=w+\eta y_ix_i
w=w+ηyixi
b
=
b
+
η
y
i
b=b+\eta y_i
b=b+ηyi
当实例点被误分类,即位于分离超平面的错误侧,则调整
w
w
w,
b
b
b的值,使分离超平面向该误分类点的一侧移动,直至误分类点被正确分类。
示例
手动编写感知器代码
数据展示(iris数据)
数据分布与可视化
定义感知器模型
模型训练与可视化
使用SciKit-learn库
定义感知器分类函数
结果可视化
从图上可知,有一个位于左下角的蓝色点没有被正确分类,这是因为SKlearn的Perceptron实例这种有一个tol
参数。tol
参数规定了如果本次迭代的损失和上次迭代的损失之差小于一个特定值时,停止迭代。所以我们需要设置tol=None使之可以继续迭代。
分类结果可视化
此时,所有的两种鸢尾花都被正确分类了。
参考资料
- 《统计学习方法》 李航 著
- https://github.com/fengdu78/lihang-code