当前位置: 首页 > news >正文

R语言实现神经网络ANN

# 常用激活函数
# 自定义Sigmoid函数
sigmod <- function(x){return(1/(1+exp(-x)))
}
# 绘制Sigmoid曲线
x <- seq(-10,10,length.out = 100)
plot(x,sigmod(x),type = 'l',col = 'blue',lwd = 2,xlab = NA,ylab = NA,main = 'Sigmoid函数曲线')# 自定义Tanh函数
tanh <- function(x){return((exp(x)-exp(-x))/(exp(x)+exp(-x)))
}
# 绘制Tanh曲线
x <- seq(-10,10,length.out = 100)
plot(x,tanh(x),type = 'l',col = 'blue',lwd = 2,xlab = NA,ylab = NA,main = 'Tanh函数曲线')# 自定义ReLU函数
relu <- function(x){return(ifelse(x<0,0,x))
}
# 绘制ReLu曲线
x <- seq(-6,6,length.out = 100)
plot(x,relu(x),type = 'l',col = 'blue',lwd = 2,xlab = NA,ylab = NA,main = 'ReLU函数曲线')
grid()###  11.3	案例-对iris进行类别预测  ###
# 数据分区
# install.packages("caret")
set.seed(1234) # 设置随机种子
library(caret)
ind <- createDataPartition(iris$Species,p = 0.5,list = FALSE) 
train <- iris[ind,] # 训练集
test <- iris[-ind,] # 测试集##  1.	利用nnet包神经网络模型 ##
# 训练神经网络模型
set.seed(1234)
library(nnet)
iris.nnet <- nnet(Species ~ ., data = train,size = 2,rang = 0.1,decay = 5e-4,maxit = 200)# 调用summary()函数查看训练好的神经网络信息 
summary(iris.nnet)# 对生成的神经网络进行可视化
#install.packages('reshape')
library(reshape)
source('nnet_plot_update.r')
plot.nnet(iris.nnet)iris.nnet$wts # 查看各节点的连接权重值
iris.nnet$value # 查看迭代结束时的损失函数值
head(iris.nnet$fitted.values) # 查看训练集各观测点的预测概率# 对test进行预测
iris_nnet_pred <- predict(iris.nnet,newdata = test,type = 'class') 
(iris_nnet_pred_table  <- table('actual' = test$Species,'prediction' = iris_nnet_pred)) # 查看混淆矩阵
sum(diag(iris_nnet_pred_table)) / sum(iris_nnet_pred_table) # 查看模型准确率##  2.利用neuralnet包神经网络模型 ##
# 对因子型的因变量进行哑变量处理
dmy1 <- dummyVars(~.,data = train,levelsOnly = TRUE)
train_dmy <- predict(dmy1,newdata = train)
test_dmy <- predict(dmy1,newdata = test)
head(train_dmy,3)
head(test_dmy,3)# 训练神经网络模型
set.seed(1234)
library(neuralnet)
iris_neuralnet <- neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,data = train_dmy,hidden = 3) # 构建模型iris_neuralnet$result.matrix # 输出结果矩阵plot(iris_neuralnet) # 模型可视化# 对test进行预测,生成相关的预测概率矩阵
iris_neuralnet_predict <- compute(iris_neuralnet,test_dmy[,1:4])$net.result 
head(iris_neuralnet_predict,3)# 得到可能的类别
iris_neuralnet_pred <- unique(test$Species)[apply(iris_neuralnet_predict,1,which.max)]
head(iris_neuralnet_pred,3)(iris_neuralnet_pred_table  <- table('actual' = test$Species,'prediction' = iris_neuralnet_pred)) # 查看混淆矩阵
sum(diag(iris_neuralnet_pred_table)) / sum(iris_neuralnet_pred_table) # 查看模型准确率##  3.利用AMORE包训练神经网络模型 ##
# 指定lib包路径
.libPaths()
.libPaths("C:/Users/VICTUS/AppData/Local/R/win-library/4.4")# 回归问题的神经网络模型
iris1 <- iris[,1:4]
# 对前三列进行标准化
iris1[,1:3] <- apply(iris1[,1:3],2,scale)
# 加载AMORE包
#install.packages("AMORE",type="binary")
library(AMORE)
# 建立神经网络模型,输入层有3个神经元,输出层有一个神经元,这里增加了两个隐藏层,分别具有10,5个神经元。
newNet <- newff(n.neurons = c(3,10,5,1),learning.rate.global=1e-4,momentum.global=0.05,error.criterium="LMS", Stao=NA, hidden.layer="sigmoid", output.layer="purelin", method="ADAPTgdwm")
# 使用train函数,基于训练数据对神经网络进行训练
newNet.train <- train(newNet,iris1[,1:3],iris1[,4],report = TRUE,show.step = 100,n.shows = 10)
# 基于训练好的模型,对iris1进行预测,并计算均方误差
pred <- sim(newNet.train$net,iris1[,1:3])
error <- sqrt(sum(pred-iris1$Petal.Width)^2)
error##  4.利用RSNNS包训练神经网络模型 ##
library(Rcpp)
library(RSNNS)
set.seed(12)
# 准备数据
# 将因变量进行哑变量处理
library(caret)
dmy <- dummyVars(~.,data = iris,levelsOnly = TRUE)
iris1 <- predict(dmy,newdata = iris)
# 将自变量进行标准化处理
iris1[,1:4] <- apply(iris[,1:4],2,scale)
# 将数据进行分区
ind <- createDataPartition(iris$Species,p = 0.8,list = FALSE) 
train <- iris1[ind,] # 训练集
test <- iris1[-ind,] # 测试集
# 使用mlp()函数,建立具有两个隐藏层,分别具有神经元数量为8,4的多层感知器网络
mlp.nnet <- mlp(train[,1:4],train[,5:7],size = c(8,4), learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100)
#利用上面建立的模型进行预测, 得到预测概率矩阵
pred_prob = predict(mlp.nnet,test[,1:4])
head(pred_prob,3)
# 然后,通过找到概率最大的那一列,得到其他可能的类别
pred_class <- unique(iris[-ind,]$Species)[apply(pred_prob,1,which.max)]
#生成混淆矩阵,观察预测精度 
table('actual' = iris[-ind,]$Species,'prediction'= pred_class)
sum(diag(table('actual' = iris[-ind,]$Species,'prediction'= pred_class))) / nrow(test)

