带包实现:

rm(list=ls())
setwd("C:/Users/Administrator/Desktop/R语言与数据挖掘作业/实验4-人工神经网络") Data=read.csv("sales_data.csv")[,2:5] library(nnet)
colnames(Data)<-c("x1","x2","x3","y") model1=nnet(y~.,data=Data,size=6,decay=5e-4,maxit=1000) pred=predict(model1,Data[,1:3],type="class")
(p=sum(as.numeric(pred==Data$y))/nrow(Data)) table(Data$y,pred) prop.table(table(Data$y,pred),1)

2. 深入理解BP人工神经网络算法,并用R语言实现该算法

自己打出一个简单的神经网络

rm(list=ls())
#install.packages("sampling")
library(sampling)
setwd("C:/Users/Administrator/Desktop/R语言与数据挖掘作业/实验4-人工神经网络") data("iris")
#as.numeric(data[,5])
#这里我们按照每种“Species”抽取3/5个样本进行抽样。
n=round(3/5*nrow(iris)/3) sub_train=strata(iris,stratanames=("Species"),size=rep(n,3),method="srswor") head(sub_train) data_train=iris[sub_train$ID_unit,]
data_test=iris[-sub_train$ID_unit,]
dim(data_train)
dim(data_test) #保存数据集
write.csv(data_train,"./iris_data_train.csv")
write.csv(data_test,"./iris_data_test.csv") #对data_train归一化处理
#colnames()
data_train$Sepal.Length=(data_train$Sepal.Length-min(data_train$Sepal.Length))*1.0/
(max(data_train$Sepal.Length)-min(data_train$Sepal.Length)) data_train$Sepal.Width=(data_train$Sepal.Width-min(data_train$Sepal.Width))*1.0/
(max(data_train$Sepal.Width)-min(data_train$Sepal.Width)) data_train$Petal.Length=(data_train$Petal.Length-min(data_train$Petal.Length))*1.0/
(max(data_train$Petal.Length)-min(data_train$Petal.Length)) data_train$Petal.Width=(data_train$Petal.Width-min(data_train$Petal.Width))*1.0/
(max(data_train$Petal.Width)-min(data_train$Petal.Width)) #4个输入,5个的隐藏层,3个输出层
#第一块连接的地方需要4*5个w,5个a,第二块需要5*3个w,5个b f<-function(x)
{
x=1*1.0/(1+exp(-1*x))
return(x)
} #定义训练次数
global_time=100 #定义学习率
learning_rate=1.8 #随机生成第一块的w1
w1=matrix(sample((0:100)*1.0/100,size=20),4,5)
a1=matrix(sample((0:100)*1.0/100,size=5),1,5) w2=matrix(sample((0:100)*1.0/100,size=15),5,3)
a2=matrix(sample((0:100)*1.0/100,size=3),1,3) #遍历每一条数据,每扔进一条数据就调参数
for(time in 1:global_time)
{
for(i in 1:length(data_train$Species))
{
#1*4
x1=matrix(c(data_train$Sepal.Length[i],data_train$Sepal.Width[i],data_train$Petal.Length[i],data_train$Petal.Width[i]),1,4) #矩阵相乘 %*%
#得到经过第一个隐藏层的输出,也就是最后输出层的输入
x2=f(x1%*%w1-a1) #得到最后的输出层,是1*3的矩阵
x3=f(x2%*%w2-a2) #把标签变成1*3的矩阵
y=matrix(0.1,1,3)
if(data_train$Species[i]=="setosa" ){y[1]=0.9}
if(data_train$Species[i]=="versicolor"){y[2]=0.9}
if(data_train$Species[i]=="virginica"){y[3]=0.9}
#与标签比较调参,输出层的误差项为output*(1-output)*(y-output)
#print(y)
#print(data_train$Species[i])
cha=x3*(1-x3)*(y-x3)
#cat("loss",mean(cha))
#print("")
#更新隐藏层和输出层之间的w2,dw2=w2+learning_rate * cha * xi
#通过x2(竖着),t-o(横着)相乘得到5*3的矩阵和w2相加来更新
tx2=t(x2)
dw2=learning_rate * (tx2 %*% cha)
#把之前的w2存下来,之后更新要用
before_w2=w2
w2=w2+dw2 #更新输入层和隐藏层之间的w1,dw1=w1+learning_rate * cha * xi
#隐藏层的误差项不是直接得到的,需要通过后一层的误差项计算,为(和(cha1*wi))
#隐藏层的误差项为 w2(5*3) %*% cha(3*1),的cha2(5*1),注:用的是每更新前的w2
cha2 = before_w2 %*% t(cha)
tx1=t(x1)
dw1=learning_rate * (tx1 %*% t(cha2))
w1=w1+dw1 }
} #看看拟合度
SUM=length(data_train$Species)
right=0
for(i in 1:length(data_train$Species))
{
#1*4
x1=matrix(c(data_train$Sepal.Length[i],data_train$Sepal.Width[i],data_train$Petal.Length[i],data_train$Petal.Width[i]),1,4) #矩阵相乘 %*%
#得到经过第一个隐藏层的输出,也就是最后输出层的输入
x2=f(x1%*%w1-a1) #得到最后的输出层,是1*3的矩阵
x3=f(x2%*%w2-a2)
print(x3) y1=matrix(c(0.9,0.1,0.1),1,3)
y2=matrix(c(0.1,0.9,0.1),1,3)
y3=matrix(c(0.1,0.1,0.9),1,3) # cha11=x3*(1-x3)*(y1-x3)
# cha22=x3*(1-x3)*(y2-x3)
# cha33=x3*(1-x3)*(y3-x3)
cha11=(y1-x3)
cha22=(y2-x3)
cha33=(y3-x3) cha1=0
cha2=0
cha3=0 for(j in 1:3)
{
cha1=cha1+abs(cha11[j])
cha2=cha2+abs(cha22[j])
cha3=cha3+abs(cha33[j])
} micha=min(cha1,cha2,cha3)
#cat("micha",micha,"\n")
#cat("cha1",cha1,"\n")
#cat("cha2",cha2,"\n")
#cat("cha3",cha3,"\n") if(micha==cha1 & data_train$Species[i]=="setosa") {print(1)
right=right+1}
if(micha==cha2 & data_train$Species[i]=="versicolor"){print(2)
right=right+1}
if(micha==cha3 & data_train$Species[i]=="virginica") {print(3)
right=right+1}
} print("拟合度为:")
print((right*1.0/SUM))
print("sum")
print(SUM)
print("right")
print(right) #训练结束,看看参数
print("w1")
print(w1)
print("w2")
print(w2) data_test$Sepal.Length=(data_test$Sepal.Length-min(data_test$Sepal.Length))*1.0/
(max(data_test$Sepal.Length)-min(data_test$Sepal.Length)) data_test$Sepal.Width=(data_test$Sepal.Width-min(data_test$Sepal.Width))*1.0/
(max(data_test$Sepal.Width)-min(data_test$Sepal.Width)) data_test$Petal.Length=(data_test$Petal.Length-min(data_test$Petal.Length))*1.0/
(max(data_test$Petal.Length)-min(data_test$Petal.Length)) data_test$Petal.Width=(data_test$Petal.Width-min(data_test$Petal.Width))*1.0/
(max(data_test$Petal.Width)-min(data_test$Petal.Width)) #用测试数据测试一下准确率如何 SUM=length(data_test$Species)
right=0 for(i in 1:length(data_test$Species))
{
#1*4
x1=matrix(c(data_test$Sepal.Length[i],data_test$Sepal.Width[i],data_test$Petal.Length[i],data_test$Petal.Width[i]),1,4) #矩阵相乘 %*%
#得到经过第一个隐藏层的输出,也就是最后输出层的输入
x2=f(x1%*%w1-a1) #得到最后的输出层,是1*3的矩阵
x3=f(x2%*%w2-a2) cha11=(y1-x3)
cha22=(y2-x3)
cha33=(y3-x3) cha1=0
cha2=0
cha3=0 for(j in 1:3)
{
cha1=cha1+abs(cha11[j])
cha2=cha2+abs(cha22[j])
cha3=cha3+abs(cha33[j])
} micha=min(cha1,cha2,cha3)
#cat("micha",micha,"\n")
#cat("cha1",cha1,"\n")
#cat("cha2",cha2,"\n")
#cat("cha3",cha3,"\n") if(micha==cha1 & data_test$Species[i]=="setosa") {print(1)
right=right+1}
if(micha==cha2 & data_test$Species[i]=="versicolor"){print(2)
right=right+1}
if(micha==cha3 & data_test$Species[i]=="virginica") {print(3)
right=right+1}
} print("accuracy:")
print((right*1.0/SUM))
cat("right",right)
print("")
cat("SUM",SUM)

