アットウィキロゴ

busa

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[][] x=new double[201][4];
 
     double[] alpha=new double[3];
 double[][] beta=new double[3][3];
 
 double[] ddelta=new double[3];
 double dsig;
    double[] dalpha=new double[3];
  double[][] dbeta=new double[3][3];
 
 
    public static void main(String[] args) {
        pro t=new pro();
    }
 
    pro(){
 
 
    datanumber=100;
    number=2;
 
    int s;
    for(s=1;s<datanumber+1;s++){
    x[s][1]=Math.random();        
    x[s][2]=Math.random();    
 
    e[s][1]=0;
    if(x[s][1]+x[s][2]+Math.random()>1)e[s][1]=1;
    }
 
    alpha[1]=0;
    beta[1][1]=0;
    beta[1][2]=0;
 
    int mode=0;
 
    while(mode<1000){
 
      ex sub=new ex();
      sub.alpha=alpha;
      sub.beta=beta;
      sub.x=x;
      sub.e=e;
      sub.datanumber=datanumber;
      sub.number=number;
      double u1=sub.makedata(1);
 
 
      double de=0.01;
 
 double[] alphax=new double[3]; 
 
 alphax[1]=alpha[1]+de;
 
     ex sub2=new ex();
      sub2.alpha=alphax;
      sub2.beta=beta;
      sub2.x=x;
      sub2.e=e;
      sub2.datanumber=datanumber;
      sub2.number=number;
      double u2=sub2.makedata(1);
 
 
 
      dalpha[1]=(u2-u1)/de;
 
 
 
 
       double[][] betax=new double[3][3];
 
       for(s=1;s<number+1;s++){
       int sx;
       for(sx=1;sx<number+1;sx++){
       betax[1][sx]=beta[1][sx];    
       }
 
       betax[1][s]=betax[1][s]+de;
 
 
    ex sub3=new ex();
      sub3.beta=betax;
      sub3.alpha=alpha;
      sub3.x=x;
      sub3.e=e;
      sub3.datanumber=datanumber;
      sub3.number=number;
      double u3=sub3.makedata(1);
 
      dbeta[1][s]=(u3-u1)/de;
 
 
 
    }
 
    double du=-u1/100;
 
 
    double dz=dalpha[1]*dalpha[1];
    for(s=1;s<number+1;s++){
    dz=dz+dbeta[1][s]*dbeta[1][s];    
    }
 
    double t=du/dz;
 
    if(dz<0.001)mode=10000;
 
    alphax[1]=alpha[1]+t*dalpha[1];
 
    for(s=1;s<number+1;s++){
    betax[1][s]=beta[1][s]+t*dbeta[1][s];    
    }
 
    ex sub4=new ex();
      sub4.beta=betax;
      sub4.alpha=alphax;
      sub4.x=x;
      sub4.e=e;
      sub4.datanumber=datanumber;
      sub4.number=number;
      double u4=sub4.makedata(1);
 
 
    if(u1>u4){
     alpha[1]=alpha[1]+dalpha[1]*t;   
   for(s=1;s<number+1;s++){
    beta[1][s]=betax[1][s];    
    }
 
    }
 
 
    if(u4>u1)mode=10000;
    mode=mode+1;
    }
 
 
    for(s=1;s<datanumber+1;s++){
    double y1=alpha[1]+beta[1][1]*x[s][1]+beta[1][2]*x[s][2];
    double y2=1/(1+Math.exp(-y1));
    int y3=0;
    if(y2>0.5)y3=1;
    System.out.println(y3+","+e[s][1]);
    }
 
 
    }}
 
 
package y6;
 
 
 
public class ex {
 
 int datanumber,number;   
 double[][] x=new double[201][4];
 int[][] e=new int[201][4];
 double[] alpha=new double[3];
 double[][] beta=new double[3][3];
 
 
    double makedata(int tr){
 
        int s,sx;
    double zz=0;
    for(s=1;s<datanumber+1;s++){
    double z=alpha[tr];    
    for(sx=1;sx<number+1;sx++){
    z=z+beta[tr][sx]*x[s][sx];    
    }    
    double z1=1/(1+Math.exp(-z));
    if(e[s][tr]>0.5)zz=zz+(z1-1)*(z1-1);
    if(e[s][tr]<0.5)zz=zz+z1*z1;
    }
 
 
    return zz;
 
 
    }
 
}
 
最終更新:2016年12月25日 10:36