package word;
public class pro {
double[] alpha=new double[4];
double[][] beta=new double[4][3];
int number,datanumber;
int[] y=new int[101];
double[][] x=new double[101][3];
int[][] e=new int[3][101];
double a;
double[] b=new double[3];
public static void main(String[] args) {
pro te=new pro();
}
pro(){
number=2;
datanumber=50;
int s;
for(s=1;s<30;s++){
x[s][1]=2+Math.random();
x[s][2]=5+Math.random();
y[s]=1;
}
for(s=31;s<datanumber+1;s++){
x[s][1]=-3+Math.random();
x[s][2]=-7+Math.random();
y[s]=0;
}
int h;
for(s=1;s<datanumber+1;s++){
e[1][s]=0;
h=0;
if(Math.random()>0.1)h=h+1;
if(y[s]>0.5)h=h+1;
if(h==2)e[1][s]=1;
}
for(s=1;s<datanumber+1;s++){
e[2][s]=0;
h=0;
if(Math.random()>0.2)h=h+1;
if(y[s]>0.5)h=h+1;
if(h==2)e[2][s]=1;
}
int[] ex=new int[100];
for(s=1;s<datanumber+1;s++){
ex[s]=e[1][s];
}
optimal sub2=new optimal();
sub2.number=number;
sub2.datanumber=datanumber;
sub2.x=x;
sub2.y=ex;
sub2.makedata();
a=sub2.alpha;
b=sub2.beta;
alpha[1]=a;
for(s=1;s<number+1;s++){
beta[1][s]=b[s];
}
int sx;
for(s=1;s<datanumber+1;s++){
double x1=alpha[1];
for(sx=1;sx<number+1;sx++){
x1=x1+beta[1][sx]*x[s][sx];
}
double f1=1/(1+Math.exp(-x1));
e[1][s]=0;
if(f1>0.5)e[1][s]=1;
}
for(s=1;s<datanumber+1;s++){
ex[s]=e[2][s];
}
optimal sub3=new optimal();
sub3.number=number;
sub3.datanumber=datanumber;
sub3.x=x;
sub3.y=ex;
sub3.makedata();
a=sub3.alpha;
b=sub3.beta;
alpha[2]=a;
for(s=1;s<number+1;s++){
beta[2][s]=b[s];
}
for(s=1;s<datanumber+1;s++){
double x1=alpha[2];
for(sx=1;sx<number+1;sx++){
x1=x1+beta[2][sx]*x[s][sx];
}
double f1=1/(1+Math.exp(-x1));
e[2][s]=0;
if(f1>0.5)e[2][s]=1;
}
double[][] q=new double[101][3];
for(s=1;s<datanumber+1;s++){
q[s][1]=e[1][s];
q[s][2]=e[2][s];
}
optimal sub4=new optimal();
sub4.number=number;
sub4.datanumber=datanumber;
sub4.x=q;
sub4.y=y;
sub3.makedata();
a=sub3.alpha;
b=sub3.beta;
alpha[3]=a;
for(s=1;s<number+1;s++){
beta[3][s]=b[s];
}
for(s=1;s<datanumber+1;s++){
double x1=alpha[3];
for(sx=1;sx<number+1;sx++){
x1=x1+beta[3][sx]*q[s][sx];
}
double f1=1/(1+Math.exp(-x1));
int z=0;
if(f1>0.5)z=1;
System.out.println(y[s]+","+f1);
}
}
}
package word;
public class optimal {
int s,sx,datanumber,number;
double alpha;
int[] y=new int[500];
double[][] x=new double[500][4];
double[] beta=new double[500];
double[] b=new double[500];
double[] dbeta=new double[500];
double dalpha;
void makedata(){
faststep sub41=new faststep();
sub41.number=number;
sub41.datanumber=datanumber;
sub41.x=x;
sub41.y=y;
sub41.makedata();
alpha=sub41.alpha;
beta=sub41.beta;
double delta=0.1;
int mode=0;
while(mode<100){
ex sub=new ex();
sub.x=x;
sub.y=y;
sub.number=number;
sub.datanumber=datanumber;
sub.beta=beta;
sub.alpha=alpha;
double u1=sub.makedata();
ex sub2=new ex();
sub2.x=x;
sub2.y=y;
sub2.number=number;
sub2.datanumber=datanumber;
sub2.beta=beta;
sub2.alpha=alpha+delta;
double u2=sub2.makedata();
dalpha=(u2-u1)/delta;
int tr;
for(tr=1;tr<number+1;tr++){
for(s=1;s<number+1;s++){
b[s]=beta[s];
}
b[tr]=beta[tr]+delta;
ex sub3=new ex();
sub3.x=x;
sub3.y=y;
sub3.number=number;
sub3.datanumber=datanumber;
sub3.beta=b;
sub3.alpha=alpha;
double u3=sub3.makedata();
dbeta[tr]=(u3-u1)/delta;
}
double du=-u1/100;
double dz=dalpha*dalpha;
for(s=1;s<number+1;s++){
dz=dz+dbeta[s]*dbeta[s];
}
double t=du/dz;
for(s=1;s<number+1;s++){
b[s]=beta[s]+dbeta[s]*t;
}
ex sub4=new ex();
sub4.x=x;
sub4.y=y;
sub4.number=number;
sub4.datanumber=datanumber;
sub4.beta=b;
sub4.alpha=alpha+t*dalpha;
double u4=sub4.makedata();
if(u1>u4){
alpha= alpha+t*dalpha;
for(s=1;s<number+1;s++){
beta[s]=beta[s]+dbeta[s]*t;
}
}
mode=mode+1;
if(u4>u1)mode=1000;
}
}
}
package word;
public class faststep {
int[] y=new int[500];
double[] ys=new double[500];
double[][] x=new double[500][40];
int s,datanumber,number;
double alpha;
double[] beta=new double[500];
double[][] xs=new double[500][40];
double[] sol=new double[500];
void makedata(){
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;
}
for(s=1;s<datanumber+1;s++){
ys[s]=1;
if(y[s]<0.5)ys[s]=-1;
}
ols sub=new ols();
sub.datanumber=datanumber;
sub.number=number+1;
sub.x=xs;
sub.y=ys;
sub.makedata();
sol=sub.sol;
for(s=1;s<number+1;s++){
beta[s]=sol[s];
}
alpha=sol[number+1];
}
}
package word;
public class faststep {
int[] y=new int[500];
double[] ys=new double[500];
double[][] x=new double[500][40];
int s,datanumber,number;
double alpha;
double[] beta=new double[500];
double[][] xs=new double[500][40];
double[] sol=new double[500];
void makedata(){
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;
}
for(s=1;s<datanumber+1;s++){
ys[s]=1;
if(y[s]<0.5)ys[s]=-1;
}
ols sub=new ols();
sub.datanumber=datanumber;
sub.number=number+1;
sub.x=xs;
sub.y=ys;
sub.makedata();
sol=sub.sol;
for(s=1;s<number+1;s++){
beta[s]=sol[s];
}
alpha=sol[number+1];
}
}
package word;
public class faststep {
int[] y=new int[500];
double[] ys=new double[500];
double[][] x=new double[500][40];
int s,datanumber,number;
double alpha;
double[] beta=new double[500];
double[][] xs=new double[500][40];
double[] sol=new double[500];
void makedata(){
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;
}
for(s=1;s<datanumber+1;s++){
ys[s]=1;
if(y[s]<0.5)ys[s]=-1;
}
ols sub=new ols();
sub.datanumber=datanumber;
sub.number=number+1;
sub.x=xs;
sub.y=ys;
sub.makedata();
sol=sub.sol;
for(s=1;s<number+1;s++){
beta[s]=sol[s];
}
alpha=sol[number+1];
}
}
package word;
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];
}
}
}
最終更新:2016年12月16日 08:20