2. 带包实现BP人工神经完成iris

rm(list=ls())
#install.packages("sampling")
library(nnet)
library(sampling) setwd("C:/Users/Administrator/Desktop/R???????????ฺพ???าต/สต??4-?หน?????????") data("iris") iris$Sepal.Length=(iris$Sepal.Length-min(iris$Sepal.Length))*1.0/
(max(iris$Sepal.Length)-min(iris$Sepal.Length)) iris$Sepal.Width=(iris$Sepal.Width-min(iris$Sepal.Width))*1.0/
(max(iris$Sepal.Width)-min(iris$Sepal.Width)) iris$Petal.Length=(iris$Petal.Length-min(iris$Petal.Length))*1.0/
(max(iris$Petal.Length)-min(iris$Petal.Length)) iris$Petal.Width=(iris$Petal.Width-min(iris$Petal.Width))*1.0/
(max(iris$Petal.Width)-min(iris$Petal.Width)) n=round(3/5*nrow(iris)/3) sub_train=strata(iris,stratanames=("Species"),size=rep(n,3),method="srswor")
head(sub_train)
colnames(iris)<-c("x1","x2","x3","x4","y") data_train=iris[sub_train$ID_unit,]
data_test=iris[-sub_train$ID_unit,]
dim(data_train)
dim(data_test) model1=nnet(y~.,data=data_train,size=6,decay=5e-5,maxit=1000)
pred=predict(model1,data_test[,1:4],type="class")
P=sum(as.numeric(pred==data_test$y))/nrow(data_test)
cat("accuracy",P*100,"%\n")
table(data_test$y,pred)