相关文章:

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…...

实战:shell脚本练习

高效编写Bash脚本的技巧 总结了10个实用技巧&#xff0c;帮助提高脚本的效率和可靠性&#xff0c;具体包括&#xff1a; 多写注释&#xff1a;在脚本中添加注释&#xff0c;以帮助理解脚本的不同部分。 当运行失败时使脚本退出&#xff1a;使用set -o errexit或set -e&#x…...

常见排序算法总结

文章目录 比较排序冒泡排序选择排序插入排序归并排序快速排序堆排序希尔排序 非比较排序&#xff08;桶排序&#xff09;计数排序基数排序 比较排序 冒泡排序 嵌套循环&#xff0c;每次内层循环执行时&#xff0c;数组的每两个元素交换&#xff0c;将一个最大/小的数排到数组…...

网页HTTP协议 get请求和post请求区别?(HTTP中Get、Post、Put与Delete的区别)(HTTP请求方法、HTTP请求方式、HTTP方法)

文章目录 设计GET、POST、DELETE 等多种请求方法的原因1. 符合语义化设计2. 允许服务器对不同的请求方法进行优化处理3. 提高数据传输的安全性4. 遵循现有的网络架构5. 提高网络通信的效率6. 支持 RESTful API 设计 设计GET、POST、DELETE 等多种请求方法的原因 后端之所以要分…...

攻防世界 re新手模式

Reversing-x64Elf-100 64位ida打开 看if语句&#xff0c;根据i的不同&#xff0c;选择不同的数组&#xff0c;后面的2*i/3选择数组中的某一个元素&#xff0c;我们输入的是a1 直接逆向得到就行 二维字符数组写法&#xff1a;前一个是代表有几个字符串&#xff0c;后一个是每…...

Ajax是什么?如何在HTML5中使用Ajax?

Ajax是什么&#xff0c;它如何工作&#xff1f; Ajax是什么 Ajax&#xff0c;全称Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是一种创建交互式网页应用的网页开发技术。它允许网页在不重新加载整个页面的情况下&#xff0c;与…...

Python+Flask+MySQL/Sqlite的个人博客系统(前台+后端管理)【附源码,运行简单】

PythonFlaskMySQL/Sqlite的个人博客系统&#xff08;前台后端管理&#xff09;【附源码&#xff0c;运行简单】 总览 1、《个人博客系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 管理员登录2.2 程序主页面2.3 笔记新增界面2.4 文章新增界面2.5 文章/笔记管理界面2…...

【Android性能优化】Android CPU占用率检测原理和优化方向

