微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

McCullock-Pitts 神经元模型 (MCP) 中的阈值

如何解决McCullock-Pitts 神经元模型 (MCP) 中的阈值

根据 MCP 模型,我们使用 Heaviside 阶跃函数

Heaviside step function

其中 z 是净输入,假设 m 是样本总数,i 是样本的特定特征,w 和 x 分别指权重和样本向量。 然而,我们可以将 theta 移到左边,让 w0 = -theta 并且 x0 = 1。因此输出 = 1 的条件应该是当 z 大于或等于 0 时。 >

net input calculation

我们将其用作感知器算法(我们的神经元网络)的激活函数。以下是控制机器学习的两条规则:

  1. 将权重初始化为 0 或一个小的随机变量
  2. 对于每个训练样本 x^{j} 执行以下操作
    • 计算输出值,y(预测的类别标签
    • 更新权重

权重通过将 delta w 添加到各个权重来更新: delta w calculation 其中 eta 是学习率,y 和 y hat 分别是真实类标签和预测类标签

这是有问题的感知器算法(python3

np.array([2,1])

tl;dr 从这里开始

  1. 参考 MCP 模型,那里的阈值 (theta) 是多少?即使我将 theta 视为零(甚至完全删除它),该算法似乎也能正常工作。是不是因为我使用的数据样本? (https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)
  2. 权重本身是否不足以调整样本的净输入值相对于 0(假设 theta 不再存在)?
  3. 我们如何将 theta 视为权重?似乎在算法中 theta 根据样本而变化,因为 fits 函数在内部 for 循环中遍历它们。

感谢您抽出宝贵时间。

编辑 每行代表内部 for 循环特定实例的权重。 以下是代码中保留阈值 (self.w_[0]) 时的权重值:

import numpy

class Perceptron:
  def __init__(self,eta=0.01,n_iter=10):
    self.eta = eta
    self.n_iter=10 ## total number iterations to run the algorithm on the given samples
  def fit(self,X,y): ## X represents a matrix entity
    self.w_ = np.zeros(1 + X.shape[1]) ## w_ are the weights. +1 because first element is theta
    for _ in range(self.n_iter):
      for xi,target in zip(X,y):
        update = self.eta * (target-self.predict(xi))
        self.w_[1:] += update*xi ## update weights
        self.w_[0] += update ## update theta (?)
  return self

  def net_input(self,X):
    return np.dot(X,self.w_[1:]) + self.w_[0]
  def predict(self,X):
    return np.where(self.net_input(X)>=0.0,1,-1) ## Heaviside step function

这里移除阈值后权重会发生什么变化:

[0.   0.38 0.66]
[0.   0.76 1.32]
[-0.2   0.22  1.68]
[-0.2   0.34  2.1 ]
[-0.4  -0.68  1.82]
[-0.4  -0.68  1.82]
[-0.4  -0.68  1.82]
[-0.4  -0.68  1.82]
[-0.4  -0.68  1.82]
[-0.4  -0.68  1.82]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?