关闭

机器学习之感知器

标签: 机器学习神经网络感知器线性
1017人阅读 评论(0) 收藏 举报
分类:

感知器

在讲神经网络前先说说感知器,感知器是一种二分类的线性分类模型,输出值取-1或1。感知器是最基础的神经网络,理解好感知器对后面的各种神经网络模型是很有帮助的。如下图,
这里写图片描述

它可以有多个输入(x1,x2,...xn),每个输入对应有一个权重(w1,w2...wn),除此之外还有一个偏置项w0

则输出为

o(x)=1,1,ifi=0nxiwi>0;otherwise;

其中将x0看成是1。而
i=0nxiwi=x0w0+x1w1+...+xnwn

则可以看成是x与w的点积。

感知器的作用

它的输入就是一个线性函数,所以可用于线性分类。同时感知器是单层神经网络,是神经网络的基础。

损失函数

损失函数可以用错误分类的点到超平面的总距离来表示,不直接使用统计错误分类的点总数作为损失函数是因为这样的损失函数不是w的连续可导函数。其中距离可用欧氏距离来表示,可用w的L2范数w来表示,于是根据距离公式有,

1w|wx0+b|

对于错误分类的点有,yi(wxi+b)>0,其中y为1或-1,所以错误分类点到超平面的距离为

1wyi(wx0+b)

得到总距离为
1wxiϵMyi|wx0+b|

忽略范数部分,于是得到损失函数
L(w,b)=xiϵMyi(wx0+b)

所以要做的是最小化损失函数L(w,b),使用梯度下降法,梯度分别由w和b的偏导决定,过程中随机用某个错误分类点来更新w和b,更新公式为w+ηyixib+ηyi

实现代码

import numpy as np

eta = 0.1
ite = 20

def train(x, y):
    w_ = np.zeros(1 + x.shape[1])
    for _ in range(ite):
        for xi, yi in zip(x, y):
            update = eta * (yi - predict(xi, w_))
            w_[1:] += update * xi
            w_[0] += update
    return w_

def predict(x, w):
    return np.where(np.dot(x, w[1:]) + w[0] >= 0, 1, -1)

x_train = np.array([[1, 2], [2, 1], [2, 3], [3, 5], [1, 3], [4, 2], [7, 3], [4, 5], [11, 3], [8, 7]])
y_train = np.array([1, 1, -1, -1, 1, -1, -1, 1, -1, 1])

w = train(x_train, y_train)
print("w = " , w)
x1 = [4, 3]
print(predict(x1, w))

========广告时间========

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================
欢迎关注:

这里写图片描述

1
0
查看评论

机器学习笔记1—感知器(Perceptron)

1 用途感知器即单层神经网络,或者叫做神经元,是组成神经网络的最小单元。其作用即为“分类”,但是什么叫做“分类“?“分类”在实际中又有什么用途? 为了方便理解,我想把“分类”和“聚类”对比着来总结。分类即,将不同的数据不同特性分成不同的类别。字面意思很好理解,但是实际中是做什么的呢?比如,垃圾邮件...
  • yueshuw123
  • yueshuw123
  • 2016-02-26 22:06
  • 2055

感知器 机器学习算法

所谓感知机,就是二类分类的线性分类模型,其输入为样本的特征向量,输出为样本的类别,取+1和-1二值,即通过某样本的特征,就可以准确判断该样本属于哪一类。顾名思义,感知机能够解决的问题首先要求特征空间是线性可分的,再者是二类分类,即将样本分为{+1, -1}两类。   感知机函数f(x) ...
  • wx19921014
  • wx19921014
  • 2016-11-07 16:20
  • 265

机器学习与神经网络(二):感知器的介绍和Python代码实现

本篇博文主要介绍感知器的相关知识,采用理论+代码实践的方式,进行感知器的学习。本文首先介绍感知器的模型,然后介绍感知器学习规则(Perceptron学习算法),最后通过Python代码实现单层感知器,从而给读者一个更加直观的认识。
  • huakai16
  • huakai16
  • 2017-08-22 18:49
  • 419

机器学习系列:(八)感知器

感知器 前面,我们介绍了广义线性模型,用联接方程描述解释变量、超参数和响应变量的线性关系。这一章,我们将介绍另一种线性模型,称为感知器(perceptron)。感知器是一种研究单个训练样本的二元分类器,训练较大的数据集很有用。而且,感知器和它的不足激发了我们后面两种将介绍的模型。 ...
  • u013719780
  • u013719780
  • 2016-06-24 20:39
  • 9038

【机器学习】简单感知器

简单感知器由一个线性组合器和硬限幅器(即sgn函数,判断是正数返回1,负数返回-1)组成,线性组合器有m个输入,m个输入权值,一个偏置,图像表述如下: (Simson Haykin) 用数学方法表述就是y=∑wixi+b,i=1,2,3…m,如果sgn(y)=+1,则分为第一类,否则分为第二类。...
  • lpsl1882
  • lpsl1882
  • 2016-04-11 12:17
  • 742

神经网络与机器学习笔记——Rosenblatt感知器

Rosenblatt感知器 感知器是用于线性可分模式(模式分别位于超平面两边)分类的最简单的神经网络模型,基本上由一个具有可调突触权值和偏置的神经元组成。 Rosenblatt证明了当用来训练感知器的模式(向量)取自两个线性可分的类时,感知器算法是收敛的,并且决策面是位于两类之间的超平面。算法的收敛...
  • LXYTSOS
  • LXYTSOS
  • 2015-05-01 10:22
  • 4887

机器学习——感知器算法及python实现

说明:本文从自己的理解出发来讲解感知器是如何训练的,如想知道比较学术的概念,请查阅相关论文。 1、什么是感知器 本文假设数据为:二维二类、线性可分 感知器就是一个分类器,如:给两类数据做训练集A,B,训练完成之后,给定一个测试数据,通过感知器,可以分成A或B。 因为数据是二维线性可分的,我们不妨假...
  • u013316305
  • u013316305
  • 2017-05-10 16:35
  • 1084

什么是感知器学习算法(Perceptron Learning Algorithm/PLA)?

什么是感知器学习算法(Perceptron Learning Algorithm/PLA)?
  • firparks
  • firparks
  • 2016-02-09 01:41
  • 1888

机器学习之感知器——and运算的实现

概要:感知器是人工神经网络中的一种典型结构,它可以被视为一种最简单形式的前馈式人工神经网络,是一种二元线性分类器,把矩阵上的输入(实数值向量)映射到输出值 f(x)f(x)上(一个二元的值)。 f(x)={1,0,if w∗x+b>0elsef(x)=\begin{cases}1,...
  • qingshui23
  • qingshui23
  • 2017-12-26 20:52
  • 166

闲谈:感知器学习算法(The perceptron learning algorithm)

感知器学习算法
  • blackyuanc
  • blackyuanc
  • 2017-04-17 14:53
  • 941
    作者
    https://github.com/sea-boat

    公众号:(内容包括分布式、机器学习、深度学习、NLP、Java深度、Java并发核心、JDK源码、Tomcat内核等等)



    微信:

    打赏作者

    如果您觉得作者写的文章有帮助到您,您可以打赏作者一瓶汽水(*^__^*)

    个人资料
    • 访问:1067109次
    • 积分:14131
    • 等级:
    • 排名:第1046名
    • 原创:327篇
    • 转载:5篇
    • 译文:1篇
    • 评论:348条
    博客专栏
    最新评论