当前位置: 首页 > 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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从微软发iPhone,聊聊企业设备管理
  • 【机器学习】无监督学习和自监督学习
  • Kafka(四) Consumer消费者
  • 大鲸鱼docker-compose单机容器集群编排工具
  • C语言实例-约瑟夫生者死者小游戏
  • jenkins 插件版本冲突
  • JDBC常见用法
  • 下载安装VSCode并添加插件作为仓颉编程入门编辑器
  • Tensorflow入门实战 T09进行猫狗识别2
  • maven 私服搭建(tar+docker)
  • conda 复现论文部署环境常用操作
  • 缓存弊处的体验:异常
  • NEEP-EN2-2019-Text4
  • 敲详细的springframework-amqp-rabbit源码解析
  • 通信流程:https【SSL/TLS】,git仓库【https/SSH】,蓝牙【面对面快传/AirDrop】
  • Angular 响应式表单之下拉框
  • Cumulo 的 ClojureScript 模块已经成型
  • ES6系统学习----从Apollo Client看解构赋值
  • FastReport在线报表设计器工作原理
  • MobX
  • MQ框架的比较
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Solarized Scheme
  • spring学习第二天
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于Android乐音识别(2)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • mysql面试题分组并合并列
  • 昨天1024程序员节,我故意写了个死循环~
  • ​马来语翻译中文去哪比较好?
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #14vue3生成表单并跳转到外部地址的方式
  • #QT(一种朴素的计算器实现方法)
  • $nextTick的使用场景介绍
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (a /b)*c的值
  • (AngularJS)Angular 控制器之间通信初探
  • (C#)一个最简单的链表类
  • (C)一些题4
  • (MATLAB)第五章-矩阵运算
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计大学生兼职系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (离散数学)逻辑连接词
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)认识微服务
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 中的轻量级线程安全
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • /etc/fstab 只读无法修改的解决办法
  • []Telit UC864E 拨号上网
  • []使用 Tortoise SVN 创建 Externals 外部引用目录