感知机学习算法的实现以及收敛性的简单证明

感知机分为原始形式和对偶形式两种,是针对二分类问题,利用分离超平面进行分类的判别模型。分类策略与方法是基于误分类的损失函数,利用梯度下降对损失函数进行极小化。感知机具有简单易于实现的特点。


定义
  • 假设输入空间(特征空间)是 χ ⊆ Rn,输出空间是y=(+1,−1)。
  • 输入χ∈X表示实例的特征向量,对应于输入空间的点;输出y∈γ表示实例的类别。由输入空间到输出空间的如下函数:
    在这里插入图片描述
    称为感知机。
  • 其中,w和b为感知机模型的参数,sign是符号函数,即:
    在这里插入图片描述
  • 感知机的几何解释是,线性方程对应于超平面S(w为法向量,b为截距)
    线性方程

    将特征空间划分为正负两个部分,这个平面(2维时退化为直线)称为分离超平面。
    感知机学习算法的实现以及收敛性的简单证明_第1张图片

感知机的学习策略

选择误分类点到超平面的总距离作为损失函数。点到平面的距离为,||w|| 为w的L2范数,即


点到平面的距离
对于误分类点存在
在这里插入图片描述
那么所有误分类点到超平面的总距离为
总距离

将w的L2范数移除(因为其总是正数),得到损失函数如下,其中M为误分类点的数目
在这里插入图片描述


算法

通过以上推导得知,感知机问题其实就是求解损失函数的最优化问题,

最小化损失函数
首先任意选择一个超平面,然后利用梯度下降法,不断极小化目标函数,损失函数L的梯度
感知机学习算法的实现以及收敛性的简单证明_第2张图片

选取误分类点进行更新,其中 η 为学习率
权值更新

感知机算法的原始形式
感知机学习算法的实现以及收敛性的简单证明_第3张图片

代码实现 (引用)
https://www.cnblogs.com/liuyang0/p/7927923.html

def trainPerceptron(data_mat, label_mat, eta):
	"""
	data_mat: 训练数据
	lable_mat: 特征标签
	eta: 学习速率
	Return
	w: 权值
	b: 偏置
	"""
    m, n = data_mat.shape
    w = np.zeros(n)
    b = 0
    flag = True
    while flag:
        for i in range(m):
            if label_mat[i] * (np.dot(w, data_mat[i]) + b) <= 0:
                w = w + eta * label_mat[i] * data_mat[i].T
                b = b + eta * label_mat[i]
                print("weight, bias: ", end="")
                print(w, end="  ")
                print(b)
                flag = True
                break
            else:
                flag = False
    return w, b

感知机算法的对偶形式

对偶指的是,将 w 和 b 表示为测试数据 i 的线性组合形式,通过求解系数得到 w 和 b。具体说来,如果对误分类点i逐步修改 wb 修改了 n 次,则 w,b 关于i的增量分别为

感知机学习算法的实现以及收敛性的简单证明_第4张图片
其中 ni 为样本 i 被误分类的次数
在这里插入图片描述

由上,算法更新的步骤如下
感知机学习算法的实现以及收敛性的简单证明_第5张图片

代码实现 (引用)
https://www.cnblogs.com/liuyang0/p/7927923.html

def trainModel(data_mat, label_mat, eta):
    m, n = data_mat.shape
    alpha = np.zeros(m)
    b = 0
    flag = True
    while flag:
        for i in range(m):
            if (label_mat[i] * (np.sum(alpha * label_mat * np.dot(data_mat, data_mat[i].T)) + b)) <= 0:
                alpha[i] = alpha[i] + eta
                b = b + eta * label_mat[i]
                print("alpha, bias: ", end="")
                print(alpha, end="  ")
                print(b)
                flag = True
                break
            else:
                flag = False
    w = np.dot(data_mat.T, alpha * label_mat)
    return w, b

算法的收敛性

定义

感知机学习算法的实现以及收敛性的简单证明_第6张图片

证明
由于线性可分数据集,必定存在超平面
超平面
对数据集内的有限的点,均有
性质
则必定存在
感知机学习算法的实现以及收敛性的简单证明_第7张图片

假设第K个错误分类示例之前的扩充权值向量为
扩充权值向量
则第K个误分类示例的条件为
条件
那么 Wk 的更新过程如下
在这里插入图片描述
于是,得到如下递推公式,记作公式一
感知机学习算法的实现以及收敛性的简单证明_第8张图片
求由Wk 的更新过程公式,求得第K个误分类示例的扩充权值向量的L2范数,即
感知机学习算法的实现以及收敛性的简单证明_第9张图片
(由于是误分类点,所以公式第一行的第二项横小于零;第三项中 yi 的平方为1故省略)上述公式记作公式二。

结合公式一和公式二得证

感知机学习算法的实现以及收敛性的简单证明_第10张图片

定理表明

  • 误分类的次数k是有上界的,当训练数据集线性可分时,感知机学习算法原始形式迭代是收
    敛的。
  • 感知机算法存在许多解,既依赖于初值,也依赖迭代过程中误分类点的选择顺序。
  • 为得到唯一分离超平面,需要增加约束,如SVM。
  • 线性不可分数据集,迭代震荡

你可能感兴趣的:(学习笔记)