文档章节

感知器算法

无若
 无若
发布于 2017/07/27 22:35
字数 617
阅读 48
收藏 0
点赞 0
评论 0

在机器学习中,感知器是一种监督学习的二元分类器算法。

具体来说,感知器算法适用于解决是否,可以或不可以之类的二元分类问题。

从一个例子来说:

假设有image ~ image, 5个向量(5个贷款申请人), 其中image中的第一个特征值为年龄,第二个特征值为年收入(万)。

d1~d5 是历史记录上这5个人贷款批准的情况记录,-1为不批准,+1为批准。

  • image = (20, 10), image = -1
  • image = (23, 12), image = -1
  • image = (20, 8), image = -1
  • image = (25, 14), image = +1
  • image = (28, 15), image = +1

对应地,还有一个权值向量 image = (3, 7) , 即代表着年龄在模型中占3,年收入占7。

根据感知器算法:

算法的目的是求得一个目标函数: image 通过此函数就能判定给定 image 的 image

image

  • 其中 image ~ image 是 s 个样本

  • image 是 n 维的输入向量

  • image 是感知器的输出值

  • image 指的是第 j 个向量由 i 个特征值构成

  • image = 1

  • image 是在权重向量中的第 i 个值

  • image 是一个偏置值,一般情况下用 b 来代替

  • image 是权重 i 在第 t 轮的值

实际的计算过程:

  • (1) 初始化权重及门槛值为 0。
  • (2) 输入 image , 求 image
  1. 计算实际地输出

image image

  1. 更新权重

image

那么,设定初始值:image

  • image 时:

image

image

image

image (需要修正)

修正:

image

image

image

image

  • image 时:

image

image

image

image(不需要修正)

继续

image

 image(需要修正)

修正:

image

image

image

-image 时:

image 

image(不需要修正)

 

image

 image(不需要修正)

 

image 

image(不需要修正)

 

image

 image(不需要修正)

 

image 

image (不需要修正)

 

那么,到 image 时,所有样本都已经符合对应的 image

image

image

image

则:

image

如果希望在二维坐标系中表示此函数,则:

image

image

#coding=utf-8

import numpy as np

class Perceptron(object):
    
    def __init__(self, orgi_weight = [], orgi_samples = []):
        self.weight_t = 0
        self.weight = np.array(orgi_weight)
        self.orgi_samples = orgi_samples
    
    def add_orgi_sample(self, new_sample=[]):
        self.orgi_samples.append(new_sample)
    
    def learning(self):
        samples = []
        results = []

        for s in self.orgi_samples:
            samples.append(np.array(s[0]))
            results.append(np.array(s[1]))
            
        # weight_t = 0
        sample_t = 1
        inx = 0
        while inx < len(samples):
            # print "turn: ", inx, ", w:", self.weight_t
            out = (self.weight_t * sample_t) + np.dot(self.weight, samples[inx])
            if np.sign(out) != results[inx]:
                #print results[inx], out
                self.weight_t = self.weight_t + (results[inx] - out) * sample_t
                inx = 0
            else:
                inx += 1
        
    
    def judge(self, new_sample=[]):
        new_sample = np.array(new_sample)
        out = np.dot(self.weight, new_sample) + self.weight_t
        return np.sign(out)


if __name__ == '__main__':

    orgi_samples = [
        [[20, 10], -1], 
        [[23, 12], -1],
        [[20, 8], -1], 
        [[25, 14], 1], 
        [[28, 15], 1]
        ]

    orgi_weight = [3, 7]

    perceptron = Perceptron(orgi_weight, orgi_samples)
    perceptron.learning()
    # 新建一个输入,查看此样本是否能被批准
    print perceptron.judge([30, 10]) # 1
    
    # 添加样本重新学习
    perceptron.add_orgi_sample([[30, 10], -1])
    perceptron.learning()
    print perceptron.judge([30, 10]) # -1
    print perceptron.judge([30, 11]) # 1

 

重要参考:

https://en.wikipedia.org/wiki/Perceptron

https://zh.wikipedia.org/wiki/感知器

https://brilliant.org/wiki/perceptron/

© 著作权归作者所有

共有 人打赏支持
无若

无若

粉丝 41
博文 128
码字总数 106726
作品 0
南京
程序员
【工具使用系列】关于 MATLAB 感知器神经网络,你需要知道的事

