package hanbun;
public class pro {
double[][] x=new double[200][5];
double[][] xs=new double[200][5];
int datanumber,number;
double[] a=new double[5];
double[] b=new double[5];
double[][] bs=new double[5][21];
double[] as=new double[21];
double[] bx=new double[21];
double[] alpha=new double[5];
double[][] beta=new double[5][5];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
datanumber=100;
number=2;
int s;
for(s=1;s<datanumber+1;s++){
x[s][1]=5*Math.random()+4;
x[s][2]=2*Math.random()-3;
}
fasrstep sub=new fasrstep();
sub.x=x;
sub.number=number;
sub.datanumber=datanumber;
sub.makedata();
alpha=sub.alpha;
beta=sub.beta;
System.out.println(alpha[1]);
System.out.println(alpha[2]);
System.out.println(beta[1][1]);
System.out.println(beta[1][2]);
System.out.println(beta[2][1]);
System.out.println(beta[2][2]);
}}
package hanbun;
public class fasrstep {
double[][] x=new double[200][5];
double[][] xs=new double[200][5];
int datanumber,number;
double[] a=new double[5];
double[] b=new double[5];
double[][] bs=new double[5][21];
double[] as=new double[21];
double[] bx=new double[21];
double[] alpha=new double[5];
double[][] beta=new double[5][5];
void makedata(){
int tr,s;
for(tr=1;tr<number+1;tr++){
double minx=x[1][tr];
double maxx=x[1][tr];
for(s=1;s<datanumber+1;s++){
if(x[s][tr]>maxx)maxx=x[s][tr];
if(x[s][tr]<minx)minx=x[s][tr];
}
b[tr]=1/(maxx-minx);
a[tr]=-minx/(maxx-minx);
for(s=1;s<datanumber+1;s++){
xs[s][tr]=(x[s][tr]-minx)/(maxx-minx);
}
}
for(tr=1;tr<number+1;tr++){
for(s=1;s<number+1;s++){
bx[s]=Math.random();
}
double den=datanumber/2;
int k;
double a1=number;
double a2=-number;
double a3=0;
for(k=1;k<50;k++){
a3=(a1+a2)/2;
int c1=count(a3);
if(c1>den)a1=a3;
if(c1<den)a2=a3;
}
as[tr]=a3;
for(s=1;s<number+1;s++){
bs[tr][s]=bx[s];
}
}
for(tr=1;tr<number+1;tr++){
alpha[tr]=as[tr];
for(s=1;s<number+1;s++){
alpha[tr]=alpha[tr]+bs[tr][s]*a[s];
}
for(s=1;s<number+1;s++){
beta[tr][s]=bs[tr][s]*b[s];
}
}
}
int count(double ax){
int s,sx;
int n=0;
for(s=1;s<datanumber+1;s++){
double z1=ax;
for(sx=1;sx<number+1;sx++){
z1=z1+bx[sx]*xs[s][sx];
}
double z2=1/(1+Math.exp(-z1));
if(z2>0.5)n=n+1;
}
return n;
}
}
最終更新:2016年12月25日 20:35