感知器

作者: SLClinchen | 来源:发表于2018-11-10 15:12 被阅读0次
class Perceptron:
   """使用Python语言实现感知器算法,实现二分类。"""
   
   def __init__(self, alpha, times):
       """初始化方法。
       
       Parameters
       -----
       alpha : float
           学习率。
           
       times : int
           最大迭代次数
       
       """
       self.alpha = alpha
       self.times = times
       
   def step(self, z):
       """阶跃函数。
       
       
       Parameters
       -----
       z : 数组类型(或者是标量类型)
           阶跃函数的参数。可以根据z的值,返回1或-1(这样就可以实现二分类)。
           
       Returns
       -----
       value : int
           如果z >= 0,返回1, 否则返回-1。
       """
       
#         return 1 if z >=0 else 0
       return np.where(z >= 0, 1, -1)

   def fit(self, X, y):
       """根据提供的训练数据,对模型进行训练。
       
       Parameters
       -----
       X : 类数组类型。形状:[样本数量,特征数量]
           待训练的样本数据。
           
       y : 类数组类型。 形状: [样本数量]
           每个样本的目标值。(分类)
       
       
       """
       X = np.asarray(X)
       y = np.asarray(y)
       # 创建权重的向量,初始值为0.长度比特征多1.(多出的一个就是截距)。
       self.w_ = np.zeros(1 + X.shape[1])
       #创建损失列表,用来保存每次迭代后的损失值。
       self.loss_ = []
       # 循环指定的次数。
       for i in range(self.times):
           #  感知器与逻辑回归的区别:逻辑回归中,使用所有样本计算梯度,然后更新权重。
           # 而感知器中,是使用单个样本,依次进行计算梯度,更新权重。
           loss = 0
           for x, target in zip(X, y):
               # 计算预测值
               y_hat = self.step(np.dot(x, self.w_[1:]) + self.w_[0])
               loss += y_hat != target
               # 更新权重。
               # 更新公式: w(j) = w(j) +  学习率 * (真实值 - 预测值) * x(j)
               self.w_[0] += self.alpha * (target - y_hat)
               self.w_[1:] += self.alpha * (target - y_hat) * x
           # 将循环中累计的误差值增加到误差列表当中。
           self.loss_.append(loss)
           
   def predict(self, X):
       """根据参数传递的样本,对样本数据进行预测。(1或-1)
       
       Parameters
       -----
       X : 类数组类型, 形状为:[样本数量, 特征数量]
           待预测的样本特征。
           
       Returns
       -----
       result : 数组类型
           预测的结果值(分类值1或-1)
       
       """
       
       return self.step(np.dot(X, self.w_[1:]) + self.w_[0])

相关文章

  • DL01-2:感知器训练的数学基础

    摘要:1、感知器的数学本质;2、感知器的训练过程;3、感知器训练过程的数学计算公式;4、感知器训练的数学推导; 1...

  • 神经网络之感知器

    感知器的定义 下面是一个感知器: 可以看到,一个感知器有如下组成部分: 输入权值 一个感知器可以接收多个输入,每个...

  • 基于Python的Rosenblatt感知器模型

    Rosenblatt感知器 Rosenblatt感知器是一种最简单的感知器模型,即输出值为输入与对应权值相乘后取和...

  • DL01-6: 单层神经网络

    本主题内容包含:理解单层多感知器神经网络(不含隐藏层)。实现单层神经网络分类(矩阵)。 多感知器实际就是单个感知器...

  • 线性单元与梯度下降

    什么是线性单元 感知器存在一个问题,即数据集不是线性可分的时候,“感知器规则”可能无法收敛,可能永远无法完成感知器...

  • 感知器通俗剖析

    请关注公众号AI Engine 在说多层感知器之前我们先来谈谈单纯的感知器,其实单纯的感知器就是一个由两层神...

  • DL01-3:感知器实现(标量版)

    摘要:1、使用标量实现感知器;2、使用鸢尾花作为训练与测试样本; 鸢尾花: 一、感知器算法与公式 1、感知器训练算...

  • 机器学习笔记(8):感知器

    本文来自之前在Udacity上自学机器学习的系列笔记。这是第8篇,介绍了监督学习中的感知器。 感知器感知器如下图所...

  • 分类(3):人工神经网络(ANN)

    一、感知器 下图为一个感知器,单个神经元。 该感知器的算法: 二、多层人工神经网络 (1)基本概念 神经网络,这里...

  • 多层感知器MLP原理

    异或问题(XOR)无法使用单层感知器来做处理,因此可以使用多层感知器

网友评论

      本文标题:感知器

      本文链接:https://www.haomeiwen.com/subject/fmbzxqtx.html