package nn;
public class pro {
int[][] link=new int[6][4];
int number_link;
int[] y=new int[101];
double[][] x=new double[101][4];
int datanumber;
double[][] e_op=new double[6][101];
int[] alphax=new int[4];
int[][] alpha=new int[7][4];
double[][] e=new double[6][101];
public static void main(String[] args) {
pro r=new pro();
}
pro(){
link[1][0]=3;
link[1][1]=1;
link[1][2]=2;
link[2][0]=4;
link[2][1]=1;
link[2][2]=2;
link[3][0]=5;
link[3][1]=3;
link[3][2]=4;
datanumber=100;
int s;
for(s=1;s<datanumber+1;s++){
x[s][1]=Math.random();
x[s][2]=Math.random();
if(x[s][1]+x[s][2]>1)y[s]=1;
}
for(s=1;s<datanumber+1;s++){
e_op[1][s]=x[s][1];
e_op[2][s]=x[s][2];
if(Math.random()>0.5)e_op[4][s]=1;
if(Math.random()>0.5)e_op[3][s]=1;
e_op[5][s]=y[s];
}
int[] a=new int[4];
int trs;
int sx;
int tr;
for(tr=1;tr<4;tr++){
double minz=9999;
for(sx=0;sx<3;sx++){
alphax[sx]=0;
}
for(trs=1;trs<1001;trs++){
for(sx=0;sx<3;sx++){
a[sx]=(int)(20*Math.random())-10;
}
double z=0;
for(s=1;s<datanumber+1;s++){
double x1=a[0];
int m1=link[tr][1];
int m2=link[tr][2];
int m0=link[tr][0];
x1=x1+a[1]*e_op[m1][s]+a[2]*e_op[m2][s];
double z1=1/(1+Math.exp(-x1));
z=z+(e_op[m0][s]-z1)*(e_op[m0][s]-z1);
}
if(z<minz){
minz=z;
for(sx=0;sx<3;sx++){
alphax[sx]=a[sx];
}
}
}
for(sx=0;sx<3;sx++){
alpha[tr][sx]=alphax[sx];
}
System.out.println(tr+","+alpha[tr][0]+","+alpha[tr][1]+","+alpha[tr][2]);
}
for(s=1;s<datanumber+1;s++){
e[1][s]=x[s][1];
e[2][s]=x[s][2];
e[5][s]=y[s];
}
for(tr=3;tr<5;tr++){
for(s=1;s<datanumber+1;s++){
int m1=link[tr][1];
int m2=link[tr][2];
int m0=link[tr][0];
double x1=alpha[tr][0];
x1=x1+alpha[tr][1]*e_op[m1][s]+alpha[tr][2]*e_op[m2][s];
e[m0][s]=0;
if(x1>0)e[m0][s]=1;
}
}
tr=3;
for(s=1;s<datanumber+1;s++){
int m1=link[tr][1];
int m2=link[tr][2];
int m0=link[tr][0];
double y1=alpha[tr][0]+alpha[tr][1]+alpha[tr][2]*e[m2][s];
double y2=alpha[tr][0]+alpha[tr][2]*e[m2][s];
double z1=1/(1+Math.exp(-y1));
double q1=(e[m0][s]-z1)*(e[m0][s]-z1);
double z2=1/(1+Math.exp(-y2));
double q2=(e[m0][s]-z2)*(e[m0][s]-z2);
System.out.println(q1+","+q2);
e_op[m1][s]=0;
if(q1>q2)e_op[m1][s]=1;
}
for(s=1;s<datanumber+1;s++){
int m1=link[tr][1];
int m2=link[tr][2];
int m0=link[tr][0];
double y1=alpha[tr][0]+alpha[tr][1]+alpha[tr][2]*e[m2][s];
double y2=alpha[tr][0]+alpha[tr][2]*e[m2][s];
double z1=1/(1+Math.exp(-y1));
double q1=(e[m0][s]-z1)*(e[m0][s]-z1);
double z2=1/(1+Math.exp(-y2));
double q2=(e[m0][s]-z2)*(e[m0][s]-z2);
System.out.println(q1+","+q2);
e_op[m1][s]=0;
if(q1>q2)e_op[m1][s]=1;
}
}
}
}
最終更新:2017年08月10日 02:32