1 我们用R软件中的nnet包来建立神经网络模型。
首先,安装并加载软件包。
install.packages("nnet")
library(nnet)
2 读取数据集。
gyyz_data=read.csv("gyyz.csv",head=T)#读取数据集
gyyz_data$is_rise=as.factor(gyyz_data$is_rise)#将目标变量转换成分类数据
head(gyyz_data);dim(gyyz_data)#查看数据维度
str(gyyz_data)#查看数据集中各变量的属性
3 nnet()函数主要有以下两种形式:
第一种:
nnet(formula, data, weights, ...,
subset, na.action, contrasts = NULL)
第二种:
nnet(x, y, weights, size, Wts, mask,
linout = FALSE, entropy = FALSE, softmax = FALSE,
censored = FALSE, skip = FALSE, rang = 0.7, decay = 0,
maxit = 100, Hess = FALSE, trace = TRUE, MaxNWts = 1000,
abstol = 1.0e-4, reltol = 1.0e-8, ...)
其中,第一种形式中的formula表示模型公式,通常为class~.或者class~x1+x2;参数data表示数据集;weights代表各类样本在模型中所占比重,默认值为1;subset用于抽取样本子集。第二种形式中的x表示自变量数据集,y表示目标变量;size表示隐藏层的节点个数,通常为自变量个数的1.2-1.5倍,size为0时表示无隐藏层;rang表示初始权重范围[-rang,rang],一般rang与x的绝对值中的最大值的乘积大约等于1;decay表示模型权重值的衰减精度;maxit是最大迭代次数。
nnet()函数的输出结果有:wts(最优权重值)、residuals(训练集的残差值)、convergence(该值为0表示模型没有达到最大迭代次数就停止了;该值为1表示模型迭代过程达到了最大迭代次数,需要增加最大迭代次数以提高模型精度)。
#建立神经网络模型
nnet_model=nnet(is_rise~.,data=gyyz_data[,-1],decay=5e-4,size=15,rang=0.7)
summary(nnet_model)#查看神经网络模型
该神经网络模型的输入层、隐藏层、输出层的节点个数分别为:8个、15个、1个,权重共有151个。结果中以i、h、o和数字编号的代号分别表示输入层、隐藏层、输出层的节点。该模型的最终迭代值为34.62。
4 根据建立的神经网络模型进行预测。
nnet_pred=predict(nnet_model,gyyz_data[,-1],type="class")
gyyz_data$nnet_pred=nnet_pred#将预测结果保存到数据集
head(gyyz_data)#查看预测结果
#预测结果混淆矩阵
table(gyyz_data$is_rise,gyyz_data$nnet_pred)