R语言——实验4-人工神经网络的更多相关文章

  1. R语言——实验5-聚类分析

    针对课件中的例子自己实现k-means算法 调用R语言自带kmeans()对给定数据集表示的文档进行聚类. 给定数据集: a)         数据代表的是文本信息. b)        第一行代表词 ...

  2. R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...

  3. R语言 实验三 数据探索和预处理

    计算缺失值个数 计算缺失率   简单统计量:计算最值     箱形图分析   分布分析:画出频率直方图 统计量分析:对于连续属性值,求出均值以及标准差         缺失值处理:删除法     去除 ...

  4. 开源的c语言人工神经网络计算库 FANN

    这年头机器学习非常的火,神经网络算是机器学习算法中的比较重要的一种.这段时间我也花了些功夫,学了点皮毛,顺便做点学习笔记. 介绍人工神经网络的基本理论的教科书很多.我正在看的是蒋宗礼教授写的<人 ...

  5. 社交网络分析的 R 基础:(一)初探 R 语言

    写在前面 3 年的硕士生涯一转眼就过去了,和社交网络也打了很长时间交道.最近突然想给自己挖个坑,想给这 3 年写个总结,画上一个句号.回想当时学习 R 语言时也是非常戏剧性的,开始科研生活时到处发邮件 ...

  6. R语言-神经网络包RSNNS

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  7. R语言 神经网络算法

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  8. 实验的方差分析(R语言)

    实验设计与数据处理(大数据分析B中也用到F分布,故总结一下,加深印象)第3课小结--实验的方差分析(one-way analysis of variance) 概述 实验结果\(S\)受多个因素\(A ...

  9. 独立成分分析(ICA)的模拟实验(R语言)

    本笔记是ESL14.7节图14.42的模拟过程.第一部分将以ProDenICA法为例试图介绍ICA的整个计算过程:第二部分将比较ProDenICA.FastICA以及KernelICA这种方法,试图重 ...

随机推荐

  1. java-接口的概述及其特点

    1.接口概述: - 从狭义的角度讲就是指java中的interface - 从广义的角度讲对外提供规则的都是接口 2.接口特点: - 接口中定义的全都是抽象方法. - 接口用关键字interface表 ...

  2. Java中的继承抽象类和接口

    一.总结 1.使用extends关键字继承,eg: class Student extends Persion { ...}; 2.Java编程规范中类的首字母大写,方法的首字母小写单词首字母代谢,e ...

  3. Intellij IDEA2017.3永久激活方法

    随着idea不断地发展,eclipse的缺点日渐明显,为了能够获得良好的编码体验,越来越多的朋友转向了idea,淘汰了eclipse但是由于近期idea所有私人服务器被封杀了,很多喜欢编码的朋友们都陷 ...

  4. Scala方法定义,方法和函数的区别,将方法转换成函数

    1. 定义方法和函数 1.1. 定义方法 方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型 1.2. 定义函数 1.3.方法和函数的区别 在函数式编程语言中,函数是 ...

  5. Stream Processing 101: From SQL to Streaming SQL in 10 Minutes

    转自:https://wso2.com/library/articles/2018/02/stream-processing-101-from-sql-to-streaming-sql-in-ten- ...

  6. centos配置apache的https服务

    因为公司要开发微信小程序,由于小程序比较特殊,需要https服务,所以就研究了下apache的https服务了,大致过程如下: 1.向证书机构申请https证书,会得到证书和私钥 2.安装apache ...

  7. Hessian总结

    一.简介: Hessian是一个基于Binary-RPC 实现的远程通讯library,基于 Http 协议进行传输.通过其自定义的串行化机制将请求信息进行序列化,产生二进制流.响应端根据 Hessi ...

  8. makeinfo is missing on your system(转)

    ubunut14.04 make install 提示 makeinfo is missing on your system: 输入makeinfo后,提示没有安装该命令,然后提示可以安装texinf ...

  9. .NET设计模式 第二部分 创建型模式(3)—建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对 ...

  10. linux项目部署常用命令

    原文出处:http://blog.csdn.net/u013628152/article/details/45847013 1:执行命令#find / -name tomcat,系统将列出所有tomc ...