优化算法是机器学习的一个重要组成部分,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])
如有错误,欢迎指正!