アットウィキロゴ

かつせn

package nn2;
 
 
public class pro {
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 int[] y=new int[50];
 double[][] x=new double[50][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=7;
 
        number=2;
 
        alpha=0.5;
 
        beta[1]=0.4;
        beta[2]=0.3;
        int s;
 
        for(s=1;s<datanumber+1;s++){
        x[s][1]=2;
        x[s][2]=3;
        y[s]=1;   
        }
 
        for(s=5;s<datanumber+1;s++){
        x[s][1]=-2;
        x[s][2]=-3;
        y[s]=-1;   
        }
 
   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;
 
       s=1;
        System.out.println(beta[2]*x[s][2]+beta[1]*x[s][1]+alpha);
 
         s=6;
        System.out.println(beta[2]*x[s][2]+beta[1]*x[s][1]+alpha);
 
    }
 
 
 
 
}
 
 
 
package nn2;
 
public class ex{
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 int[] y=new int[50];
 double[][] x=new double[50][4];
 
 
    double makedata(){
 
        int n;
        double z=0;
        for(n=1;n<datanumber+1;n++){
        z=z+f(n);    
        }
 
       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];    
        }
        if(y[n]<0)z=-z;
        double x1=Math.exp(-z);
 
        return 1/(1+x1); 
 
    }
 
 
 
}
 
package nn2;
 
 
 
public class optimal {
 
 
    double[] beta=new double[11];
    double alpha;
    int datanumber;
    int number;
 int[] y=new int[50];
 double[][] x=new double[50][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;
 
 
        }
 
 
 
 
 
 
    }
 
 
 
 
}
 
最終更新:2016年12月04日 22:25