R语言 神经网络与深度学习(二)

分类

class.ind=function(cl)    #输入cl是一个表示分类结果的向量

{

  n=length(cl)   

  cl=as.factor(cl)        #cl转化为因子型

  x=matrix(0,n,length(levels(cl)))  #生成一个大小为样本数乘以类别数的值为0的矩阵

  x[(1:n)+n*(unclass(cl)-1)]=1   #把对应样本行以及样本类别列的元素设置为1

  dimnames(x)=list(names(cl),levels(cl))  #设置每一列的名称

  x

}

将数据统一转化为0~1的实数值

#设置自己的规范化函数

normalize=function(x)

{

  num=x-min(x)

  denom=max(x)-min(x)

  return(num/denom)

}

规范化数据集

iris_norm=as.data.frame(lapply(iris[1:4],normalize))

head(iris_norm)   #查看规范化后的数据

按照70%30%随机划分训练集和测试集

set.seed(2019)

index=sample(nrow(iris),nrow(iris)*0.7)

iristrain=iris_norm[index,]   #训练集

iristest=iris_norm[-index]    #测试集

#调用class.ind函数把鸢尾花品种转换为二值矩阵的形式,再与花瓣、花萼数据组成新的测试数据集

iristrain.label=iris[index,5]

iristest.label=iris[-index,5]

target=class.ind(iristrain.label)

iris.train=cbind(iristrain,target)

#采用三层感知器作为模型,输入层是四个长宽测量值,隐层中使用四个神经元,输出层则是三个品种对应的输出值

#训练集的目标输出值只有正确的品种分类对应的数值是1,其他则输出为0.

设置神经网络模型

install.packages("neuralnet")

library(neuralnet)

net.iris=neuralnet(

  setosa+versicolor+virginica~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,  #输入输出关系公式

  data = iris.train,   #训练集

  hidden=4          #1个隐层含有4个神经元

  )

plot(net.iris)   #画出神经网络图

得到网络中训练集的输出

train.outputs=as.data.frame(net.iris$net.result)

得到每行中最大值所在列

cid=apply(train.outputs,1,which.max)

使用品种名替换最大值

results=c("setosa","versicolor","virginica")[cid]

 使用混淆矩阵判断结果,只有一例预测错误

table(results,iristrain.label)

          iristrain.label
resultssetosaversicolovirginica
setosa3700
versicolor 0320
 virginica 0135

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈伦2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值