package ren;
public class pro {
int[] y=new int[400];
int[][] e=new int[400][3];
int datanumber,number;
double[] beta=new double[3];
double alpha;
double[] dbeta=new double[3];
double dalpha;
public static void main(String[] args) {
pro t=new pro();
}
pro(){
datanumber=100;
number=2;
int s;
for(s=1;s<datanumber+1;s++){
y[s]=0;
if(Math.random()>0.5)y[s]=1;
}
for(s=1;s<datanumber+1;s++){
e[s][1]=0;
int h=0;
if(Math.random()>0.2)h=h+1;
if(y[s]>0)h=h+1;
if(h==2)e[s][1]=1;
e[s][2]=0;
h=0;
if(Math.random()>0.2)h=h+1;
if(y[s]<0.5)h=h+1;
if(h==2)e[s][2]=1;
}
alpha=0;
beta[1]=0;
beta[2]=0;
int mode=0;
while(mode<1000){
ex sub=new ex();
sub.alpha=alpha;
sub.beta=beta;
sub.y=y;
sub.e=e;
sub.datanumber=datanumber;
sub.number=number;
double u1=sub.makedata();
double h=0.01;
ex sub2=new ex();
sub2.alpha=alpha+h;
sub2.beta=beta;
sub2.y=y;
sub2.e=e;
sub2.datanumber=datanumber;
sub2.number=number;
double u2=sub2.makedata();
dalpha=(u2-u1)/h;
int sx;
double[] betax=new double[3];
for(s=1;s<3;s++){
for(sx=1;sx<3;sx++){
betax[sx]=beta[sx];
}
betax[s]=betax[s]+h;
ex sub3=new ex();
sub3.alpha=alpha;
sub3.beta=betax;
sub3.y=y;
sub3.e=e;
sub3.datanumber=datanumber;
sub3.number=number;
double u3=sub3.makedata();
dbeta[s]=(u3-u1)/h;
}
double du=-u1/100;
double dz=dalpha*dalpha;
for(s=1;s<3;s++){
dz=dz+dbeta[s]*dbeta[s];
}
double t=du/dz;
for(sx=1;sx<3;sx++){
betax[sx]=beta[sx]+dbeta[sx]*t;
}
ex sub4=new ex();
sub4.alpha=alpha+dalpha*t;
sub4.beta=betax;
sub4.y=y;
sub4.e=e;
sub4.datanumber=datanumber;
sub4.number=number;
double u4=sub4.makedata();
if(u1>u4){
alpha=alpha+dalpha*t;
for(s=1;s<3;s++){
beta[s]=betax[s];
}
}
mode=mode+1;
if(u4>u1)mode=10000;
}
for(s=1;s<datanumber+1;s++){
double y1=alpha+beta[1]*e[s][1]+beta[2]*e[s][2];
System.out.println(y[s]+"."+(1/(1+Math.exp(-y1))));
}
}
}
最終更新:2016年12月17日 12:40