感知机是二类分类的线性分类模型,所谓二分类指的是输出的类别只有-1或1两种,所谓线性指的是输入的特征向量集合在特征空间中被超平面划分为相互分离的正负两类。感知机学习的目的正是为了求出将训练数据进行线性划分的分离超平面。

1、感知机模型:

定义:x是n维特征向量,y是判断的二元类别-1或1,判别函数f(x)=sign(wx+b),其中w和b是参数,w称为权重向量,b称为偏置,sign为符号函数。

说明:感知机模型的假设空间为定义在特征空间中的所有线性分类模型或线性分类器,即函数集合{f|f(x)=wx+b}。

几何解释: f(x)=wx+b=0,对应特征空间中的一个超平面,其中w是超平面法向量,b是超平面的截距,这个超平面将特征空间划分为两个部分,位于两部分的特征向量分别被称为正、负两类。

2、感知机学习策略(原则、标准):

感知机有未知参数w、b,为了使用感知机必须基于样本数据求出未知参数,这里选择“经验风险损失最小原则”。首先需要确定损失函数,直观地以错误分类点的总数为损失函数最为自然,但缺点是w、b参数空间不连续可导,不易于优化。因此选择损失函数为错误分类点到超平面的总距离。点到超平面的距离为|wx+b|/||w||,||w||为L2范数,那么错误分类的数据到超平面的距离可以表示为  -y(wx+b)/||w||, 因此损失函数表示为:

其中M是错误分类的点的集合,显然损失函数是非负的,如果没有错误分类的点,损失函数值为零。而且错误分类的点越少、误分类点离超平面越近,损失函数值就越小。

3、学习算法:对给定的样本集,求参数w、b使得损失函数最小化

损失函数的梯度:

算法1:随机梯度下降法

算法解释:

首先任意选取一个超平面w、b,然后用梯度下降法不断地极小化损失函数,极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

其中是步长,又称为学习率。这样通过迭代可以期待损失函数不断减少,直到0。直观上理解,当一个点被错误分类,即位于分离超平面的错误一侧时,则调整w,b的值,使超平面向该分类点的一侧移动,以减少该分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。可以看出,使用不同的初始值或选取不同的误分类点顺序会导致不同的解。可以证明训练样本线性可分时这个算法经过有限步后是收敛的。

算法2:算法1的对偶形式

算法解释:

基本思想是将w、b表示为x、y的线性组合形式,通过求解其系数而求得w、b。根据上面的算法1,从假设w、b分别为零开始,经过多次迭代到最终获得解,最终w、b可以表示为:

这里表示第i个点由于被误分而进行更新的次数,点更新的次数越多,意味着它离超平面越近,也就越难正确分类,也就是这样的点对学习结果的影响最大。将感知机表达式替换成上面的式子,就变成了先求解系数,最后直接计算w。在算法迭代过程中点之间的计算只涉及內积形式,故可以预先以Gram=[xixj]NXN矩阵存储。

机器学习PR:感知机模型的更多相关文章

  1. 机器学习入门 一、理解机器学习+简单感知机(JAVA实现)

    首先先来讲讲闲话 如果让你现在去搞机器学习,你会去吗?不会的话是因为你对这方面不感兴趣,还是因为你觉得这东西太难了,自己肯定学不来?如果你觉的太难了,很好,相信看完这篇文章,你就会有胆量踏入机器学习这 ...

  2. 统计学习方法 --- 感知机模型原理及c++实现

    参考博客 Liam Q博客 和李航的<统计学习方法> 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...

  3. 使用numpy实现批量梯度下降的感知机模型

    生成多维高斯分布随机样本 生成多维高斯分布所需要的均值向量和方差矩阵 这里使用numpy中的多变量正太分布随机样本生成函数,按照要求设置均值向量和协方差矩阵.以下设置两个辅助函数,用于指定随机变量维度 ...

  4. (转)看穿机器学习(W-GAN模型)的黑箱

        本文转自:http://www.360doc.com/content/17/0212/11/35919193_628410589.shtml#   看穿机器学习(W-GAN模型)的黑箱 201 ...

  5. 【机器学习】感知机学习算法(PLA)

    感知机问题学习算法引入:信用卡问题 根据已知数据(不同标准的人的信用评级)训练后得出一个能不能给新客户发放信用卡的评定结果 解决该问题的核心思想扔为之前所讲到的梯度下降算法,对于更多条件的类似问题,首 ...

  6. 感知机模型到DNN模型

    参考资料 感知机模型:https://www.cnblogs.com/pinard/p/6042320.html DNN:https://www.cnblogs.com/pinard/p/641866 ...

  7. 【感知机模型】手写代码训练 / 使用sklearn的Perceptron模块训练

    读取原始数据 import pandas as pd import numpy as np in_data = pd.read_table('./origin-data/perceptron_15.d ...

  8. python机器学习——使用scikit-learn训练感知机模型

    这一篇我们将开始使用scikit-learn的API来实现模型并进行训练,这个包大大方便了我们的学习过程,其中包含了对常用算法的实现,并进行高度优化,以及含有数据预处理.调参和模型评估的很多方法. 我 ...

  9. 吴裕雄 python 机器学习——人工神经网络与原始感知机模型

    import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ...

随机推荐

  1. HackerRank "Jumping on the Clouds"

    DP or Greedy - they are all in O(n) In editorial, a beautiful Greedy solution is given: "To rea ...

  2. 解决在VS2015下用C++开发的DLL在WIN7上无法加载运行

    首先用Dependency Walker检查该DLL依赖的库,如下图所示: 依赖的动态库除了KERNEL32.DLL.USER32.DLL外,还包括了MSVCP120D.DLL以及MSVCR120D. ...

  3. 影响性能的关键部分-ceph的osd journal写

    在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...

  4. 基础14_转义字符和特殊字符ASCII

    一.摘要 PSQL转义字符 二.PLSQL转义字符 PLSQL对应的字符和序号关系 二.PLSQL特殊字符 PLSQL对应的字符和序号关系 1. 转义字符为' '; )||'%'; --A&B ...

  5. linux 出core设置问题

    我所在的环境是RedHat 1.第一步 修改/etc/security/limits.conf添加一行 user为生效的用户 user hard core unlimited 2.第二步 在普通用户的 ...

  6. DEDE后台登录和前台验证码不显示的解决方法

    DEDE后台登录和前台验证码不显示的解决方法,网络上现在有好几种方法,某些时候还是有用的.说说自己今天遇到的一个情况,跟其他不一样的原因和解决方法:  方法一 1.用ftp把网站根目录下的DATA文件 ...

  7. Nhibernate对应关系参数介绍

    一.多对一关联映配置介绍 <many-to-one name="PropertyName" 属性名 column="column_name" 数据库字段名 ...

  8. C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别

    全局变量.局部变量.静态全局变量.静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作 ...

  9. 慕课网-Java入门第一季-7-5 Java 中带参无返回值方法的使用

    public class HelloWorld { public static void main(String[] args) { // 创建对象,对象名为hello HelloWorld hell ...

  10. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...