手把手教你使用Python从零开始搭建感知器

感知器算法原理详解及python实现 感知器算法PLA感知器算法是对一种分类学习机模型的称呼,属于有关机器学习的仿生学领域中的问题,由于无法实现非线性分类而下马。但“赏罚概念(reward-punishment concept)” 得到广泛应用。感知器算法的原理:感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成。虽然我们的目的是学习很多神经单元互连的网络,但是我们还是需要先对单个的神经单元进行研究。感知器算法的主要流程:... 阅读详情

图片

前言

在本文中将展示如何从零开始实现神经网络的最基本要素(感知器),以及人工智能的基本模块背后的数学原理。

虽然人工智能和机器学习等术语已经成为流行词汇,每天都会听到或谈论这些概念,但它们背后的数学概念已经存在了很长时间(从40年代起就有介绍人工神经网络-ANN的论文)。

但是,为什么最近的兴趣更加相关呢?有几个很好的原因:

  • 现在有大量的数据可用于训练神经网络,而且在处理大型、复杂的问题上,人工神经网络经常优于其他机器学习技术。
  • 自20世纪90年代以来,计算能力大幅增加,现在可以在合理的时间内训练大型神经网络。这在一定程度上归功于摩尔定律,但在另一方面也要感谢游戏行业,他们生产了数以百万计功能强大的GPU卡。
  • 训练算法已经得到改进。平心而论,它们与20世纪90年代使用的算法只有细微的不同,但这些相对较小的调整产生了巨大的积极影响。

简介

感知器是神经网络的基本构建模块,为我们提供了对机器学习和人工智能世界的简单而强大的了解。在本文中将探索感知器的本质,并学习如何从零开始实现它们。

感知器在人工智能的发展中具有重要的历史意义,为现代深度学习模型奠定了基础。感知器在概念上的简单性使其成为任何希望掌握神经网络基础知识的人的理想起点。

在接下来的章节中,本文将深入探讨感知器的架构和内部工作原理。本文将提供代码示例和实用见解,以确保你对这一基本概念有扎实的理解。因此,接下来将使用以下Python软件包来实现感知器。

import numpy as np
import matplotlib.pyplot as plt
import random
import math

感知器架构

图片感知器的组件

感知器由以下核心部件组成:

1. 输入特征

输入特征代表感知器用于做出决策的原始数据。在本文中将定义两个具有固定值的输入(X1、X2),以简化神经网络。然而,在实际应用中,神经元可能会使用多个输入来表示不同的输入信息。

X = [1, 0]
2. 权重

在这里,本文将生成用于组成神经网络的权重。在本例中,我们将首先生成较小的随机权重,但需要注意的是,这些权重将在网络训练时更新。下面的代码展示了如何生成两个介于-1和1之间的随机权重(每个输入一个)。

w = []
nInputs = 2
for i in range(nInputs):
    w.append(random.uniform(-1, 1))   
3. 偏置

偏置项是感知器的附加输入项,用作可调节的阈值。它允许感知器在所有输入特征为零时也能做出决策。偏置有助于控制感知器的激活。类似地,本文将初始偏置设置为一个小的随机数。

b = random.uniform(-1,1)
4. 激活函数

激活函数将加权输入的总和转换为二进制输出。该输出是感知器的预测结果,表示一个决策或分类。通常,我们希望激活函数的输出为0或1。

另一个关键属性是其可微分性,这在网络训练中起着至关重要的作用。函数的可微分性是在训练过程中调整网络权重的不可或缺的要求,使网络能够从数据中学习并随着时间的推移进行改进。

用于此目的的一个非常常见的函数是sigmoid函数,因为它具有可微分性、平滑性和简单的梯度。

def sigmoid(x):
    return 1/(1+math.exp(-x))

图片Sigmoid函数图

5. 前馈

现在我们已经掌握了设计感知器的基本元素,我们必须将输入数据传递给感知器。这一步称为前馈。首先,我们计算输入数据的加权和,然后将结果通过激活函数传递给感知器。

加权和只是权重向量和输入之间的点积,然后将其传递给sigmoid函数:

# 加权和 = w1*x1 + w2*x2 ... + b
z = sigmoid(np.dot(X, w) + b)

最后必须应用激活函数来预测输出为0还是1:

def activation(z):
    return 1 if z >0.5 else 0

训练感知器

到目前为止,我们只能将输入数据传递给感知器,而不知道感知器是否正确。训练阶段对于提高感知器的准确性至关重要。

