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