【Android性能优化】Android CPU占用率检测原理和优化方向 CPU相关知识 CPU占用的基本计算公式 (1 - 空闲态运行时间/总运行时间) * 100% Hz、Tick、Jiffies&#xff1a; Hz&#xff1a;Linux核心每隔固定周期会发出timer interrupt (IRQ 0)&#xff0c;HZ是用来定义每一秒有…...

AWS Certified Developer Associate备考笔记

AWS Certified Developer Associate备考笔记 缓慢更新中&#xff0c;如果你也正在关注该考试&#xff0c;请点赞后评论感兴趣的章节&#xff0c;可加快我的更新速度 &#x1f603; 文章目录 AWS Certified Developer Associate备考笔记一、IAM二、EC2三、EC2 Instance Storage…...

数据质量8个衡量标准

在数据驱动的时代&#xff0c;数据质量对于企业的决策和业务运营至关重要。为了确保数据的有效性和可靠性&#xff0c;我们需要根据一些关键要素来衡量数据的质量。本文将介绍数据质量的8个衡量标准&#xff0c;包括准确性、精确性、真实性、及时性、即时性、完整性、全面性和关…...

Redis 跳跃列表与紧凑列表

Redis 跳跃列表&#xff08;Skip List&#xff09; 跳跃列表是一种高效的数据结构&#xff0c;它结合了有序数组和链表的优点&#xff0c;能够在 O(log n) 时间内进行插入、删除和查找操作。Redis 使用跳跃列表来实现有序集合&#xff08;sorted set&#xff09;的底层数据结构…...

达梦数据库的系统视图v$arch_status

达梦数据库的系统视图v$arch_status 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$ARCH_STATUS 是一个动态性能视图&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于显示归档日志的状态信息。这个视图可以帮助数据库管理员监控和管理数…...

【Rust光年纪】Rust 中常用的数据库客户端库:核心功能与使用场景

探秘 Rust 语言下的多种数据库客户端库&#xff1a;从安装到实际应用 前言 在现代的软件开发中&#xff0c;数据库是不可或缺的一部分。为了与数据库进行交互&#xff0c;开发人员需要使用各种数据库客户端来执行操作、构建查询等。本文将介绍一些用于 Rust 语言的常见数据库…...

网络安全防御【防火墙双机热备带宽管理综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、FW3的网络相关配置&#xff1a; 2、FW1的新增配置&#xff1a; 3、交换机LSW6&#xff08;总公司&#xff09;的新增配置&#xff1a; 4、双机热备技术配置&#xff08;双机热…...

19.x86游戏实战-创建MFC动态链接库

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

图论建模技巧搜集

一些经典题目 找可达路径 UVa - 11604 General Sultan 平面图最小割对偶图最短路 UVa - 1376 Animal Run 最小割建模 UVa - 1515 Pool construction 费用流建模 洛谷P3159 [CQOI2012] 交换棋子 一些可以转化为二分图最大权匹配的建模题 UVa1006/LA2238 Fixed Partition Me…...

pytorch学习(九)激活函数

1.pytorch常用激活函数如下&#xff1a; #ReLU激活函数 #Leaky ReLU激活函数 #Sigmoid激活函数 #Tanh激活函数 #Softmax激活函数 #Softplus2.代码 import torch.nn as nn import torch import numpy from torch.utils.tensorboard import SummaryWriterwriter SummaryWriter…...

conda 环境打包与使用

conda 环境导出 使用 Conda 打包环境&#xff0c;可以创建一个可重复使用的环境文件&#xff0c;便于在不同的机器上重新创建相同的环境。以下是具体的步骤&#xff1a; 1. 创建 Conda 环境 如果你还没有创建一个 Conda 环境&#xff0c;可以使用以下命令创建一个新环境&…...

jenkins 插件版本冲突

一、Jenkins安装git parameter 插件重启后报错与临时解决方案 cd /root/.jenkins cp config.xml config.xml.bak vim config.xml <authorizationStrategy class"hudson.security.FullControlOnceLoggedInAuthorizationStrategy"><denyAnonymousReadAcces…...

Python print() 格式化输出

Python print{} 格式化输出 1. print()2. 浮点数 (float)References 1. print() 传递给函数的值称为参数。 引号没有打印在屏幕上&#xff0c;它们只是表示字符串的起止&#xff0c;不是字符串的一部分。可以用这个函数在屏幕上打印出空行&#xff0c;只要调用 print() 就可以…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...