MATLAB神经网络(1)之R练习

将在MATLAB神经网络中学到的知识用R进行适当地重构,再写一遍,一方面可以加深理解和记忆,另一方面练习R,比较R和MATLAB的不同。
如要在R中使用之前的数据,应首先在MATLAB中用writetable函数将原本的由mat文件读入的数据写到csv文件中,以备R读入。

writetable(T,filename) writes to a file with the name and extension specified by filename.

writetable determines the file format based on the specified extension. The extension must be one of the following:

  1. .txt, .dat, or .csv for delimited text files
  2. .xls, .xlsm, or .xlsx for Excel® spreadsheet files
  3. .xlsb for Excel spreadsheet files supported on systems with Excel for Windows® See doc writetable.
writetable(table(c1),"data1.csv");
writetable(table(c2),"data2.csv");
writetable(table(c3),"data3.csv");
writetable(table(c4),"data4.csv");

这里我们使用R中十分经典的鸢尾花数据集iris(在dplyr包中)。

library(dplyr)

## Warning: package 'dplyr' was built under R version 3.5.3

##
## Attaching package: 'dplyr'

## The following objects are masked from 'package:stats':
##
## filter, lag

## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union

dim(iris)

## [1] 150 5

str(iris)

## 'data.frame': 150 obs. of 5 variables:
## Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

可以看到该数据集共有150组数据,4个自变量,1个因变量(factor),鸢尾花有3类。

sort: sort a vector or factor (partially) into ascending or descending order.

order: returns a permutation which rearranges its first argument into ascending or descending order, breaking ties by further arguments.

k<-rnorm()
n<-order(k)
input<-iris[,1:]
output1<-iris[,]
output1<-as.integer(output1)
output<-matrix(,,)
output<-as.data.frame(output)
#把输出从1维变成3维
for(i in
1:)
{
if(output1[i]==)
output[i,]=
else
if(output1[i]==)
output[i,]=
else
output[i,]=
}
input_train=input[n[1:],]
output_train=output[n[1:],]
input_test=input[n[121:],]
input_test=input[n[121:],]
me<-apply(input_train,,mean)
va<-apply(input_train,,var)
me

## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.875000 3.030000 3.849167 1.239167

va

## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.6707983 0.1876639 3.0223522 0.5622346

#输入数据归一化
inputn<-scale(input_train)

下面进行神经网络初始化。

结构4-5-3

innum<-
midnum<-
outnum<-
#权值初始化
w1<-matrix(rnorm(innum*midnum),midnum,innum)
b1<-rnorm(midnum)
w2<-matrix(rnorm(outnum*midnum),midnum,outnum)
b2<-rnorm(outnum)
#学习率
xite<-0.1
loopNumber<-
I<-rep(,midnum)
Iout<-rep(,midnum)
FI<-rep(,midnum)
dw1<-matrix(,innum,midnum)
db1<-rep(,midnum)

神经网络训练

E<-rep(,loopNumber)
for(ii in
1:loopNumber)
{
for(i in
1:)
{
x=inputn[i,]
for(j in
1:midnum)
{
I[j]<-sum(inputn[i,]*w1[j,])+b1[j]
Iout[j]<-1/(1+exp(-I[j]))
}
yn<-t(w2)%*%Iout+b2

e<-output_train[i,]-yn
E[ii]<-E[ii]+sum(abs(e))

dw2<-t(e)%*%Iout
db2<-e

for(j in
1:midnum)
{
S<-1/(1+exp(-I[j]));
FI[j]<-S*(1-S);
}

for(k in
1:innum)
{
for(j in
1:midnum)
{
dw1[k,j]<-FI[j]*x[k]*sum(e*w2[j,])
db1[j]<-FI[j]*sum(e*w2[j,])
}
}

w1<-w1+xite*t(dw1)
b1<-b1+xite*t(db1)
w2<-w2+xite*t(dw2)
b2<-b2+xite*t(db2)
}
}

分类预测

inputn_test<-input_test
for(i in
1:)
{
inputn_test[i,]<-(input_test[i,]-me)/va^0.5
}
fore=matrix(,,);
for(i in
1:)
{
for(j in
1:midnum)
{
I[j]=sum(inputn_test[i,]*w1[j,])+b1[j]
I<-unlist(I)
Iout[j]=1/(1+exp(-I[j]))
}
fore[,i]=t(w2)%*%Iout+b2
}

结果分析

output_fore=rep(,)
for(i in
1:)
{
output_fore[i]<-which.max(fore[,i])
}
error=output_fore-output1[n[121:]]
t<-table(output_fore,output1[n[121:]])
t

##
## output_fore 1 2 3
## 1 13 0 0
## 2 0 9 0
## 3 0 0 8

