目录
2.1-感知机模型
看到一个模型时首先想:
模型、策略、算法
。
模型:感知机线性模型
策略:对于误分类的损失函数最小化
算法:梯度下降算法
用了个
复合函数
X的角标在右上时表示某个特征
通过感知机模型了解机器学习的流程
2.2-感知机学习策略
2.2.1-数据集的线性可分性
重视
完全可分
2.2.2-感知机的学习策略
怎么看损失函数
为什么感知机使用函数间隔作为损失函数
上面这篇文章讲的很好,值得一看
感知机与SVM很像,但是感知机的超平面可能有好几个,SVM可以找到最优的超平面
2.3-感知机学习算法
2.3.1-感知机算法的原始形式
最优化方法是通过
不断迭代
感知机用的
随机梯度下降
,每次采用一个点
批量梯度下降是选取所有点
梯度下降就是求偏导
随机,总感觉看运气,当时有没有这么一种可能,找到最优的概率在某个区间分布?
找到
误分类点
就开始更新
2.3.2-算法的收敛性
第2小点,拿出二范式最大的点,说明误分类迭代次数有上限
证明2.12
推导2.13
关键是迭代的公式
注意这里的
上界
、下界
2.3.3-感知机算法的对偶形式
重点是
误分类点
以下是不断迭代代入
习题
2.1
如上图,并不能形成一个线性的超平面
有个网友提出了将单层感知器的激活函数改为satlins是否可以解决异或问题
答案是不能
2.2
import matplotlib.pyplot as plt
import numpy as np
x = np.array([[-1,-1],[0,0],[2,3],[3,2]])
y = np.array([1,1,-1,-1])
omega = np.array([0,0])
b = 0.0
eta = 1
# 感知机函数
def sign(pp, b, omega):
return np.sign(np.dot(pp,omega) + b)
check = False
while not check:
check = True
for x1, y1 in zip(x, y):
if sign(x1,b,omega) * y1 <= 0:
omega += eta * x1 * y1
b += eta * y1
check = False
x2 = np.linspace(-2, 4, 100)
y2 = -1 / omega[1] + [omega[0] * x2 + b]
plt.figure()
plt.scatter(x[:,0],x[:,1],c=y)
plt.plot(x2,y2)
得到下图:
2.3
其中凸壳
这里有个大佬关于凸壳做了直观的解释:
分别从充分性
与必要性
进行证明:
充分性
:
即正点集凸壳与负点集凸壳互不相交——>样本集线性可分
必要性
:
即样本集线性可分——>正点集凸壳与负点集凸壳互不相交
反证
(这个没想到):正点集凸壳与负点集凸壳互相交——>样本集线性不可分
总结:
1.感知机是根据输入实例的特征向量a对其进行二类分类的线性分类模型:
2.感知机学习的策略是极小化损失函数:
3.感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现。原始形式中,首先任意选取一个超平面,然后用梯度下降法不断极小化目标函数。