如何使用感知器神经网络 MATLAB 实现 感知器网络的生成 感知器网络的仿真 感知器网路的初始化 感知器网络的学习和训练 设计实例 输入向量的二类划分 奇异样本输入向量的训练 标准化感知器学习...

AllenMoore
01/29
0
0
零基础入门深度学习(1) - 感知器

python深度学习大全 原文地址:https://www.zybuluo.com/hanbingtao/note/433855 深度学习是啥 在人工智能领域,有一个方法叫机器学习。在机器学习这个方法里,有一类算法叫神经网络。神经网...

luanpeng825485697
01/09
0
0
人工智能基础算法之感知器(1)

1. 引言 感知器(perceptron)是比较简单的二分类器,通过对训练样本集的学习,从而得到判别函数权值的解,产生线性可分的样本判别函数。该算法属于非参数算法,优点是不需要对各类样本的统计...

qq_35535744
05/12
0
0
【转】脉络清晰的BP神经网络讲解,赞

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2013/04/24/3041019.html,如需转载请自行联系原作者...

文艺小青年
2017/11/17
0
0
TensorFlow人工智能引擎入门教程之八 接着补充一章MLP多层感知器网络原理以及 使用

这一章我们讲MLP 多层感知器 的使用,多层感知器 ,常用来做分类,效果非常好,比如文本分类,效果比SVM 贝叶斯 好多了,这些以前的机器学习很有名的算法,我现在基本不用它们,现在是深度学...

zhuyuping
2016/04/21
2.3K
0
零基础入门深度学习:感应器、线性单元和梯度下降

投稿:Intelligent Software Development 团队介绍:团队成员来自一线互联网公司,工作在架构设计与优化、工程方法研究与实践的最前线,曾参与搜索、互联网广告、共有云/私有云等大型产品的设...

韩炳涛
2016/08/04
0
0
关于神经网络,这里有你想要了解的一切!

介绍 随着神经网络的发展,很多过去曾被认为是难以完成的任务现在已经可以完成了例如图像识别、语音识别,在数据集中发现更深的关系等已经变得更加容易了。所以我们应该衷心感谢这一领域的杰...

【方向】
05/28
0
0
机器学习(1)---感知器模型详解

感知器定义 感知器模型来源以及生物神经元的数学抽象 如下图所示 1 生物神经元需要接收与其相连的其他神经元传递过来的信号 2 生物神经元对接收到的多个信号进行运算,输出响应 那么问题来了...

蜡笔小鸡骷髅
2017/12/15
0
0
深度学习算法实践3---神经网络常用操作实现

在神经网络中,最基本的单元为神经元。一个神经元可以视为具有i=1,2,...,n个输入,一个偏移量bias的单元,假设输入信号为x1,x2,...,xn,每个输入信号的权重为w1,w2,...,wn,则这个神经元的总...

yt7589
2016/08/05
0
0
神经网络入门

眼下最热门的技术,绝对是人工智能。 人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一...

阮一峰
2017/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
17分钟前
0
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
40分钟前
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0
编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰...

原创小博客
昨天
0
0
流利阅读笔记33-20180722待学习

黑暗中的生物:利用奇技淫巧快活生存 Daniel 2018-07-22 1.今日导读 如果让你在伸手不见五指的黑暗当中生存,你能熬过几天呢?而大千世界,无奇不有。在很多你不知道的角落,有些生物在完全黑...

aibinxiao
昨天
6
0
Hystrix降级逻辑中如何获取触发的异常

通过之前Spring Cloud系列教程中的《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际...

程序猿DD
昨天
1
0
gin endless 热重启

r := gin.New()r.GET("/", func(c *gin.Context) {c.String(200, config.Config.Server.AppId)})s := endless.NewServer(":8080", r)s.BeforeBegin = func(add string) ......

李琼涛
昨天
1
0
JAVA模式之代理模式

平时一直在用spring,spring中最大的特效IOC和AOP,其中AOP使用的就是代理模式.闲着无聊,随手写了一个代理模式,也记录下代理模式的实现Demo. 比如现在有一个场景是:客户想要增加一个新的功能,...

勤奋的蚂蚁
昨天
0
0
ES15-JAVA API 索引管理

1.创建连接 创建连接demo package com.sean.esapi.client;import java.net.InetSocketAddress;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.clien......

贾峰uk
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部