package nn3;
public class pro {
double[] y=new double[500];
double[][] x=new double[500][4];
int datanumber,number;
double alpha;
double[] beta=new double[500];
public static void main(String[] args) {
pro t=new pro();
}
pro(){
int s;
for(s=1;s<11;s++){
x[s][1]=2+Math.random();
x[s][2]=5+Math.random();
y[s]=1;
}
for(s=11;s<21;s++){
x[s][1]=-3+Math.random();
x[s][2]=-7+Math.random();
y[s]=-1;
}
number=2;
datanumber=20;
faststep sub=new faststep();
sub.number=number;
sub.datanumber=datanumber;
sub.x=x;
sub.y=y;
sub.makedata();
alpha=sub.alpha;
beta=sub.beta;
oprimal sub2=new oprimal();
sub2.number=number;
sub2.datanumber=datanumber;
sub2.x=x;
sub2.y=y;
sub2.alpha=alpha;
sub2.beta=beta;
sub2.makedata();
alpha=sub2.alpha;
beta=sub2.beta;
int sx;
for(s=1;s<datanumber+1;s++){
double x1=alpha;
for(sx=1;sx<number+1;sx++){
x1=x1+beta[sx]*x[s][sx];
}
double f1=1/(1+Math.exp(-x1));
System.out.println(y[s]+","+f1);
}
}
}
package nn3;
public class oprimal {
int s,sx,datanumber,number;
double alpha;
double[] y=new double[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(){
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 nn3;
public class ex {
int s,sx,datanumber,number;
double alpha;
double[] y=new double[500];
double[][] x=new double[500][4];
double[] beta=new double[500];
double makedata(){
double zz=0;
for(s=1;s<datanumber+1;s++){
double z=alpha;
for(sx=1;sx<number+1;sx++){
z=z+beta[sx]*x[s][sx];
}
double z1=1/(1+Math.exp(-z));
if(y[s]>0)zz=zz+(z1-1)*(z1-1);
if(y[s]<0)zz=zz+z1*z1;
}
return zz;
}
}
package nn3;
public class faststep {
double[] y=new double[500];
double[][] x=new double[500][4];
int s,datanumber,number;
double alpha;
double[] beta=new double[500];
double[][] xs=new double[500][4];
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;
}
ols sub=new ols();
sub.datanumber=datanumber;
sub.number=number+1;
sub.x=xs;
sub.y=y;
sub.makedata();
sol=sub.sol;
for(s=1;s<number+1;s++){
beta[s]=sol[s];
}
alpha=sol[number+1];
}
}
package nn3;
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月14日 17:23