B-P反向传播网络算法的R实现(2)

一、概率分割值与模型应用

在二分类的问题中,B-P算法给出的是预测不同类别的概率,一般情况下,我们默认大于0.5为一类,小于0.5为另一类,但这并非适用于所有的情况(在上面的例子中就几乎没有大于0.5的观测),所以,我们需要在确认预测模型合理的基础上根据概率值和实际类别找到一个恰当的概率分割值,并为后续的类别预测提供概率依据。寻找合适的概率分割值最简便的方法就是绘制ROC曲线。
library(ROCR)
查看预测概率值得分布情况
summary(BP_model$net.result[[1]])
计算标准ROC曲线
perf_1 <- performance(BP_model_pred,measure = “tpr”,x.measure = “fpr”)
计算在不同的概率分割值下的精度值
perf_2 <- performance(BP_model_pred,measure = ‘acc’)
par(mfrow=c(1,2))
plot(perf_1,colorize=TRUE,print.cutoffs.at=c(0.2,0.3,0.46))
plot(perf_2)
B-P反向传播网络算法的R实现(2)_第1张图片
从图中可以看到,分割值在0.3附近时的总体预测精度较高(相对于其他预测值而言),因此选用0.3来查看模型的预测效果。
最终的预测精度为0.57,从实际应用的角度来看这并不是一个很理想的结果,并且造成这个问题的原因有很多种:有可能是输入变量较少,且年龄变量并不是很重要;也有可能是样本量存在较大的不平衡性等等。
下图是BP神经网络的正向传播与反向传播:
B-P反向传播网络算法的R实现(2)_第2张图片

二、B-P反向传播网络算法的R实现

除了nerualnet包外,nnet包也可实现传统B-P反向传播网络的分类与回归预测,nnet函数所对应的是三层网络结构,其中输入节点个数等于输入变量个数,网络结构中只包含一个隐层,隐节点个数需要自行制定。在输出节点上,二分类与回归问题的输出节点个性为1,多分类问题的输出节点个数等于输出变量的类别数,函数调用公式如下:
library(nnet)
nnet(formula, data, size, linout = FALSE, entropy = FALSE, softmax = FALSE,
maxit = 100, abstol = 1.0e-4,rang=, …)
size:指定隐节点的个数,若为0,则表示没有隐层
linout:指定输出节点的激活函数是否为非线性函数(FALSE),等同于neuralnet函数中的linear.output参数
entropy:用于指定损失函数是否采用交互熵,默认值FALSE表示损失函数采用误差平方和的形式
maxit:用于指定迭代停止条件(默认值为100)
asstol:用于指定迭代终止条件(默认权重的最大调整量小于0.0001时终止)
rang:初始权值设置
nnet函数同样是返回一个包含众多计算结果的列表,主要包括:
• wts:各个节点的连接权重
• value:迭代结束时的损失函数值
• fitted.values:各观测值的预测值

nerualnet函数相比,nnet有着两个主要优势:
• predict函数可直接对nnet对象进行预测
• 当输出变量为多分类值时,只需定义为因子,nnet函数就可进行多分类的预测(输出概率值);若不定义为因子,nnet将按回归预测处理。

三、总结

本期我们给大家介绍了神经网络中的B-P反向传播网络模型,同时也着重的介绍了其算法的实现过程,希望大家能够有所收获。

你可能感兴趣的:(sdk)