zoukankan      html  css  js  c++  java
  • 学习笔记——感知机

    感知机(perceptron)是二类分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,+1和-1。对应于输入空间中将将实例划分为正负两类的分离超平面,属于判别模型。是神经网络和支持向量机的基础。

    感知机模型


    感知机:由输入空间到输出空间的如下函数:

    [f(x) = sign(w cdot x + b) ]

    其中,(w,x,b)都是向量,(w)是权值,(x)是输入,(b)叫做偏置。

    感知机模型的假设空间是定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifier)。这个(w cdot x + b)就对应特征空间中的一个超平面,(w)是超平面的法向量,(b)是超平面的截距。超平面的一边是+1,另一边是-1,所以这个超平面称为分离超平面(separating hyperplance)。

    感知机学习策略


    要定义一个损失函数并将损失函数极小化,从而求得一个分离超平面,将线性可分的数据集分开。误分类的个数不太好,感知机采用的是误分类点到超平面的总距离,是(w)(b)的连续可导函数:

    [frac{1}{left | w ight |} |w cdot x_0 + b| ]

    简化一下,由于(y_i)是+1或-1,另外$frac{1}{left | w ight |} $可以不考虑,感知机的损失函数就可以定义为:

    [L(w,b) = -sum_{x_i in M} y_i(w cdot x_i + b) ]

    其中(M)是误分类点的集合。

    感知机学习算法


    求解上面那个损失函数最优化问题,最优化的方法是随机梯度下降法。

    感知机学习算法的原始形式

    • 输入:训练数据集(T = { (x_1,y_1), (x_2,y_2), cdot cdot cdot , (x_N,y_N) }),其中(x_i in mathcal{X} = R^n), (y_i in mathcal{Y} = { -1,+1 }), (i=1,2,cdot cdot cdot,N);学习率为(eta)(0<eta leq 1)
    • 输出:(w, b);感知机模型为(f(x) = sign(w cdot x + b))
    1. 选取初值(w_0), (b_0)
    2. 在训练数据中选取数据((x_i,y_i))
    3. 如果(y_i(w cdot x_i + b) leq 0)
    $$w leftarrow w + eta y_i x_i$$$$b leftarrow b + eta y_i$$
    
    1. 转至2,直到训练集中没有误分类点

    第三步就是一个基本的梯度下降,最低点梯度为0,如果现在的梯度大于0,那么就得减掉一点,(eta) 用来控制一下每一步减去的多少。

    采取不同的初值或选取不同的误分类点,最后都会找到正确的分离超平面,但是解可以不同。

    算法的收敛性

    可以证明,上面的方法经过有限次迭代可以得到一个将训练数据集完全正确划分的分离超平面及感知机模型。

    具体的过程就不写了,大概就是,每次迭代都在参数上改变一点点,然后就证明了第(k)次得到的超平面的法向量与肯定存在的一个分离超平面法向量的内积,与(k)的关系,之后就证明了:

    [k leq left ( frac{R}{gamma} ight )^2 ]

    其中,(gamma = min_{i} { y_i(w_{opt} cdot x_i + b_{opt}) })(R)等于最大的(x)的模......。

    感知机的对偶形式

    算法过程是一样的,但在这个过程中可以以另外一种形式来看待参数所发生的改变。感知机的原始形式和对偶形式可以和之后的支持向量机对应起来。

    • 输入:训练数据集(T = { (x_1,y_1), (x_2,y_2), cdot cdot cdot , (x_N,y_N) }),其中(x_i in mathcal{X} = R^n), (y_i in mathcal{Y} = { -1,+1 }), (i=1,2,cdot cdot cdot,N);学习率为(eta)(0<eta leq 1)
    • 输出:(alpha, b);感知机模型为(f(x) = signleft( sum_{j = 1}^N alpha_j y_j x_j cdot x + b ight)),其中(alpha = (alpha_1, alpha_2, ..., alpha_N)^T)
    1. (alpha leftarrow 0, b leftarrow 0)
    2. 在训练集中选取数据((x_i, y_i))
    3. 如果(y_ileft( sum_{j = 1}^N alpha_j y_j x_j cdot x + b ight) leq 0)
    $$alpha leftarrow alpha_i + eta$$$$b leftarrow b + eta y_i$$
    
    1. 转至2直到没有误分类数据

    对偶形式中的训练实例仅以内积形式出现,为了方便,可以预先将内积存储,这个矩阵就是Gram矩阵:

    [G = [x_i cdot x_j]_{N imes N} ]


    (注:本文为读书笔记与总结,侧重算法原理,来源为[《统计学习方法》](http://book.douban.com/subject/10590856/)一书第二章)
    作者:[rubbninja](http://www.cnblogs.com/rubbninja/) 出处:[http://www.cnblogs.com/rubbninja/](http://www.cnblogs.com/rubbninja/) 关于作者:目前主要研究领域为机器学习与无线定位技术,欢迎讨论与指正!
  • 相关阅读:
    Thinking in Java
    Interview Common Sample Codes
    Longest Common Substring
    Mac键盘按键符号
    ElasticSearch
    Variables and Arithmetic Expression
    Associative Containers
    Container Adaptors
    string Type
    初识 tk.mybatis.mapper 通用mapper
  • 原文地址:https://www.cnblogs.com/rubbninja/p/4896220.html
Copyright © 2011-2022 走看看