感知机模型

一、概述

  感知机模型(Perceptron Model)也叫做神经元模型,设计灵感即来自于生物神经元的运行机制,依次完成信息接收、处理、输出的过程。当前大放异彩的各种人工神经网络模型即由一个个人工神经元构成,因此,本文介绍的感知机模型(神经元模型)就是各种神经网络模型的基本单元。

二、模型原理

模型原理

  模型的核心概况起来即是线性回归+符号函数映射。对未知数据,先做线性拟合,输出值再经符号函数映射,完成类别判定。因此,感知机模型也是直接用于二分类任务的模型。模型示意图可表示为
在这里插入图片描述
模型原理直接地表示也就是
y = { − 1 , w ⋅ x + b < 0 1 , w ⋅ x + b ≥ 0 y=\left\{ \begin{aligned} &-1, \ w\cdot x+b<0\\ &1, \ w\cdot x+b\geq 0 \end{aligned} \right. y={1, wx+b<01, wx+b0
对任意待测样本,将其特征向量直接代入计算即可。

模型的训练

  模型的参数就是指线性回归中的权重和偏置,确定了它们也就确定了整个模型。对参数的确定往往通过训练数据集实施,也就是由训练集和标签之间的对应构造一个关于待求参数的损失函数,通过不断迭代优化,在过程中确定出最佳的参数值。损失函数的构造通常采用这样一种方式,就是计算所有误分类样本到决策函数的距离和。表达式为
d = 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M ∣ w ⋅ x i + b ∣ d=\frac{1}{\left| \left| w \right| \right|}\sum_{x_i\in M}{\left| w\cdot x_i+b \right|} d=w1xiMwxi+b
其中, ∣ ∣ w ∣ ∣ = w 1 2 + w 2 2 + . . . + w n 2 \left| \left| w \right| \right|=\sqrt{w_{1}^{2}+w_{2}^{2}+...+w_{n}^{2}} w=w12+w22+...+wn2 ,M为误分类样本集。
  为进一步简化,可以将绝对值计算以‘-y’等价替换。y是样本的标签,取值要么为1,要么为-1,若y为1,表明样本为正,错误判定时计算得到的回归值为负,此时‘-y负值’为正;若y为-1,表明样本为负,错误判定时计算得到的回归值为正,此时‘-y正值’仍为正,与绝对值运算等价,此时损失函数表达式为
d = − 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ⋅ x i + b ) d=-\frac{1}{\left| \left| w \right| \right|}\sum_{x_i\in M}{y_i(w\cdot x_i+b)} d=w1xiMyi(wxi+b)

  式中的 1 ∣ ∣ w ∣ ∣ \frac{1}{\left| \left| w \right| \right|} w1实质地表征了决策函数的方向性,而模型关注的是对两类样本的类别结果判定,并不实际关注决策函数的具体方向以及样本到函数距离的具体差异,因而该部分可以省去,损失函数也就简化为
d = − ∑ x i ∈ M y i ( w ⋅ x i + b ) d=-\sum_{x_i\in M}{y_i(w\cdot x_i+b)} d=xiMyi(wxi+b)

三、Python实现

手工实现:

import numpy as np
from sklearn import datasetsdef model(X, theta):return X @ thetadef predict(x, theta):flags = model(x, theta)y = np.ones_like(flags)y[np.where(flags < 0)[0]] = -1return ydef computerCost(X, y, theta):y_pred = predict(X, theta)error_index = np.where(y_pred != y)[0]return np.squeeze(-y_pred[error_index].T @ y[error_index])def gradientDescent(X, y, alpha, num_iters=1000):n = X.shape[1]theta = np.zeros((n, 1))J_history = []for i in range(num_iters):y_pred = predict(X, theta)error_index = np.where(y_pred != y)[0]theta = theta + alpha * X[error_index, :].T @ y[error_index]cur_cost = computerCost(X, y, theta)J_history.append(cur_cost)print('.', end='')if cur_cost == 0:print(f'Finished in advance in iteration {i + 1}!')breakreturn theta, J_historyiris = datasets.load_iris()
X = iris.data
m = X.shape[0]
X = np.hstack((np.ones((m, 1)), X))
y = iris.target
y[np.where(y != 0)[0]] = -1
y[np.where(y == 0)[0]] = 1
y = y.reshape((len(y), 1))
theta, J_history = gradientDescent(X, y, 0.01, 1000)
y_pred = predict(X, theta)
acc = np.sum(y_pred == y) / len(y)print('acc:\n', acc)

在这里插入图片描述

基于PyTorch实现:

import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np# 生成一些随机的线性可分数据
np.random.seed(42)
num_samples = 100
features = 2
x = 10 * np.random.rand(num_samples, features)  # 生成随机输入特征
w_true = np.array([2, -3.4])  # 真实的权重
b_true = 4.2  # 真实的偏置
y_true = np.dot(x, w_true) + b_true + 0.1 * np.random.randn(num_samples)  # 添加噪声
y_true = np.where(y_true > 0, 1, -1)  # 将输出标签转换为二分类问题# 将数据转换为 PyTorch 的 Tensor
x = torch.tensor(x, dtype=torch.float32)
y_true = torch.tensor(y_true, dtype=torch.float32)# 定义感知机模型
class Perceptron(nn.Module):def __init__(self, input_size):super(Perceptron, self).__init__()self.linear = nn.Linear(input_size, 1)def forward(self, x):return torch.sign(self.linear(x))# 初始化感知机模型
perceptron = Perceptron(input_size=features)# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(perceptron.parameters(), lr=0.01)# 训练感知机模型
num_epochs = 100
for epoch in range(num_epochs):# 前向传播y_pred = perceptron(x)# 计算损失loss = criterion(y_pred.view(-1), y_true)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 打印损失if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 在训练数据上进行预测
with torch.no_grad():predictions = perceptron(x).numpy()# 可视化结果
plt.scatter(x[:, 0], x[:, 1], c=predictions.flatten(), cmap='coolwarm', marker='o')
plt.title('Perceptron Model')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

在这里插入图片描述
在这里插入图片描述


End.


pdf下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解 MQ 消息队列

谈起消息队列&#xff0c;内心还是会有些波澜。 消息队列&#xff0c;缓存&#xff0c;分库分表是高并发解决方案三剑客&#xff0c;而消息队列是我最喜欢&#xff0c;也是思考最多的技术。 我想按照下面的四个阶段分享我与消息队列的故事&#xff0c;同时也是对我技术成长经…

0成本实现.NET Web API 8.0项目内网映射

1.背景 最近在学习CICD&#xff0c;里面会有用到内网映射的使用场景。为了加深对内网映射实操的记忆。我实操了下基于.Net 8.0的内网映射&#xff0c;并支持互联网访问。本文主要介绍了在win11下安装路由侠&#xff0c;并将.net 8.0发布到win11&#xff0c;项目运行、路由侠配…

【学习笔记】5G-A时代物联网应用及策略研究

摘要 海量物联网通信是5G典型应用场景之一&#xff0c;为了实现蜂窝网的全场景物联能力&#xff0c;需要更多的场景化技术&#xff0c;5G-A引入了RedCap&#xff08;5G Reduced Capability&#xff09;和Passive IoT。其中&#xff0c;RedCap降低了设备复杂性及成本&#xff0…

weblogic漏洞——CVE-2020-14882

一、基本信息 靶机&#xff1a;IP&#xff1a;192.168.100.40 二、攻击过程 进入 vulhub 靶场相关目录&#xff0c;并启动环境 cd master/weblogic/CVE-2020-14882 docker-compose up -d 绕过登录验证 http://192.168.100.40:7001/console/css/%252e%252e%252fconsole.por…

自己设计的QT系统,留个档

注册登录 主界面展示 天气预报 音乐播放

Guitar Pro 8.2.1 Build 32+Soundbanks Win/Mac音色库 开心激活版 音乐软件Guitar Pro 8中文破解版

音乐软件Guitar Pro 8中文破解版是一个受吉他手喜爱的吉他和弦、六线谱、BASS 四线谱绘制、打印、查看、试听软件&#xff0c;它也是一款优秀的 MIDI 音序器&#xff0c;MIDI 制作辅助工具&#xff0c;可以输出标准格式的 MIDI。GP 的过人之处就在于它可以直接用鼠标和键盘按标…

echarts多个环形图

echarts图表集 var dataValue [{name:今日待分配方量,value:49}, {name:今日已分配方量,value:602}, {name:今日完成方量,value:1037}]var piedata1 [{name: 1#拌和机,value: 20},{name: 2#拌和机,value: 22},{name: 3#拌和机 ,value: 17},{name: 4#拌和机,value: 18},{name…

二、搭建网站服务器超详细步骤——部署轻量应用服务器(Centos)

前言 经过第一篇博客的铺垫&#xff0c;现在小伙伴们已经选择了合适的服务器和域名&#xff0c;那么这篇博客就要详细的讲解&#xff0c;如何部署轻量应用服务器&#xff0c;为什么要选择Linux系统&#xff1f;为什么要选择CentOS作为系统镜像&#xff1f; 一、轻量应用服务器…

PCI Express 体系结构导读摘录(二)

系列文章目录 PCI Express 体系结构导读摘录&#xff08;一&#xff09; PCI Express 体系结构导读摘录&#xff08;二&#xff09; 文章目录 系列文章目录第Ⅱ篇  PCI Express 体系结构概述第 4 章  PCIe 总线概述4. 1  PCIe 总线的基础知识4. 1. 1  端到端的数据传递4. 1…

【SLAM】GNSS的定义,信号原理以及RTK在多传感器融合中的使用方法

【SLAM】GNSS的定义&#xff0c;信号原理以及在多传感器融合中的使用方法 1. GNSS的定义2. GNSS信号原理3. RTK - Real Time Kinematic4。 如何使用RTK做融合和优化 1. GNSS的定义 GPS&#xff08;Global Positioning System&#xff09;和GNSS&#xff08;Global Navigation …

为啥给的贷款额度差距那么大?机构到底是怎么决定给你多少额度?

今日&#xff0c;我们深入探讨一个颇为引人入胜的话题——为何在不同银行或信贷机构申请贷款时&#xff0c;所能获得的额度竟能如此大相径庭&#xff1f;同时&#xff0c;揭秘这些金融机构背后是如何精密计算并决定每位申请者的“额度”的。以下内容干货满满&#xff0c;建议收…

【时时三省】(C语言基础)指针进阶 例题2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 第一个arr 数组名相当于首元素地址 因为他没有放到strlen内部 也没有取地址 strlen是找&#xff3c;0 找不到&#xff3c;0就不会停下来 所以它打印的就是随机值 第二个arr0 首元素地址加零还…

Linux-(系统启动、用户管理)

目录 前言 关机&重启命令 基本介绍 注意细节 用户登录和注销 注意&#xff1a; 用户管理 基本介绍 添加用户 指定/修改密码 删除用户 查询用户信息 切换用户 查看当前用户登录用户 用户组 新增组 删除组 查看所有组 修改用户所属组 创建用户时指定用户…

磁盘加密工具 | VeraCrypt v1.26.15 绿色版

VeraCrypt 是一个开源项目&#xff0c;旨在提供强大的加密解决方案&#xff0c;以创建和管理加密的磁盘分区和加密容器。它继承了著名的加密软件 TrueCrypt 的特性&#xff0c;并在此基础上进行了扩展和改进。 主要特性 1. 高级加密算法 VeraCrypt 支持多种加密算法&#xf…

面试软件测试需要掌握的技能有哪些?

一、测试用例的编写 1、在测试中最重要的文档&#xff0c;他是测试工作的核心&#xff0c;是一组在测试时输入输出的标准&#xff0c;是软件需求的具体对照。编写测试用例&#xff0c;是测试人员的基本功&#xff0c;真正能写好的人并不多。 测试用例包含的内容&#xff1a; …

Mindspore 初学教程 - 3. Tensor 张量

张量&#xff08;Tensor&#xff09;是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数&#xff0c;这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内&#xff0c;有  n r n^{r} nr 个分量的一种量&#xff0c;其…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换&#xff0c;现在学习基于防火墙NAT的网络地址转换&#xff0c;…

纵向合并单元格——table

将list数据处理成tableDate格式&#xff0c;id重复的数据&#xff0c;只有第一项有num字段&#xff08;num是重复的个数&#xff09;渲染表格&#xff0c;纵向合并第1、2、6列&#xff0c;id相同的合并 <template><div><el-table:data"tableData":sp…

实体店同城商家引流的获客方法

实体店同城商家引流的获客方法 学会这3招&#xff0c;门店也能轻松获客&#xff01; #狂潮老师#电商#代运营#陪跑#门店获客#同城引流#爆款#引流#福利#达人#标签#短视频#直播#私域 推荐阅读&#xff1a; 百收网SEO引流脚本软件不断更新&#xff08;推广全集教程&#xff09;h…

4.sklearn-K近邻算法、模型选择与调优

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.sklearn转换器和估计器1.1 转换器 - 特征工程的父类1.2 估计器(sklearn机器学习算法的实现) 2.K-近邻算法2.1 简介&#xff1a;2.2 K-近邻算法API2.3 K-近邻算法代码2.4 运行结果2.5 K-近邻算法优缺点 3.模型选择与调…