130行代码实现BP神经网络原理及应用举例

    优化算法是机器学习的一个重要组成部分,BP神经网络是深度学习的基础,BP神经网络原理非常简单,几乎可以理解作是logistic回归的一种集合方式,在前面的博文中,笔者利用R语言实现了几种优化算法,本文以前面提到的粒子群算法为工具,以神经网络的原理为基础,实现了BP神经网络,最后以一个UCI(点击打开链接可以下载该数据)信用评分的例子来说明神经网络运用的效果。

######根据神经网络的原理利用R语言来实现神经网络
##神经网络输入层,隐藏层,输出层参数设置
nclass<-c(14,5,5,1);
#激活函数,本例选取的是双曲正弦函数
sigmoid<-function(x){
    return((exp(x)-exp(-x))/(exp(x)+exp(-x)))
}
#向前计算
Neuralnet<-function(data,parameter){
        data<-scale(data);
		r_<-nrow(data[,-15]);
		c_<-ncol(data[,-15]);
        whide1<-matrix(parameter[1:(c_*nclass[2])],nrow=c_,ncol=nclass[2]);
		whide2<-matrix(parameter[(c_*nclass[2]+1):(c_*nclass[2]+nclass[2]*nclass[3])],nrow=nclass[2],ncol=nclass[3]);
		wout<-parameter[(c_*nclass[2]+nclass[2]*nclass[3]+1):(c_*nclass[2]+nclass[2]*nclass[3]+nclass[3]*nclass[4])];
		#计算各个节点值?
		in_value<-as.matrix(data[,-15]);
        hide1_value<-sigmoid(in_value%*%whide1);
        hide2_value<-sigmoid(hide1_value%*%whide2);
        out_value<-sigmoid(hide2_value%*%wout);
    return(out_value);
}

####
################PSO算法实现################
##初始化PSO算法参数
#收敛因子k(类似于惯性系数的作用)
#学习因子初始化k*phi_1,k*phi_2,phi<-phi_1+phi_2
#粒子群位置初始化w,以及wmin,wmax
#粒子群速度初始化v,以及vmin,vmax
k<-0.729
phi_1<-2.05
phi_2<-2.05
#以上参数为参照前人的经验
#初始化参数的函数
inifunc<-function(dim,wmin,wmax,vmin,vmax,n){
            G<-rep(NA,2*dim+1);
            A<-matrix(runif(n*dim,wmin,wmax),nrow=n,ncol=dim);
            B<-matrix(runif(n*dim,vmin,vmax),nrow=n,ncol=dim);
            C<-apply(A,1,func);
            G<-cbind(A,B,C)[which(C==min(C)),];
    return(rbind(cbind(A,B,C),G));
}

##所有粒子历史最优搜索函数Gbest)
Gbestfunc<-function(x,dim,n){
              C<-x[-(n+1),2*dim+1];
    return(rbind(x[-(n+1),],x[which(C==min(C)),]));
}

##PSO 核心 function
PSOAfunc<-function(x,dim,wmin,wmax,vmin,vmax,n){
              A<-x[-(n+1),1:dim];
              B<-x[-(n+1),(dim+1):(2*dim)];
              C<-x[-(n+1),2*dim+1];
              for(i in 1:n){
                   neww<-A[i,]+B[i,];
                           for(j in 1:dim){
                               if(neww[j]>wmax || neww[j]
   
   
    
    vmax || B[i,k]
    
    
     
     vmax || B[i,k]
     
     
      
      0){
              x[i,j]=1} else
              x[i,j]=0
           }
       }
    return(x)
}
	
A<-interfunc(200,100,0,1,-0.2,0.2,100)

table(option01(Neuralnet(data_test,A)),data_test[,15])	
			
     
     
    
    
   
   

   如有错误,欢迎指正!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值