#正确率
options(digits=)
rightridio<-(t[,]+t[,]+t[,])/
result<-paste("正确率是 ",round(rightridio*,digits=),"%")
result

## [1] "正确率是 100 %"

MATLAB神经网络(1)之R练习的更多相关文章

  1. 12.Matlab神经网络工具箱

    概述: 1 人工神经网络介绍 2 人工神经元 3 MATLAB神经网络工具箱 4 感知器神经网络 5 感知器神经网络 5.1 设计实例分析 clear all; close all; P=[ ; ]; ...

  2. MATLAB神经网络原理与实例精解视频教程

    教程内容:<MATLAB神经网络原理与实例精解>随书附带源程序.rar9.随机神经网络.rar8.反馈神经网络.rar7.自组织竞争神经网络.rar6.径向基函数网络.rar5.BP神经网 ...

  3. 《精通Matlab神经网络》例10-16的新写法

    <精通Matlab神经网络>书中示例10-16,在创建BP网络时,原来的写法是: net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsi ...

  4. Matlab神经网络

    1. <MATLAB神经网络原理与实例精解> 2. B站:https://search.bilibili.com/all?keyword=matlab&from_source=na ...

  5. 使用opencv-python实现MATLAB的fspecial('Gaussian', [r, c], sigma)

    reference_opencv实现高斯核 reference_MATLAB_fspecial函数说明 # MATLAB H = fspecial('Gaussian', [r, c], sigma) ...

  6. MATLAB神经网络(2)之R练习

    1. AMORE 1.1 newff newff(n.neurons, learning.rate.global, momentum.global, error.criterium, Stao, hi ...

  7. Matlab神经网络工具箱学习之一

    1.神经网络设计的流程 2.神经网络设计四个层次 3.神经网络模型 4.神经网络结构 5.创建神经网络对象 6.配置神经网络的输入输出 7.理解神经网络工具箱的数据结构 8.神经网络训练 1.神经网络 ...

  8. matlab神经网络工具箱创建神经网络

    为了看懂师兄的文章中使用的方法,研究了一下神经网络 昨天花了一天的时间查怎么写程序,但是费了半天劲,不能运行,百度知道里倒是有一个,可以运行的,先贴着做标本 % 生成训练样本集 clear all; ...

  9. Matlab神经网络验证码识别

    本文,将会简述如何利用Matlab的强大功能,调用神经网络处理验证码的识别问题.  预备知识,Matlab基础编程,神经网络基础.  可以先看下: Matlab基础视频教程 Matlab经典教程--从 ...

随机推荐

  1. hadoop datanode 启动正常,但master无法识别(50030不显示datanode节点)

    start-all.sh 启动 坑爹 找不出错 试了各种办法,重新formaet 查看 集群ID是否相同.都无效 日志也没看到错 按官网方法手动一步步启,问题照旧 master节点,yarn name ...

  2. python开发时小问题之端口占用

    昨天开发时遇到个小问题: 在使用pycharm编写tornado代码时: 直接用这种方式开启了服务,当我想修改代码时发现端口已经被占用代码提交不上去 所以现在该关闭进程: 步骤一: 打开CMD 步骤二 ...

  3. python心得二(编码问题)

    内容编码 字码发展1.ascii(只识别英文)8位就可以表示所有英文,字符数字,1个字节就可以 2.unicode(万国码)最少两个字节中文三个字节 3.utf-8万国码存在空间浪费英文8位中文24位 ...

  4. 分布式Web服务器架构(通俗易通)

    最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网 ...

  5. 关于HTTP请求GET和POST的区别

    1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.actio ...

  6. dTree动态生成树(后台处理,简化前台操作)

    dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...

  7. 关于JavaScript中的基本类型

    1.在JavaScript的数据中包含以下两种 1 基本类型 Number.Boolean.String.NULL.Undefined 以及ES6的 Symbol 2 引用类型 Object.Arra ...

  8. 用缓冲技术OSCache 提高JSP应用的性能和稳定性

    一.概述 在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来:有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息.所有这一切都属于复杂信息的例子.在Web页面中 ...

  9. 软件测试人必备的 Python 知识图

    之前发过蛮多不少关于 Python 学习的文章,收到大家不少的好评,不过大家也有许多困惑: 现在测试不好做,是不是真的该重新去学一门热门的语言? 入门 Python 该学哪些知识点?该看哪些书? 可以 ...

  10. 14、创建/恢复ETH钱包身份

    借助网上的一段描述: 若以银行账户为类比,这 5 个词分别对应内容如下: 地址=银行卡号密码=银行卡密码私钥=银行卡号+银行卡密码助记词=银行卡号+银行卡密码Keystore+密码=银行卡号+银行卡密 ...