アットウィキロゴ

せrr

package bs;
 
 
public class pro {
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 double[] y=new double[500];
 double[] ys=new double[500];
 double[][] x=new double[500][4];
 
  double[] betas=new double[11];
 
  double[] d_beta=new double[11];
  double d_alpha;
 
  double[] vec_beta=new double[11];
  double vec_alpha;
 
  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]=5+Math.random();
        x[s][2]=3+Math.random();
        y[s]=1;   
        }
 
        for(s=51;s<datanumber+1;s++){
        x[s][1]=-3+Math.random();
        x[s][2]=-2+Math.random();
        y[s]=-1;   
        }
 
        double[] sol=new double[5];
        double[][] xs=new double[500][10];
 
 
        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 sub2=new ols();
        sub2.x=xs;
        sub2.datanumber=datanumber;
        sub2.number=number+1;
        sub2.y=y;
        sub2.makedata();
        sol=sub2.sol;
 
        alpha=sol[number+1];
        for(sx=1;sx<number+1;sx++){
        beta[sx]=sol[sx];
        }
 
 
 
 
   optimal sub=new optimal();
        sub.x=x;
        sub.y=y;
        sub.alpha=alpha;
        sub.beta=beta;
        sub.number=number;
        sub.datanumber=datanumber;
        sub.makedata();
       alpha=sub.alpha;
        beta=sub.beta;
 
       for(s=1;s<101;s++){
        System.out.println(y[s]+"(*)"+(beta[2]*x[s][2]+beta[1]*x[s][1]+alpha));
       }
 
 
    }
 
 
 
 
 
 
}
 
 
 
package bs;
 
 
 
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];
 
   }
 
 
 
 
    }
}
 
package bs;
 
 
 
 
 
 
public class optimal {
 
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 double[] y=new double[500];
 double[][] x=new double[500][4];
 
  double[] betas=new double[11];
 
  double[] d_beta=new double[11];
  double d_alpha;
 
  double[] vec_beta=new double[11];
  double vec_alpha;
  int s;
 
    void makedata(){
 
 
 
        int mode=0;
        while(mode<50){
 
        ex sub=new ex();
        sub.x=x;
        sub.y=y;
        sub.alpha=alpha;
        sub.beta=beta;
        sub.number=number;
        sub.datanumber=datanumber;
        double u1=sub.makedata();
 
 
 
  double h=0.01;      
        for(s=1;s<number+1;s++){
 
            int sx;
            for(sx=1;sx<number+1;sx++){
            betas[sx]=beta[sx];
            }
            betas[s]=beta[s]+h;
 
 
        ex sub2=new ex();
        sub2.x=x;
        sub2.y=y;
        sub2.alpha=alpha;
        sub2.beta=betas;
        sub2.number=number;
        sub2.datanumber=datanumber;
        double u2=sub2.makedata();
 
        d_beta[s]=(u2-u1)/h;
 
        }
 
 
 
        ex sub3=new ex();
        sub3.x=x;
        sub3.y=y;
        sub3.alpha=alpha+h;
        sub3.beta=betas;
        sub3.number=number;
        sub3.datanumber=datanumber;
        double u3=sub3.makedata();
 
        d_alpha=(u3-u1)/h;
 
 
 
 
 
 
  double du=d_alpha*d_alpha;
 for(s=1;s<number+1;s++){
 du=du+d_beta[s]*d_beta[s];
 }
 
 double delta=u1/(100*du);
 
 if(delta>5)mode=1000;
 
 
 for(s=1;s<number+1;s++){
 vec_beta[s]=beta[s]+d_beta[s]*delta;
 }
 vec_alpha=alpha+d_alpha*delta;      
 
 
 
 ex sub7=new ex();
        sub7.x=x;
        sub7.y=y;
        sub7.alpha=vec_alpha;
        sub7.beta=vec_beta;
        sub7.number=number;
        sub7.datanumber=datanumber;
        double u7=sub7.makedata();
 
 
 
        if(u7>u1){
 for(s=1;s<number+1;s++){
            beta[s]=vec_beta[s];
        }
         alpha=vec_alpha;
        }
 if(u1>u7)mode=1000;
 if(u1==u7)mode=1000;
 
     mode=mode+1;
 
 
        }
 
 
 
 
 
 
    }
 
 
 
 
}
 
 
 
package bs;
 
 
 
 
public class ex{
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 double[] y=new double[500];
 double[][] x=new double[500][4];
 
 
    double makedata(){
 
        int n;
        double z=0;
        for(n=1;n<datanumber+1;n++){
        double z1=1;
        double z2=1/(1+Math.exp(-1)); 
         if(y[n]>0)z=z+(f(n)-z1)*(f(n)-z1);
          if(y[n]<0)z=z+(f(n)-z2)*(f(n)-z2);
        }
 
       return z;
 
 
    }
 
    double f(int n){
        int s;
        double z=alpha;
        for(s=1;s<number+1;s++){
        z=z+beta[s]*x[n][s];    
        }
        double x1=Math.exp(-z);
 
        return 1/(1+x1); 
 
    }
 
 
 
}
 
最終更新:2016年12月07日 20:20