训练过程包括对感知器的权重进行多次迭代(epochs)更新。在每个迭代中,我们都要计算输出相对于目标实际值的误差,以便更新权重并使误差最小化:

y_pred = activation(z)
error = y - y_pred

lr = 0.1
w_new = []
for wi, xi in zip(w, X):
    w_new.append(wi + lr*error*xi)

b_new = b + lr*error

其中,lr是学习率,我们将其值设置为0.1,但也可以根据问题的不同设置为其他值。

因此,我们现在有了更新的权重,我们将重复执行前馈步骤多个周期。通过根据梯度反复调整权重和偏置,网络会逐渐学会做出更好的预测,并随着时间的推移减少误差。这一步骤也被称为反向传播。

最后一步:应用于鸢尾花数据集

**【鸢尾花数据集】:**https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html

到目前为止,跟随本文已经了解了感知器的各个部分以及它们的工作原理。接下来,本文将汇总所有学到的知识,创建感知器类,并使用真实数据集来验证感知器的工作原理。

class Perceptron():
    
    def __init__(self,input_size = 2, lr = 0.01, epochs = 20):
        # 设置默认参数
        self.lr = lr
        self.epochs = epochs
        self.input_size = input_size
        self.w = np.random.uniform(-1, 1, size=(input_size))
        self.bias = random.uniform(-1,1)
        self.misses = []
        
    def predict(self, X):
        w = self.w
        b = self.bias
        z = sigmoid(np.dot(X,self.w) + b)
        
        if z > 0.5:
            return 1
        else:
            return 0
        
    def fit(self, X, y):
        
        for epoch in range(self.epochs):
            miss = 0
            for yi, xi in zip(y, X):
                y_pred = self.predict(xi)
                # 更新权重以最小化误差
                error = yi - y_pred
                self.w += self.lr*error*xi
                self.bias += self.lr*error
                miss += int(error != 0.0)
            # 获取每个时期的错误分类数
            self.misses.append(miss)

从上面的代码中可以看出:

  • lr:学习率
  • input_size:输入数据的特征数量
  • epochs:训练的迭代次数
  • X:输入数据(样本,特征)
  • y:目标数据(标签0或1)

现在,我们将使用scikit-learn库中鸢尾花数据集的感知器实现:

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target

该数据集由4个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)组成,共有150个样本,分为3个分类(山鸢尾、变色鸢尾和维吉尼亚鸢尾)。为了简化起见,本示例只使用2个特征(花萼长度和花瓣长度)以及山鸢尾和变色鸢尾的样本:

X = X[:100, [0,2]]
y = y[y<2]

# 绘制数据
plt.figure(figsize=(16,8))
plt.scatter(X[:50,0], X[:50,1], marker='o', label='setosa')
plt.scatter(X[50:,0], X[50:,1], marker='x', label='virginica')
plt.ylabel('sepal length')
plt.xlabel('petal length')
plt.show()

图片

接下来,我们需要使用标记的数据(X,y)来训练感知器,并查看其性能表现如何:

perceptron = Perceptron()
perceptron.fit(X,y)
print(perceptron.w, perceptron.bias)
#(array([0.09893529, 0.09323132]), -0.763184789232628)

这样,我们就得到了训练的最优权重和偏置。那么感知器在错误分类方面表现如何呢?为此,我们将绘制感知器类别的错误参数:

图片感知器在训练过程中的错误分类次数

从上图可以看出,感知器在第一个时期出现了12次失误,并持续学习,直到在训练结束时不再犯错。

结论和下一步

本文成功地实现并训练了一个感知器,并使用真实数据集对其性能进行了评估。

尽管感知器是神经网络的基础模块,但正如我们在文章中所看到的,它也有其局限性:

  • 它在二分类数据集上表现良好;
  • 问题是线性可分的。换句话说,它们只能对可以通过直线或超平面将数据分为两类的数据进行分类;
  • 本文处理的是一个干净的数据集,几乎没有噪声,这使得感知器能够轻松收敛。

克服这些局限性的一种方法是使用更复杂的模型,如具有非线性激活函数的多层感知器(MLP)。MLP可以学习非线性决策边界,从而能够解决更复杂的问题。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

机器学习——感知器算法及python实现 说明:本文从自己的理解出发来讲解感知器是如何训练的,如想知道比较学术的概念,请查阅相关论文。 1、什么是感知器 本文假设数据为:二维二类、线性可分 感知器就是一个分类器,如:给两类数据做训练集A,B,训练完成之后,给定一个测试数据,通过感知器,可以分成A或B。 因为数据是二维线性可分的,我们不妨假设该线性方程为w0*x0+w1*x1+w2 = 0 2、如何训练 训练的最终结果是训练 阅读详情

