查看: 382|回复: 0

[求助] 机器学习作业机器学习作业机器学习作业

[复制链接]
论坛徽章:
23
Hadoop研习者初级
日期:2013-10-21 22:46:16Java徽章
日期:2015-07-29 15:04:13算法导论徽章
日期:2016-03-16 10:46:20Docker徽章
日期:2017-01-06 10:49:53HBase徽章
日期:2017-03-10 12:00:30Hive徽章
日期:2017-04-07 11:23:30python徽章
日期:2017-08-03 18:13:45python徽章
日期:2017-08-17 17:09:35python徽章
日期:2017-08-17 17:13:37python徽章
日期:2017-09-22 16:52:22电商分布式系统徽章
日期:2015-04-15 15:28:25机器学习徽章
日期:2015-03-02 18:03:10
发表于 2018-3-6 12:38 | 显示全部楼层 |阅读模式
本帖最后由 jy01768678 于 2018-3-6 12:44 编辑

BP神经网络的实现

由于没有数据 使用了鸢尾花的数据

  • iris1<-as.matrix(iris[,3:4])
  • iris1<-cbind(iris1,c(rep(1,100),rep(0,50)))
  • set.seed(5)
  • n<-length(iris1[,1])
  • samp<-sample(1:n,n/5)
  • traind<-iris1[-samp,c(1,2)]
  • train1<-iris1[-samp,3]
  • testd<-iris1[samp,c(1,2)]
  • test1<-iris1[samp,3]
  • set.seed(1)
  • ntrainnum<-120
  • nsampdim<-2
  • net.nin<-2
  • net.nhidden<-3
  • net.nout<-1
  • w<-2*matrix(runif(net.nhidden*net.nin)-0.5,net.nhidden,net.nin)
  • b<-2*(runif(net.nhidden)-0.5)
  • net.w1<-cbind(w,b)
  • W<-2*matrix(runif(net.nhidden*net.nout)-0.5,net.nout,net.nhidden)
  • B<-2*(runif(net.nout)-0.5)
  • net.w2<-cbind(W,B)
  • traind_s<-traind
  • traind_s[,1]<-traind[,1]-mean(traind[,1])
  • traind_s[,2]<-traind[,2]-mean(traind[,2])
  • traind_s[,1]<-traind_s[,1]/sd(traind_s[,1])
  • traind_s[,2]<-traind_s[,2]/sd(traind_s[,2])
  • sampinex<-rbind(t(traind_s),rep(1,ntrainnum))
  • expectedout<-train1
  • eps<-0.01
  • a<-0.3
  • mc<-0.8
  • maxiter<-2000
  • iter<-0
  • errrec<-rep(0,maxiter)
  • outrec<-matrix(rep(0,ntrainnum*maxiter),ntrainnum,maxiter)
  • sigmoid<-function(x){
  • y<-1/(1 exp(-x))
  • return(y)
  • }
  • for(i in 1:maxiter){
  • hid_input<-net.w1%*%sampinex;
  • hid_out<-sigmoid(hid_input);
  • out_input1<-rbind(hid_out,rep(1,ntrainnum));
  • out_input2<-net.w2%*%out_input1;
  • out_out<-sigmoid(out_input2);
  • outrec[,i]<-t(out_out);
  • err<-expectedout-out_out;
  • sse<-sum(err^2);
  • errrec<-sse;
  • iter<-iter 1;
  • if(sse<=eps)
  • break
  • Delta<-err*sigmoid(out_out)*(1-sigmoid(out_out))
  • delta<-(matrix(net.w2[,1length(net.w2[1,])-1)]))%*%Delta*sigmoid(hid_out)*(1-sigmoid(hid_out));
  • dWex<-Delta%*%t(out_input1)
  • dwex<-delta%*%t(sampinex)
  • if(i==1){
  • net.w2<-net.w2 a*dWex;
  • net.w1<-net.w1 a*dwex;
  • }
  • else{
  • net.w2<-net.w2 (1-mc)*a*dWex mc*dWexold;
  • net.w1<-net.w1 (1-mc)*a*dwex mc*dwexold;
  • }
  • dWexold<-dWex;
  • dwexold<-dwex;
  • }
  • testd_s<-testd
  • testd_s[,1]<-testd[,1]-mean(testd[,1])
  • testd_s[,2]<-testd[,2]-mean(testd[,2])
  • testd_s[,1]<-testd_s[,1]/sd(testd_s[,1])
  • testd_s[,2]<-testd_s[,2]/sd(testd_s[,2])
  • inex<-rbind(t(testd_s),rep(1,150-ntrainnum))
  • hid_input<-net.w1%*%inex
  • hid_out<-sigmoid(hid_input)
  • out_input1<-rbind(hid_out,rep(1,150-ntrainnum))
  • out_input2<-net.w2%*%out_input1
  • out_out<-sigmoid(out_input2)
  • out_out1<-out_out
  • out_out1[out_out<0.5]<-0
  • out_out1[out_out>=0.5]<-1
  • rate<-sum(out_out1==test1)/length(test1)

分类正确率为:0.9333333,是一个不错的学习器。这里需要注意的是动量因子mc的选取,mc不能过小,否则容易陷入局部最小而出不去,在本例中,如果mc=0.5,分类正确率仅为:0.5333333,学习效果很不理想。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2018-9-21 06:25 , Processed in 0.120953 second(s), 31 queries .