アットウィキロゴ

えx0406

package word;
 
public class pro {
 
    double[] alpha=new double[4];
    double[][] beta=new double[4][3];
    int number,datanumber;
    int[] y=new int[101];
    double[][] x=new double[101][3];
    int[][] e=new int[3][101];
 
     double a;
    double[] b=new double[3];
 
    public static void main(String[] args) {
        pro te=new pro();
    }
 
    pro(){
 
 
        number=2;
        datanumber=50;
 
        int s;
 
          for(s=1;s<30;s++){
        x[s][1]=2+Math.random();
        x[s][2]=5+Math.random();
        y[s]=1;
        }
 
         for(s=31;s<datanumber+1;s++){
        x[s][1]=-3+Math.random();
        x[s][2]=-7+Math.random();
        y[s]=0;
        }
 
         int h;
 
        for(s=1;s<datanumber+1;s++){
        e[1][s]=0;
        h=0;    
        if(Math.random()>0.1)h=h+1;
        if(y[s]>0.5)h=h+1;
        if(h==2)e[1][s]=1;
        }
 
        for(s=1;s<datanumber+1;s++){
        e[2][s]=0;
        h=0;    
        if(Math.random()>0.2)h=h+1;
        if(y[s]>0.5)h=h+1;
        if(h==2)e[2][s]=1;
        }
 
        int[] ex=new int[100]; 
        for(s=1;s<datanumber+1;s++){
        ex[s]=e[1][s];    
        }
 
   optimal sub2=new optimal();
         sub2.number=number;
         sub2.datanumber=datanumber;
         sub2.x=x;
         sub2.y=ex;
         sub2.makedata();
         a=sub2.alpha;
         b=sub2.beta;
 
         alpha[1]=a;
         for(s=1;s<number+1;s++){
         beta[1][s]=b[s];    
         }
 
         int sx;
         for(s=1;s<datanumber+1;s++){
         double x1=alpha[1];
         for(sx=1;sx<number+1;sx++){
         x1=x1+beta[1][sx]*x[s][sx];    
         }
         double f1=1/(1+Math.exp(-x1));
         e[1][s]=0;
         if(f1>0.5)e[1][s]=1;
         }
 
 
        for(s=1;s<datanumber+1;s++){
        ex[s]=e[2][s];    
        }
 
 
   optimal sub3=new optimal();
         sub3.number=number;
         sub3.datanumber=datanumber;
         sub3.x=x;
         sub3.y=ex;
         sub3.makedata();
         a=sub3.alpha;
         b=sub3.beta;
 
         alpha[2]=a;
         for(s=1;s<number+1;s++){
         beta[2][s]=b[s];    
         }
 
         for(s=1;s<datanumber+1;s++){
         double x1=alpha[2];
         for(sx=1;sx<number+1;sx++){
         x1=x1+beta[2][sx]*x[s][sx];    
         }
         double f1=1/(1+Math.exp(-x1));
         e[2][s]=0;
         if(f1>0.5)e[2][s]=1;
         }
 
 
 
         double[][] q=new double[101][3];
 
        for(s=1;s<datanumber+1;s++){
        q[s][1]=e[1][s];
        q[s][2]=e[2][s];
        }
 
   optimal sub4=new optimal();
         sub4.number=number;
         sub4.datanumber=datanumber;
         sub4.x=q;
         sub4.y=y;
         sub3.makedata();
         a=sub3.alpha;
         b=sub3.beta;
 
         alpha[3]=a;
         for(s=1;s<number+1;s++){
         beta[3][s]=b[s];    
         }
 
         for(s=1;s<datanumber+1;s++){
         double x1=alpha[3];
         for(sx=1;sx<number+1;sx++){
         x1=x1+beta[3][sx]*q[s][sx];    
         }
         double f1=1/(1+Math.exp(-x1));
         int z=0;
         if(f1>0.5)z=1;
         System.out.println(y[s]+","+f1);
         }
 
 
 
 
 
 
 
 
    }
 
 
 
}
 
 
 
package word;
 
 
public class optimal {
 
    int s,sx,datanumber,number;
    double alpha;
      int[] y=new int[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(){
 
 
 
    faststep sub41=new faststep();
    sub41.number=number;
    sub41.datanumber=datanumber;
    sub41.x=x;
    sub41.y=y;
    sub41.makedata();
    alpha=sub41.alpha;
    beta=sub41.beta;
 
 
 
   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 word;
 
 
public class faststep {
 
     int[] y=new int[500];
double[] ys=new double[500];
     double[][] x=new double[500][40];
   int s,datanumber,number;
   double alpha;
     double[] beta=new double[500];
   double[][] xs=new double[500][40];
    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;
        }
 
        for(s=1;s<datanumber+1;s++){
        ys[s]=1;
        if(y[s]<0.5)ys[s]=-1;    
        }
 
 
        ols sub=new ols();
        sub.datanumber=datanumber;
        sub.number=number+1;
        sub.x=xs;
        sub.y=ys;
        sub.makedata();
        sol=sub.sol;
 
        for(s=1;s<number+1;s++){
        beta[s]=sol[s];    
        }
 
        alpha=sol[number+1];
 
 
 
 
 
    }
 
}
 
 
package word;
 
 
public class faststep {
 
     int[] y=new int[500];
double[] ys=new double[500];
     double[][] x=new double[500][40];
   int s,datanumber,number;
   double alpha;
     double[] beta=new double[500];
   double[][] xs=new double[500][40];
    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;
        }
 
        for(s=1;s<datanumber+1;s++){
        ys[s]=1;
        if(y[s]<0.5)ys[s]=-1;    
        }
 
 
        ols sub=new ols();
        sub.datanumber=datanumber;
        sub.number=number+1;
        sub.x=xs;
        sub.y=ys;
        sub.makedata();
        sol=sub.sol;
 
        for(s=1;s<number+1;s++){
        beta[s]=sol[s];    
        }
 
        alpha=sol[number+1];
 
 
 
 
 
    }
 
}
 
package word;
 
 
public class faststep {
 
     int[] y=new int[500];
double[] ys=new double[500];
     double[][] x=new double[500][40];
   int s,datanumber,number;
   double alpha;
     double[] beta=new double[500];
   double[][] xs=new double[500][40];
    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;
        }
 
        for(s=1;s<datanumber+1;s++){
        ys[s]=1;
        if(y[s]<0.5)ys[s]=-1;    
        }
 
 
        ols sub=new ols();
        sub.datanumber=datanumber;
        sub.number=number+1;
        sub.x=xs;
        sub.y=ys;
        sub.makedata();
        sol=sub.sol;
 
        for(s=1;s<number+1;s++){
        beta[s]=sol[s];    
        }
 
        alpha=sol[number+1];
 
 
 
 
 
    }
 
}
 
 
 
package word;
 
 
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月16日 08:20