アットウィキロゴ

situpnn

package y6;
 
 
public class pro {
 
 int datanumber,number;   
 int[] y=new int[201];
 int[][] e=new int[201][4];
 double sig;
 double[] delta=new double[3];
 
 
 double[] ddelta=new double[3];
 double dsig;
 
    public static void main(String[] args) {
        pro t=new pro();
    }
 
    pro(){
 
 
    datanumber=100;
    number=2;
 
    int s;
    for(s=1;s<datanumber+1;s++){
    e[s][1]=0;    
    if(Math.random()>0.5)e[s][1]=1;    
    e[s][2]=0;    
    if(Math.random()>0.5)e[s][2]=1;  
    int h=0;
    if(e[s][1]>0.5)h=h+1;
    if(e[s][2]>0.5)h=h+1;
    if(Math.random()>0.2)h=h+1;
    y[s]=0;
    if(h==3)y[s]=1;
    }
 
    sig=0;
    delta[1]=0;
    delta[2]=0;
 
    int mode=0;
 
    while(mode<100){
 
      ex_fin sub=new ex_fin();
      sub.delta=delta;
      sub.sig=sig;
      sub.y=y;
      sub.e=e;
      sub.datanumber=datanumber;
      sub.number=number;
      double u1=sub.makedata();
 
 
      double de=0.01;
 
      ex_fin sub2=new ex_fin();
      sub2.delta=delta;
      sub2.sig=sig+de;
      sub2.y=y;
      sub2.e=e;
      sub2.datanumber=datanumber;
      sub2.number=number;
      double u2=sub2.makedata();
 
 
 
      dsig=(u2-u1)/de;
 
 
 
 
       double[] deltax=new double[3];
 
       for(s=1;s<number+1;s++){
       int sx;
       for(sx=1;sx<number+1;sx++){
       deltax[sx]=delta[sx];    
       }
 
       deltax[s]=deltax[s]+de;
 
 
    ex_fin sub3=new ex_fin();
      sub3.delta=deltax;
      sub3.sig=sig;
      sub3.y=y;
      sub3.e=e;
      sub3.datanumber=datanumber;
      sub3.number=number;
      double u3=sub3.makedata();
 
      ddelta[s]=(u3-u1)/de;
 
 
 
    }
 
    double du=u1/100;
 
 
    double dz=dsig*dsig;
    for(s=1;s<number+1;s++){
    dz=dz+ddelta[s]*ddelta[s];    
    }
 
    double t=du/dz;
 
    if(dz<0.001)mode=10000;
 
 
    for(s=1;s<number+1;s++){
    deltax[s]=delta[s]+t*ddelta[s];    
    }
 
    ex_fin sub4=new ex_fin();
      sub4.delta=deltax;
      sub4.sig=sig+t*dsig;
      sub4.y=y;
      sub4.e=e;
      sub4.datanumber=datanumber;
      sub4.number=number;
      double u4=sub4.makedata();
 
 
    if(u4>u1){
     sig=sig+dsig*t;   
   for(s=1;s<number+1;s++){
    delta[s]=deltax[s];    
    }
 
    }
 
 
    if(u1>u4)mode=10000;
    mode=mode+1;
    }
 
 
    for(s=1;s<datanumber+1;s++){
    double y1=sig+delta[1]*e[s][1]+delta[2]*e[s][2];
    double y2=1/(1+Math.exp(-y1));
    System.out.println(y2+","+e[s][1]+","+e[s][2]);
    }
 
 
    }}
 
package y6;
 
 
public class ex_fin {
 
 int datanumber,number;   
 int[] y=new int[201];
 int[][] e=new int[201][4];
 double sig;
 double[] delta=new double[3];
 
 
    double makedata(){
 
        int s,sx;
    double zz=0;
    for(s=1;s<datanumber+1;s++){
    double z=sig;    
    for(sx=1;sx<number+1;sx++){
    z=z+delta[sx]*e[s][sx];    
    }    
    double z1=1/(1+Math.exp(-z));
    if(y[s]>0.5)zz=zz+(z1-1)*(z1-1);
    if(y[s]<0.5)zz=zz+z1*z1;
    }
 
 
    return zz;
 
 
    }
 
}
 
最終更新:2016年12月24日 18:20