BP神经网络和支持向量机在R语言中的实现

BP(Back Propagation)神经网络  是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。 

下面用R语言中的nnet程序包进行分类算例和回归算例,第一个例子是对河流的化学属性对其中的藻类进行回归预测,第二个例子是著名的鸢尾花算例。 

#首先读入程序包并对数据进行清理 
library(DMwR) 
library(nnet) 
data(algae) 
algae <- algae[-manyNAs(algae), ] 
clean.algae <- knnImputation(algae[,1:12],k=10) 

#神经网络还需要对数据进行标准化 
norm.data <- scale(clean.algae[,4:12]) 
#使用nnet命令,参数规定隐层单元个数为10,权重调整速度为0.1,最大迭代次数为1000次,线性输入。 
nn <- nnet(a1~., norm.data, size = 10, decay = 0.01, 
maxit = 1000, linout = T, trace = F) 
#利用模型进行预测 
norm.preds <- predict(nn, norm.data) 
#绘制预测值与真实值之间的散点图 
plot(norm.preds~ scale(clean.algae$a1)) 


#计算相对误差 
(nmse2 <- mean((norm.preds-scale(clean.algae$a1))^2)/ 
mean((mean( scale(clean.algae$a1))- scale(clean.algae$a1))^2)) 

再来看看处理分类数据的表现,利用iris数据来判断花的种类 

model.nnet <-nnet(Species ~ ., linout = F,size = 10, decay = 0.01, 
maxit = 1000,trace = F,data = iris) 
#对分类数据预测需要加上type参数 
pre.forest=predict(model.nnet, iris,type='class') 
table(pre.forest,iris$Species) 

pre.forest   setosa versicolor virginica  setosa         50          0         0  versicolor      0         49         0  virginica       0          1        50
其预测只有一个错误,效果不错 

支持向量机SVM是九十年代中期发展起来的新的机器学习技术,与传统的神经网络NN技术不同,SVM是以统计学习理论SLT为基础,NN是以传统统计学理论为基础。传统统计学的前提条件是要有足够多的样本,而统计学习理论是着重研究小样本条件下的统计规律和学习方法的,它为机器学习问题建立了一个很好的理论框架。 

实践表明,建立在SLT之上支持向量机不仅结构简单,而且技术性能尤其是推广能力明显提高,能够解决好大量现实中的小样本学习问题,它是一个全新的神经网络技术。 

library(e1071) 

model.svm <- svm(a1~., norm.data) 
preds <- predict(model.svm, norm.data) 
plot(preds~ scale(clean.algae$a1)) 

model.svm <-svm(Species ~ .,data = iris) 
pre=predict(model.svm, iris,type='class') 
table(pre,iris$Species) 

多元自适应回归样条(MARS) 

library(earth) 
model.mars <- earth(a1~., clean.algae) 
preds <- predict(model.mars, clean.algae) 
plot(preds~ clean.algae$a1) 
(nmse2 <- mean((preds-clean.algae$a1)^2)/ 
mean((mean( clean.algae$a1)- clean.algae$a1)^2)) 

model.mars <-earth(Species ~ .,data = iris) 
pre=predict(model.mars, iris,type='class') 
table(pre,iris$Species) 
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值