1. 感知机原理(Perceptron)

2. 感知机(Perceptron)基本形式和对偶形式实现

3. 支持向量机(SVM)拉格朗日对偶性(KKT)

4. 支持向量机(SVM)原理

5. 支持向量机(SVM)软间隔

6. 支持向量机(SVM)核函数

1. 前言

感知机是1957年,由Rosenblatt提出会,是神经网络和支持向量机的基础。

2. 感知机的原理

感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别,分别是+1和-1,属于判别模型。

假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集正实例点和负实例点完全正确分开的分离超平面。如果是非线性可分的数据,则最后无法获得超平面

2.1 点到线的距离

公式中的直线方程为\(Ax+By+C=0\),点\(P\)的坐标为\((x_0,y_0)\)。
\[
d=\frac{Ax_0+By_0+C}{\sqrt{A^2+B^2}}
\]

2.2 样本到超平面距离

我们假设超平面是\(h=w \cdot {x}+b\),其中\(w=(w_0,w_1,...w_m)\),\(x=(x_0,x_1,...x_m)\),样本点\(x^{'}\)到超平面的距离如下:
\[
d=\frac{w \cdot {x^{'}}+b}{||w||}
\]

2.2 超平面(Hyperplanes)

超平面是在空间\(R^d\)中的一个子空间\(R^{d-1}\)。

在2维空间中的超平面是一条线,在3维空间中的超平面是一个平面。

3. 感知机模型

感知机从输入空间到输出空间的模型如下:
\[
f(x)=sign(w \cdot {x}+b)
\]
\[
sign(x)= \begin{cases} -1& {x<0}\\ 1& {x\geq 0} \end{cases}
\]

3.1 感知机的损失函数

我们首先定义对于样本\((x_i,y_i)\),如果\(\frac{w\cdot {x_i}+b}{||w||}>0\)则记\(y_i=+1\),如果\(\frac{w\cdot {x_i}+b}{||w||}<0\)则记\(y_i=-1\)。

这样取y的值有一个好处,就是方便定义损失函数。因为正确分类的样本满足\(\frac{y_i(w\cdot {x_i}+b)}{||w||}>0\),而错误分类的样本满足\(\frac{y_i(w\cdot {x_i}+b)}{||w||}<0\)。我们损失函数的优化目标,就是期望使误分类的所有样本,到超平面的距离之和最小

所以损失函数定义如下:
\[
L(w,b)=-\frac{1}{||w||}\sum_{x_i\in{M}}y_i(w\cdot {x_i}+b)
\]
其中M集合是误分类点的集合。

不考虑\(\frac{1}{||w||}\),就得到感知机模型的损失函数:
\[
L(w,b)=-\sum_{x_i\in{M}}y_i(w\cdot {x_i}+b)
\]

3.2 为什么可以不考虑\(\frac{1}{||w||}\)

网上有人说\(\frac{1}{||w||}\)是个定值,但是个人觉得平面不唯一,这个值肯定也会变。通过参考他人观点结合思考,觉得原因可以列为以下两点。

  1. \(\frac{1}{||w||}\)不影响\(y_i(w\cdot {x_i}+b)\)正负的判断,即不影响学习算法的中间过程。因为感知机学习算法是误分类驱动的,这里需要注意的是所谓的“误分类驱动”指的是我们只需要判断\(-y_i(w\cdot{x_i}+b)\)的正负来判断分类的正确与否,而\(\frac{1}{||w||}\)并不影响正负值的判断。所以\(\frac{1}{||w||}\)对感知机学习算法的中间过程可以不考虑。
  2. \(\frac{1}{||w||}\)不影响感知机学习算法的最终结果。因为感知机学习算法最终的终止条件是所有的输入都被正确分类,即不存在误分类的点。则此时损失函数为0. 对应于\(-\frac{1}{||w||}\sum_{i\in{M}}y_i(w\cdot {x_i}+b)\),即分子为0.则可以看出\(\frac{1}{||w||}\)对最终结果也无影响。

综上所述,即使忽略\(\frac{1}{||w||}\),也不会对感知机学习算法的执行过程产生任何影响。反而还能简化运算,提高算法执行效率。

4. 感知机学习算法

感知机学习算法是对上述损失函数进行极小化,求得\(w\)和\(b\)。但是用普通的基于所有样本的梯度和的均值的批量梯度下降法(BGD)是行不通的,原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD)。目标函数如下:
\[
L(w,b)=arg\min_{w,b}(-\sum\limits_{{{x}_{i}}\in{M}}{{{y}_{i}}(w\cdot {{x}_{i}}+b)})
\]

4.1 原始形式算法

输入:训练数据集\(T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}\),\(y_i\in{\{-1,+1\}}\),学习率\(\eta(0<\eta<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)<=0\)则更新
    \[
    w={w+\eta{y_ix_i}}
    \]
    \[
    b={b+\eta{y_i}}
    \]
  4. 转到2,直到训练集中没有误分类点

4.2 对偶形式算法

由于\(w,b\)的梯度更新公式:

\[
w={w+\eta{y_ix_i}}
\]
\[
b={b+\eta{y_i}}
\]

我们的\(w,b\)经过了\(n\)次修改后的,参数可以变化为下公式,其中\(\alpha = ny\):

\[
w=\sum_{x_i\in{M}}\eta{y_ix_i}=\sum_{i=1}^n\alpha_iy_ix_i
\]
\[
b=\sum_{x_i\in{M}}\eta{y_i}=\sum_{i=1}^n\alpha_iy_i
\]
这样我们就得出了感知机的对偶算法。

输入:训练数据集\(T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}\),\(y_i\in{\{-1,+1\}}\),学习率\(\eta(0<\eta<1)\)

输出:\(\alpha,b\);感知机模型\(f(x)=sign(\sum_{j=1}^n\alpha_jy_jx_j\cdot {x}+b)\)

其中\(\alpha=(\alpha_1,\alpha_2,...,\alpha_n)^T\)

  1. 赋初值 \(\alpha_0,b_0\)
  2. 选取数据点\((x_i,y_i)\)
  3. 判断该数据点是否为当前模型的误分类点,即判断若\(y_i(\sum_{j=1}^n\alpha_jy_jx_j\cdot {x_i}+b)<=0\)则更新
    \[
    \alpha_i={\alpha_i+\eta}
    \]
    \[
    b={b+\eta{y_i}}
    \]
  4. 转到2,直到训练集中没有误分类点

为了减少计算量,我们可以预先计算式中的内积,得到Gram矩阵

\[
G=[x_i,x_j]_{N×N}
\]

4.3 原始形式和对偶形式的选择

  • 在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
  • 在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法

5. 训练过程

我们大概从下图看下感知机的训练过程。

线性可分的过程:

线性不可分的过程:

6. 小结

感知机算法是一个简单易懂的算法,自己编程实现也不太难。前面提到它是很多算法的鼻祖,比如支持向量机算法,神经网络与深度学习。因此虽然它现在已经不是一个在实践中广泛运用的算法,还是值得好好的去研究一下。感知机算法对偶形式为什么在实际运用中比原始形式快,也值得好好去体会。

1. 感知机原理(Perceptron)的更多相关文章

  1. 感知机(perceptron)原理总结

    目录 1. 感知机原理 2. 损失函数 3. 优化方法 4. 感知机的原始算法 5. 感知机的对偶算法 6. 从图形中理解感知机的原始算法 7. 感知机算法(PLA)的收敛性 8. 应用场景与缺陷 9 ...

  2. (数据科学学习手札34)多层感知机原理详解&Python与R实现

    一.简介 机器学习分为很多个领域,其中的连接主义指的就是以神经元(neuron)为基本结构的各式各样的神经网络,规范的定义是:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系 ...

  3. [笔记-统计学习方法]感知机模型(perceptron) 原理与实现

    前几天认把感知机这一章读完了,顺带做了点笔记 现在把笔记做第三次的整理 (不得不说博客园的LaTex公式和markdown排版真的不太舒服,该考虑在服务器上建一个博客了) 零.总结 适用于具有线性可分 ...

  4. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

  5. Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt

    1. Frank Rosenblatt 首先介绍的是神经网络的开山祖师,先放张图拜拜 Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教, ...

  6. 用感知机(Perceptron)实现逻辑AND功能的Python3代码

    之所以写这篇随笔,是因为参考文章(见文尾)中的的代码是Python2的,放到Python3上无法运行,我花了些时间debug,并记录了调试经过. 参考文章中的代码主要有两处不兼容Python3,一个是 ...

  7. 感知机(perceptron)

    二类分类的线性分类模型,属于判别模型,利用梯度下降法对损失函数进行极小化求得感知机模型分为原始形式和对偶形式,是神经网络和支持向量机的基础 由输入控件到输出控件的如下函数: f(x)=sign(W.X ...

  8. 【分类算法】感知机(Perceptron)

    0 - 算法描述 感知机算法是一类二分类算法,其问题描述为,给定一个训练数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 其中$x_i\in \m ...

  9. 感知机:Perceptron Learning Algorithm

    感知机是支持向量机SVM和神经网络的基础 f = sign(wx+b) 这样看起来好像是LR是差不多的,LR是用的sigmoid函数,PLA是用的sign符号函数,两者都是线性分类器,主要的差别在于策 ...

随机推荐

  1. linux达人养成计划学习笔记(五)—— 关机和重启命令

    一.shutdown 1.格式: shutdown [选项] 时间(now) 选项: -c: 取消前一个关机命令 -h: 关机 -r: 重启 2.程序放入后台执行: shutdown -r 时间 &a ...

  2. symbolicatecrash App Bug 分析工具

    1.symbolicatecrash 简介 symbolicatecrash 是一个 Xcode 自带解析 iOS Crash 文件的工具. 其它下载地址 symbolicatecrash,密码:6p ...

  3. 章节1:SQL语言简易入门

    一.增.删.改.查 1.增(向表格中插入数据): INSERT INTO tb_TableName(ColumnName1,ColumnName2) VALUES(ColumnValue1,Colum ...

  4. [转]springSecurity源码分析—DelegatingFilterProxy类的作用

    使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置, <filter>  <filter-name>springSecurityFilterC ...

  5. java学习记录--ThreadLocal使用案例

    本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class ...

  6. MySQL中NULL与空字符串

    一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串’  ’是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而”则表示值是存在的,只不过是个 ...

  7. 关于python中__name__=='__main__'的解释

    调用文章是:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318451 ...

  8. activiti主要API对象

    ProcessEngine         //流程引擎 RuntimeService      //与流程实例,执行对象(正在执行) TaskService           //正在执行任务 H ...

  9. 利用阿里云如何开发一款直播app?

    在开发的过程中应该注意些什么?下面让小编告诉你: 随着互联网的发展,越来越多的人已经加入互联网的行列.而且很多的人也开始直播,和众多的网友分享自己身边事情.互联网还在加速发展,从PC互联网,到移动互联 ...

  10. eclipse自动切换到debug视图

    原文出自:http://blog.csdn.net/yizhizouxiaqu/article/details/7594502 当弹出"Confir Perspective Switch&q ...