package bs;
public class pro {
double[] beta=new double[11];
double alpha;
int datanumber;
int number;
double[] y=new double[500];
double[] ys=new double[500];
double[][] x=new double[500][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=100;
number=2;
int s;
for(s=1;s<datanumber+1;s++){
x[s][1]=5+Math.random();
x[s][2]=3+Math.random();
y[s]=1;
}
for(s=51;s<datanumber+1;s++){
x[s][1]=-3+Math.random();
x[s][2]=-2+Math.random();
y[s]=-1;
}
double[] sol=new double[5];
double[][] xs=new double[500][10];
int sx;
for(s=1;s<datanumber+1;s++){
for(sx=1;sx<number+1;sx++){
xs[s][sx]=x[s][sx];
}
xs[s][number+1]=1;
}
ols sub2=new ols();
sub2.x=xs;
sub2.datanumber=datanumber;
sub2.number=number+1;
sub2.y=y;
sub2.makedata();
sol=sub2.sol;
alpha=sol[number+1];
for(sx=1;sx<number+1;sx++){
beta[sx]=sol[sx];
}
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;
for(s=1;s<101;s++){
System.out.println(y[s]+"(*)"+(beta[2]*x[s][2]+beta[1]*x[s][1]+alpha));
}
}
}
package bs;
public class ols {
int s,s1,s2;
int datanumber,number;
double x1;
double[][] a=new double[100][100];
double[] b=new double[100];
double[] y=new double[1000];
double[][] x=new double[1000][10];
double[] sol=new double[100];
void makedata(){
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*x[s][s2];
}
a[s1][s2]=x1;
}
}
for(s1=1;s1<number+1;s1++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*y[s];
}
b[s1]=x1;
}
double z;
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<number+1;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1];
}
}
for(s1=1;s1<number+1;s1++){
sol[s1]=b[s1]/a[s1][s1];
}
}
}
package bs;
public class optimal {
double[] beta=new double[11];
double alpha;
int datanumber;
int number;
double[] y=new double[500];
double[][] x=new double[500][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;
}
}
}
package bs;
public class ex{
double[] beta=new double[11];
double alpha;
int datanumber;
int number;
double[] y=new double[500];
double[][] x=new double[500][4];
double makedata(){
int n;
double z=0;
for(n=1;n<datanumber+1;n++){
double z1=1;
double z2=1/(1+Math.exp(-1));
if(y[n]>0)z=z+(f(n)-z1)*(f(n)-z1);
if(y[n]<0)z=z+(f(n)-z2)*(f(n)-z2);
}
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];
}
double x1=Math.exp(-z);
return 1/(1+x1);
}
}
最終更新:2016年12月07日 20:20