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