文档章节

感知器算法

溪边九节
 溪边九节
发布于 2017/07/27 22:35
字数 617
阅读 54
收藏 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/

© 著作权归作者所有

共有 人打赏支持
溪边九节

溪边九节

粉丝 43
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

VSCode 搭建Vue开发环境之Vue CLI

一、简介说明 1.关于VS Code开发工具,安装和配置,更多可以参考以前文章 2.关于Vue.js,Vue是一个优秀的渐进式前端框架,不仅易于上手,还便于与第三方库或既有项目整合。 3.关于Vue是使用方...

tianma3798
21分钟前
2
0
MySQL 相关博客整理

1. 《深入理解 MySQL 底层实现》 简评:文章从硬盘底层存储原理讲解到MySQL存储原理,其中涉及InnoDB 和 Myisam 中 B+Tree 的应用,以及常见数据库优化思路,算是一片很不错的讲解MySQL原理的...

科陆李明
31分钟前
2
0
pada rabbitmq server mangage

查看配置文件 ubuntu@node4:/etc/rabbitmq$ lltotal 28drwxr-xr-x 2 rabbitmq rabbitmq 4096 Jun 6 13:52 ./drwxr-xr-x 104 root root 12288 Sep 26 11:39 ../-rw-r--r-- ......

qwfys
39分钟前
0
0
SpringBoot进阶

慕课网链接 表单数据的验证 在pojo类属性的上面添加注解 @Entitypublic class Girl { @Id @GeneratedValue private Integer id; @NotBlank(message = "这个字段...

踏破铁鞋无觅处
46分钟前
1
0
【SylixOS】QT-QWS流程介绍

QWS简介 QWS(QT Windows System)是QT自行开发的窗口系统,体系结构类似X Windows的C/S结构。QWS Server在物理设备上显示,QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系...

suokin
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部