基于R中的神经网络包(nnet)做分类(高级篇)

针对UCI的seeds数据集,基于R中的神经网络包(nnet)做分类,并计算分类的测试误差。

分类是一种有监督的学习任务,我们需要一些带有标签属性的数据和我们需要预测的新数据。
举例说明,垃圾邮件识别问题,可以理解为一个二分类问题,即识别一封邮件是否是垃圾邮件并作出相应的处理。我们解决分类问题,通常的思路是原始数据集划分为训练集和测试集,利用训练集来训练一个分类模型集合,然后利用测试来选择最优模型,最后利用模型识别或者判断新的邮件是否是垃圾邮件。
分类的方法很丰富,每一种分类方法有着各自的优劣和应用场景。本文利用神经网络分类方法来对数据集进行分类。
我所采用的数据集是公开数据集seeds,可以直接在网上下载,网址是:http://archive.ics.uci.edu/ml/datasets/seeds#。

seeds数据集描述如表1所示。


表1 seeds 数据集概况
由上表可知,seed数据集有7个实数属性和1个类别属性,该数据集可以用于来做分类或者聚类分析与验证。
R中做神经网络算法的包是nnet包。
第一步:导入原始数据集seeds
seeds <-read.table("D:/DMinR/nnet/seeds.txt", header=FALSE, sep="")
第二步:给数据集中变量重命名,依次是面积、周长、紧凑率、核长度、核宽度、不对称系数、内核槽长度和类别,依次命名为:A, P, C , L, W, AC, LKG,Label
names(seeds) <-c("A", "P", "C", "L", "W","AC", "LKG", "Label")
第三步:把seed数据集划分为训练70%的训练数据集和30%的测试数据集
#获取各自的索引号
trainIndex <-sample(1:210, 147)
trainIndex
testIndex <-setdiff(1:210, trainIndex)
testIndex
第四步:利用神经网络对训练数据集获得模型
library(nnet)
ideal <-class.ind(seeds$Label)
seedsANN <-nnet(seeds[trainIndex, -8], ideal[trainIndex, ], size=10, softmax=TRUE)
第五步:对测试数据及进行测试
testLabel <-predict(seedsANN, seeds[testIndex, -8], type="class")
#第六步:计算测试误差率
my_table <-table(seeds[testIndex,]$Label, testLabel)
test_error <-1 -sum(diag(my_table)) / sum(my_table)
test_error
测试误差为:0.0476,即4.76%。


你可能感兴趣的:(Machine,Learning,Data,Analysis)