[统计学习方法习题实战]Task02:第二章感知机
目录
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.感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现。原始形式中,首先任意选取一个超平面,然后用梯度下降法不断极小化目标函数。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)