class makesvm{
double[] a=new double[101];
double b;
double[][] x=new double[300][101];
double[] vec=new double[101];
int[] y=new int[300];
int s,n,sx,h,mxs;
double mx,minmx;
double q,v1,z;
int t;
void makedata(int number){
q=10;
b=1;
for(n=1;n<101;n++){
a[n]=1;
}
for(t=1;t<number;t++){
mxs=0;
minmx=9999;
for(s=1;s<220;s++){
mx=9999;
h=0;
if(y[s]==1)h=h+1;
if(g(a,b,s,x)>0)h=h+1;
if(h==2)mx=met(a,b,s,x);
h=0;
if(y[s]==0)h=h+1;
if(g(a,b,s,x)<0)h=h+1;
if(h==2)mx=met(a,b,s,x);
if(mx<minmx)mxs=s;
if(mx<minmx)minmx=mx;
}
for(n=1;n<101;n++){
vec[n]=df(mxs,n)-q*dg(n);
}
v1=0;
for(n=1;n<101;n++){
v1=v1+vec[n]*vec[n];
}
v1=Math.pow(v1,0.5);
for(n=1;n<101;n++){
vec[n]=vec[n]/v1;
}
for(n=1;n<101;n++){
a[n]=a[n]+vec[n]*0.05;
}
z=met(a,b,mxs,x)-q*g();
System.out.println(z);
}
}
double g(){
int s,h;
double g1;
g1=0;
for(s=1;s<220;s++){
h=0;
if(y[s]==0)h=h+1;
if(g(a,b,s,x)>0)h=h+1;
if(h==2)g1=g1+g(a,b,s,x);
h=0;
if(y[s]==1)h=h+1;
if(g(a,b,s,x)<0)h=h+1;
if(h==2)g1=g1-g(a,b,s,x);
}
return g1;
}
double dg(int n){
int s,h;
double g1;
g1=0;
for(s=1;s<220;s++){
h=0;
if(y[s]==0)h=h+1;
if(g(a,b,s,x)>0)h=h+1;
if(h==2)g1=g1+x[s][n];
h=0;
if(y[s]==1)h=h+1;
if(g(a,b,s,x)<0)h=h+1;
if(h==2)g1=g1-x[s][n];
}
return g1;
}
double df(int s,int n){
double delta,m1,m2;
double[] alpha=new double[101];
int mx;
delta=0.01;
for(mx=1;mx<101;mx++){
alpha[mx]=a[mx];
}
alpha[n]=alpha[n]+delta;
m1=met(a,b,s,x);
m2=met(alpha,b,s,x);
return (m2-m1)/delta;
}
double met(double[] a,double b,int s,double[][] rate){
double m1,m2,t,mt;
int mx;
m1=0;
for(mx=1;mx<101;mx++){
m1=m1+a[mx]*a[mx];
}
m2=g(a,b,s,x);
t=m2/m1;
mt=t*t*m1;
mt=Math.pow(mt,0.5);
return mt;
}
double g(double[] a,double b,int s,double[][] rate){
double g1;
int sx;
g1=b;
for(sx=1;sx<101;sx++){
g1=g1+x[s][sx]*a[sx];
}
return g1;
}
}
最終更新:2011年07月04日 22:51