感知机初探

定义: 假设输入空间(特征空间)是

,输出空间是

,输入

表示实例的特征向量,对应于输入空间(特征空间)的点,输出

表示实例的类别,由输入空间到输出空间的如下函数:

称为感知机。其中,w和b为感知机模型参数

叫作权值(weigh)或权值向量(weigh vector),

叫作偏置(bias),

表示w和x的内积。sign是符号函数,即

感知机模型的假设空间:定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifier)即函数集合:

感知机有如下几何解释:线性方程

对应于特征空间

中的一个超平面S,其中w是超平面的法向量,b是超平面的截距。这个超平面将特征空间划分为两个部分,位于两部分的点(特征向量)分别被分为正、负两类。因此超平面S称为分离超平面(separating hypeplane),如下图。

损失函数:误分类点到超平面S的总距离。其中输入空间

中任一点 到超平面S的距离

这里

是w的

范数。

其次,对于误分类的数据

来说

成立,因为

时,

, 而当

时,

,因此,误分类点

到超平面S的距离是:

这样,假设超平面的S的误分类集合为M,那么所有误分类点到超平面S的总距离为:

不考虑

,就得到感知机学习的损失函数。

求感知机模型参数w和b,转化为以下损失函数极小化问题解:

其中M为误分类点的集合。

感知机学习算法是误分类驱动的,具体采用随机梯度下降法(stochastic gradient descent)。首先,任意选取一个超平面

,然后用梯度下降法不断极小化损失函数。极小化过程中不是一次使M中所有误分类点的梯度下降而是一次随机选取一个误分类点使其梯度下降。

假设误分类点集合M是固定的,那么损失函数

的梯度由

给出,随机选取一个误分类点

,对w,b进行更新:

式中

步长,在统计学中又称为学习率(learning rate)。这样,通过迭代可以期待损失函数不断减少,直到为0。综上,得到如下算法:

  • 输入:训练数据集T
  • 输出:w,b:感知机模型

(1)选取初值

(2)在训练集中选取数据

(3)如果

(4)转之(2)直到训练集中没有误分类点。

代码实现:此部分分为两部分,第一部分为手撸感知机,第二部分为基于skleran来实现感知机。

第一部分:手撸感应机代码

加载需要用的库,其中time用来计算程序运行的时间不必在意。

产生数据集,其中数据的第一个值为1,是将偏置b并入权重向量w,记作

,同样也将输入向量加以扩充,加进常数1记作

, 产生。

产生测试数据

定义符号函数

定义pla函数,其中首先将训练数据用mat函数转化成矩阵,为后面做线性运算做准备,同理将标签转化成矩阵并转置,在通过shape函数获得训练数据大小(在此处m为6,n为3)并初始化w。在通过while语句设定条件,在其中遍历每个数据,计算值是否与标签一直,如果一致则继续下一个,不一致,则修改w,当遍历全部数据后,没有错误的值时,结束,最后返回w。

定义一个画散点图函数。

定义预测函数

运用预测函数进行预测。并把结果记在predict中。

定义一个main函数,将前面的函数整合。

运行程序。,得出结果。

结果解释,图下面的依次为w与预测结果。

第二部分:基于skleran实现。由于实现过程过于同一,且网络上存在许多类似的,在此只介绍思路:

(1)通过sklearn中的make_classification来产生样本。

(2)将生成的样本分为训练数据和测试数据,同时将其中的正例和反例也分开。

(3)从sklearn.linear_model加载模型,运用训练数据训练感知机模型,得出感知机模型。具体参数查看

(http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html#sklearn.linear_model.Perceptron)

(4)图示化。

原文发布于微信公众号 - C与Python实战(CPythonPractice)

原文发表时间:2018-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

手把手教你用 TensorFlow 实现卷积神经网络(附代码)

在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下。首先介绍原理部分。 通过一个图像分类问题介绍卷积神经网络是如何工作的。下面是卷积神经...

36860
来自专栏机器学习算法原理与实践

感知机原理小结

    感知机可以说是最古老的分类方法之一了,在1957年就已经提出。今天看来它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知...

8920
来自专栏用户2442861的专栏

聚类算法原理及python实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

26340
来自专栏null的专栏

机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization

本节主要介绍的是libFM源码分析的第五部分之二——libFM的训练过程之Adaptive Regularization的方法。 5.3、Adaptive Re...

68570
来自专栏AI研习社

感知机(Perceptron)是怎么实现“知错能改”的?

感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机对应于输入空间中将实例划分为正负两类的...

39680
来自专栏宏伦工作室

用自编码器进行图像去噪

29640
来自专栏JasonhavenDai

统计学习方法之感知机1.感知机模型2.学习策略3.学习算法4.源代码

1.感知机模型 在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感...

41950
来自专栏AI研习社

一文详解 Word2vec 之 Skip-Gram 模型(结构篇)

这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合,这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用T...

66440
来自专栏闪电gogogo的专栏

《统计学习方法》笔记二 感知机

感知机(perceptron)是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取±1。感知机对应与输入空间中将实例划分为正负两类的分离超平面,属...

8420
来自专栏张俊红

决策树-CART算法

总第80篇 01|前言: 本篇接着上一篇决策树详解,CART是英文“classification and regression tree”的缩写,翻译过来是分...

39050

扫码关注云+社区

领取腾讯云代金券