【例1.3】以鸢尾花数据集(iris)为例,将鸢尾花数据分为两类:setosa、versico-lor。输入特征为花瓣长度与宽度。不使用包编写感知器R脚本。
(1)iris数据结构
>str(iris)
′data.frame′:150 obs.of 5 variables:
$Sepal.Length:num 5.14.94.74.655.44.654.44.9…
$Sepal.Width:num 3.533.23.13.63.93.43.42.93.1…
$Petal.Length:num 1.41.41.31.51.41.71.41.51.41.5…
$Petal.Width:num 0.20.20.20.20.20.40.30.20.20.1…
$Species:Factor w/3 levels"setosa","versicolor",…:1111
111111…
(2)建模
(3)可视化
#分类结果如图1.11所示
>plot(Petal.Length~Petal.Width,xlim=c(0,3),ylim=c(0,8),
data=iris[iris$Species=="virginica",])
>data1<-iris[iris$Species=="versicolor",]
>points(data1$Petal.Width,data1$Petal.Length,col=2)
>data2<-iris[iris$Species=="setosa",]
>points(data2$Petal.Width,data2$Petal.Length,col=3)
>x<-seq(0,3,0.01)
>y<-x∗(-w[2]/w[3])-w[1]/w[3]
>lines(x,y,col=4)(www.xing528.com)
图1.11 分类结果图
这是运行了7次得到的结果。感兴趣的读者可以与支持向量机相比,表明神经网络的单层感知器分类不是那么的可信,有些弱。可以发现交叉验证结果并不理想。
>plot(1:i,eps[1:i],type="o") #每次迭代的平均绝对误差,如图1.12所示
【例1.4】例1.3续
使用nnet包创建单层FNN模型。
(1)加载使用的包和数据
>library(nnet); #安装nnet软件包
>library(mlbench); #安装mlbench软件包
(2)数据准备
随机选择半数观测作为训练集,剩下的作为测试集。
>set.seed(1); #设随机数种子
>ir<-rbind(iris3[,1],iris3[,2],iris3[,3])
>targets<-class.ind(c(rep("s",50),rep("c",50),rep("v",50)))
>samp<-c(sample(1:50,25),sample(51:100,25),sample(101:150,25))
(3)建模
建模用到nnet包中的nnet函数,其调用格式为
构建只包含有3个结点的一个隐藏层神经网络。
(4)模型部署
适用于神经网络的部署方法为predict。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。