#载入程序和数据
library(RSNNS)
data(iris)
#将数据顺序打乱
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定义网络输入
irisValues <- iris[,1:4]
#定义网络输出,并将数据进行格式转换
irisTargets <- decodeClassLabels(iris[,5])
#从中划分出训练样本和检验样本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#数据标准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令执行前馈反向传播神经网络算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型进行预测
predictions <- predict(model,iris$inputsTest)
#生成混淆矩阵,观察预测精度
confusionMatrix(iris$targetsTest,predictions)
#结果如下:
#predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10
以一个二分类问题作为研究对象,图1的混淆矩阵显示了一个分类器可能会遭遇的所有情况,其中列(positive/negative)对应于实例实际所属的类别,行(true/false)表示分类的正确与否(注,这里的混淆矩阵的结构跟[2]中的定义并不一样,但实际说明的问题是一致的)训练的时候。test数据肯定是不参与,所以默认情况下是NULL,但是加入test数据过后,比如说我已经对train数据迭代了一次了,也就是遍历了一次train的数据集合,这时候,可以测试一些test数据,看看这个模型在test上面的效果怎样。收敛的MLP过程下,每一次迭代整个数据集过后,在test数据集上面的错误率应该是逐渐减少的。所以,我感觉test数据其实就是为了测试当前训练好的模型的效果。