アットウィキロゴ

にゅーたtりうい

package nn3;
 
 
public class pro {
 
    double[] y=new double[500];
 double[][] x=new double[500][4];
   int datanumber,number;
  double alpha;
     double[] beta=new double[500];
 
    public static void main(String[] args) {
        pro t=new pro();
    }
    pro(){
 
        int s;
 
        for(s=1;s<11;s++){
        x[s][1]=2+Math.random();
        x[s][2]=5+Math.random();
        y[s]=1;
        }
 
 
 
         for(s=11;s<21;s++){
        x[s][1]=-3+Math.random();
        x[s][2]=-7+Math.random();
        y[s]=-1;
        }
 
         number=2;
 datanumber=20;
 
 
         faststep sub=new faststep();
         sub.number=number;
         sub.datanumber=datanumber;
         sub.x=x;
         sub.y=y;
         sub.makedata();
         alpha=sub.alpha;
         beta=sub.beta;
 
 
         oprimal sub2=new oprimal();
         sub2.number=number;
         sub2.datanumber=datanumber;
         sub2.x=x;
         sub2.y=y;
         sub2.alpha=alpha;
         sub2.beta=beta;
         sub2.makedata();
         alpha=sub2.alpha;
         beta=sub2.beta;
 
         int sx;
         for(s=1;s<datanumber+1;s++){
         double x1=alpha;
         for(sx=1;sx<number+1;sx++){
         x1=x1+beta[sx]*x[s][sx];    
         }
         double f1=1/(1+Math.exp(-x1));
         System.out.println(y[s]+","+f1);
         }
 
 
 
 
    }
 
 
 
 
}
 
 
package nn3;
 
 
public class oprimal {
 
    int s,sx,datanumber,number;
    double alpha;
      double[] y=new double[500];
 double[][] x=new double[500][4];
    double[] beta=new double[500];
      double[] b=new double[500];
      double[] dbeta=new double[500];
      double dalpha;
 
void makedata(){
 
   double delta=0.1;
 
   int mode=0;
 
   while(mode<100){
 
   ex sub=new ex();
   sub.x=x;
   sub.y=y;
   sub.number=number;
   sub.datanumber=datanumber;
   sub.beta=beta;
   sub.alpha=alpha;
   double u1=sub.makedata(); 
 
   ex sub2=new ex();
   sub2.x=x;
   sub2.y=y;
   sub2.number=number;
   sub2.datanumber=datanumber;
   sub2.beta=beta;
   sub2.alpha=alpha+delta;
   double u2=sub2.makedata(); 
 
   dalpha=(u2-u1)/delta;
 
   int tr;
 
   for(tr=1;tr<number+1;tr++){
 
   for(s=1;s<number+1;s++){
   b[s]=beta[s];    
   }
   b[tr]=beta[tr]+delta;
 
   ex sub3=new ex();
   sub3.x=x;
   sub3.y=y;
   sub3.number=number;
   sub3.datanumber=datanumber;
   sub3.beta=b;
   sub3.alpha=alpha;
   double u3=sub3.makedata(); 
 
   dbeta[tr]=(u3-u1)/delta;
 
   }
 
 
  double du=-u1/100; 
 
  double dz=dalpha*dalpha;
  for(s=1;s<number+1;s++){
  dz=dz+dbeta[s]*dbeta[s];    
  }
 
  double t=du/dz;
 
 for(s=1;s<number+1;s++){
 b[s]=beta[s]+dbeta[s]*t;    
 }
 
 
   ex sub4=new ex();
   sub4.x=x;
   sub4.y=y;
   sub4.number=number;
   sub4.datanumber=datanumber;
   sub4.beta=b;
   sub4.alpha=alpha+t*dalpha;
   double u4=sub4.makedata(); 
 
 
 if(u1>u4){
 alpha= alpha+t*dalpha;   
 for(s=1;s<number+1;s++){
 beta[s]=beta[s]+dbeta[s]*t;    
 }    
 
 } 
 
 
 mode=mode+1;
  if(u4>u1)mode=1000;
}
 
 
 
 
 
 
 
 
}
 
 
}
 
 
 
 
package nn3;
 
 
public class ex {
 
    int s,sx,datanumber,number;
    double alpha;
      double[] y=new double[500];
 double[][] x=new double[500][4];
    double[] beta=new double[500];
 
double makedata(){
 
    double zz=0;
    for(s=1;s<datanumber+1;s++){
    double z=alpha;    
    for(sx=1;sx<number+1;sx++){
    z=z+beta[sx]*x[s][sx];    
    }    
    double z1=1/(1+Math.exp(-z));
    if(y[s]>0)zz=zz+(z1-1)*(z1-1);
    if(y[s]<0)zz=zz+z1*z1;
    }
 
 
    return zz;
}
 
 
}
 
 
package nn3;
 
 
public class faststep {
 
     double[] y=new double[500];
 double[][] x=new double[500][4];
   int s,datanumber,number;
   double alpha;
     double[] beta=new double[500];
   double[][] xs=new double[500][4];
    double[] sol=new double[500];
 
    void makedata(){
 
        int sx;
        for(s=1;s<datanumber+1;s++){
        for(sx=1;sx<number+1;sx++){
        xs[s][sx]=x[s][sx];
        }
        xs[s][number+1]=1;
        }
 
 
        ols sub=new ols();
        sub.datanumber=datanumber;
        sub.number=number+1;
        sub.x=xs;
        sub.y=y;
        sub.makedata();
        sol=sub.sol;
 
        for(s=1;s<number+1;s++){
        beta[s]=sol[s];    
        }
 
        alpha=sol[number+1];
 
 
 
 
 
    }
 
}
 
 
package nn3;
 
 
public class ols {
 
    int s,s1,s2;
    int datanumber,number;
    double x1;
    double[][] a=new double[100][100];
     double[] b=new double[100];
     double[] y=new double[1000];
    double[][] x=new double[1000][10];
     double[] sol=new double[100];
 
    void makedata(){
 
 
 
    for(s1=1;s1<number+1;s1++){
    for(s2=1;s2<number+1;s2++){   
     x1=0;   
    for(s=1;s<datanumber+1;s++){
    x1=x1+x[s][s1]*x[s][s2];
    }
    a[s1][s2]=x1;
    }
    }
 
 
 
    for(s1=1;s1<number+1;s1++){
    x1=0;   
    for(s=1;s<datanumber+1;s++){
    x1=x1+x[s][s1]*y[s];
    }
    b[s1]=x1;
 
    }
 
    double z;
 
   for(s1=1;s1<number+1;s1++){
   for(s2=1;s2<number+1;s2++){   
   z=a[s2][s1]/a[s1][s1];  
   if(s1==s2)z=0;
   for(s=1;s<number+1;s++){
   a[s2][s]=a[s2][s]-z*a[s1][s];
   } 
   b[s2]=b[s2]-z*b[s1];
   }
   }
 
   for(s1=1;s1<number+1;s1++){
   sol[s1]=b[s1]/a[s1][s1];
 
   }
 
    }
}
 
最終更新:2016年12月14日 17:23