相关推荐

Python Machine Learning - 感知器算法

感知器 (perceptron) 算法的历史就不介绍了,大意就是想法来自生物学的神经元的一些工作方式,多个生物信号 (input singals) 到达树突 (dentrites)并进入细胞核 (cell nucleus),如果这些信号的效果累加达到一个阈值,那么通过轴突 (axon) 产生一个输出信号 (output signals)。在有监督学习与分类的背景下,这样的算法可被用来预测一个样本是否

Liu-Cheng Xu 5671

感知器的设计实现

(1)学习和理解感知器的基本原理。(2)利用sklearn和NumPy两种方法设计实现感知器。(3)将设计的感知器对一定数据进行分析,并将结果可视化,验证算法的正确性。

wanlmx的博客 411

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

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

huakai16的博客 7081

线性分类与感知机:从原理走向实践

​​核心价值​​:感知机奠定了神经网络的基础,理解其工作原理对学习深度学习至关重要​​工程实践​​:数据需标准化以加速收敛学习率需通过网格搜索调优监控训练过程中的准确率变化​​现代应用​​:简单二分类场景(如垃圾邮件过滤)神经网络的基础组件# 可视化决策边界(以二维特征为例)plt.show()# 使用前两个特征训练。

weixin_51715410的博客 916

Vivado Combinatorial Loop Alert问题 [DRC LUTLP-1]

Vvado综合和布局布线都通过了但是无法生成bit文件,提示Combinatorial Loop Alert,错误如下图。在RTL图中可以看到LUT的输出连接到了输入上,这个就是。在代码中我并未找到导致这种情况发生的地方,如果遇到类似的问题先检查自己的代码是不是存在组合逻辑连接出现了问题,如果没问题再考虑通过设置去解决问题。

伊丽莎白的学习之路 6030

CAD二次开发(C#版):从零搭建开发环境与核心DLL引用指南

本文详细介绍了使用C#进行CAD二次开发的环境搭建与核心DLL引用指南,涵盖Visual Studio配置、AutoCAD插件项目创建、DLL引用技巧及调试方法。通过实战示例和常见问题排查,帮助开发者快速掌握CAD二次开发的核心技术,提升开发效率。

weixin_28837817的博客 727

感知器-从零开始学深度学习

感知机-从零开始学深度学习未来将是人工智能和大数据的时代,是各行各业使用人工智能在云上处理大数据的时代,深度学习将是新时代的一大利器,在此我将从零开始记录深度学习的学习历程。 我希望在学习过程中做到以下几点: 了解各种神经网络设计原理。 掌握各种深度学习算法的python编程实现。 运用深度学习解决实际问题。 让我们开始踏上深度度学习的征程。一、感知机原型 想要

知行_那片天 4961

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 390

感知器算法及python实现

感知器算法及python实现 通俗来讲,感知器算法可以完成如下这类线性可分的二分类分类任务。即找出一条超平面,将两类数据进行划分。 在输入特征为二维的数据集中,即一条直线。 理论依据 感知机二类分类的线性分类模型,根据输入特征,输出类别 1 和 0。(也有为 +1、-1) 下面搬运一个图片,需要注意将左下角的 x0x_0x0​ 改成 xnx_nxn​。(懒就不做图了。。。) 为方便优化,我们也采用激励函数输出为 +1、-1 的形式。 整个算法留存即: 对输入特征加权求和: ∑i=0nwixi=z

Sail的博客 7154

DEV-C++调试设置

       昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时。所以今天痛下决心,一定要写下DEV-C++设置调试的过程,警示自己! 解决步骤 1.打开DevC++找到上方工具栏 2.点击选择编译选项,再按下图所示设置即可

懒羊羊的快乐小屋 1029

24V供电D1047/B817对管AB类音频功放设计与制作全解析

音频功率放大器是电子系统将微弱音频信号放大驱动扬声器的核心电路,其核心原理是通过晶体管或集成电路对信号进行电压和电流放大。从技术价值看,优秀的功放设计需兼顾效率、保真度与稳定性,AB类放大器便是经典折中方案,它在A类低失真与B类高效率间取得平衡。在应用场景上,这类电路广泛应用于家用音响、多媒体音箱、车载音频及DIY音频项目。本文聚焦于一个采用24V直流供电、以D1047和B817互补对管为核心输出级的AB类功放实例,深入剖析其**电路设计**与**元件选型**,涵盖从BC547小信号放大、偏置设置、PCB布

weixin_31355483的博客 413

【深度学习】单层感知器及其Python实现

【深度学习】单层感知器及其Python实现 首先,原谅一个初学者无法给出神经网络和感知器通俗易懂的解释。在我的理解里,感知器是用来实现分类问题的,而单层感知器只能实现线性分类,对于“异或”这种线性不可分的问题,可以通过构造多层感知器,或者采用连续可微激活函数的BP神经网络来实现。 感知器介绍 感知器物理层结构如上图所示,包括: 输入节点 输出节点 激活函数 对于一个事物描述最重要归结到数学模型上...

Robinson_zhen的博客 5147

西门子1200与FANUC机器人Profinet通讯

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 PLC项目已经归档,只需要恢复就可以看到。对应Profinet通讯的GSD文件也都在博文最后有连接 机器人柜子:R-30IB Mate 机器人主体:M-10IA 12 一、硬件介绍 机器人Profinet I/O通讯板卡:...

七兔自习室 2万+

单层感知器python_多层感知器背后的概念及Python实现

机器学习正在成为数据科学中最具革命性的技术之一,它允许我们发现特征之间的非线性关系,并使用它来预测新的样本。机器学习中最简单的体例之一是多层感知器。在本文中,我将讨论多层感知器背后的概念,并向您展示如何在不使用流行的“scikit-learn”库的情况下用Python构建自己的多层感知器。我觉得,在没有库的情况下从零开始构建多层感知器,可以让我们更深入地了解反向传播和前馈等想法是如何工作的。感知器...

weixin_39636857的博客 398

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1549

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1256

sklearn实验1——使用感知器对鸢尾花数据分类

感知器算法是最简单的可以学习的机器。感知器算法是很多更复杂算法的基础,如支持向量机和多层感知器人工神经网络。

lyb06的博客 4374

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【深度学习】1:感知器原理,以及感知器解决异或问题

感知器的原型是神经元模型。是在1943年,由McCulloch 和 Pitts提出,所以也被叫做“M-P神经元模型”。

zzZ_CMing的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

感知器算法的Python实现

            在详细讲解感知器算法之前,先大体了解一下大脑中相互连接的神经细胞——神经元,他可以处理和传递化学和电信号,如图所示。将神经元描述为一个具有二进制输出的逻辑门。树突接受多个输入信号,如果累加的信号超过某一阈值,经细胞体的整合就会生成一个输出信号,并通过轴突进行传递。        弗兰克·罗森布拉特基于MCP神经元模型提出了第一个感知器学习法则。在此感知器规则中,罗森布拉特提...

hao1001的博客 4415

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习之感知器的python实现,及用感知器实现鸢尾花的分类

机器学习一般用来处理结构化的数据,深度学习一般用来处理非结构化的数据,例如图像、视频、文字等。 、

R18830287035的博客 3348

感知器学习算法(PLA)及python实现

感知器学习算法(PLA) 1、感知器原理 感知器是最简单的人工神经网络结构之一,由 Frank Rosenblatt 发明于 1957。它是基于一种稍微不同的人工神经元,称为线性阈值单元(LTU):输入和输出现在是数字(而不是二进制开/关值),并且每个输入连接都与权重相连。LTU计算其输入的加权和( z = W1×1 + W2×2 + … + + WN×n = Wt·x ),然后将阶跃函数应用...

卡布达 6043

感知器

深度学习是啥 在人工智能领域,有一个方法叫机器学习。在机器学习这个方法里,有一类算法叫神经网络。神经网络如下图所示: 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接。我们可以看到,上面的神经元被分成了多层,层与层之间的神经元有连接,而层内之间的神经元没有连接。最左边的层叫做输入层,这层负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐...

猫敷雪 1731

Rosenblatt感知器

Rosenblatt感知器,感知器也叫预测机那么感知器有什么用呢?感知器可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。使用python实现Rosenblatt感知器pass:此次python实验的预测函数不含偏置项系数,所以函数图像过原点,只能拟合因果是成正比的数据或只能完成可被过原点的直线分类的数据正在上传…重新上传取消首先先引入需要用到的库 import numpy from matplotlib import pypolt 引入numpy数学库以方便我们的数学计算引入m

m0_47468934的博客 2068
上一篇: 使用Python进行对称和非对称密钥加密和解密
下一篇: 10个Python中的数据类型技巧
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值