アットウィキロゴ

SVM 練習

class svm{

double x[][]=new double[3][3];
int y[]=new int[3];
double[] a=new double[3];
double a1,a2;
double b;
double f1,f2;
int d1;
double g1,g2,b1,e,h;
double gx;
int t1;

public static void main(String args[]){
svm test=new svm();
}

svm(){


x[1][1]=1;
x[1][2]=1;
x[2][1]=5;
x[2][2]=5;
y[1]=-1;
y[2]=1;

a[1]=1;
a[2]=1;
b=1;

h=0.01;

t1=0;
while(t1<500){

gx=g(a,b,x,y);

System.out.println(gx);

g1=dg(1,a,b,x,y);
g2=dg(2,a,b,x,y);
b1=db(a,b,x,y);

e=g1*g1+g2*g2+b1*b1;
e=Math.sqrt(e);

a[1]=a[1]-h*g1/e;
a[2]=a[2]-h*g2/e;
b=b-h*b1/e;

if(gx<0.1)t1=2000;

t1=t1+1;
}


System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(b);


}

double db(double[] a,double b,double[][] x,int[] y){
double dx,g1,g2,h;
h=0.01;
g1=g(a,b,x,y);
g2=g(a,b+h,x,y);
dx=(g2-g1)/h;
return dx;
}

double dg(int m,double[] a,double b,double[][] x,int[] y){
double dx,g1,g2,h;
double[] ax=new double[3];
h=0.01;
ax[1]=a[1];
ax[2]=a[2];
ax[m]=ax[m]+h;
g1=g(a,b,x,y);
g2=g(ax,b,x,y);
dx=(g2-g1)/h;
return dx;
}

double g(double[] a,double b,double[][] x,int[] y){
double m1,m2;
int d1,d2;
double g1;
g1=0;
m1=met(1,a,b,x);
m2=met(2,a,b,x);
d1=det(1,a,b,x,y);
d2=det(2,a,b,x,y);
if(d1<50)g1=g1+m1;
if(d2<50)g1=g1+m2;
return g1;
}

int det(int m,double[] a,double b,double[][] x,int[] y){
int h,d1;
double f1;
f1=f(m,a,b,x);
d1=0;
h=0;
if(f1>0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)d1=100;
h=0;
if(f1<0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)d1=100;
return d1;
}

double met(int m,double[] a,double b,double[][] x){
double t,m1,m2,me;
double[] dx=new double[3];
m1=a[1]*a[1]+a[2]*a[2];
m2=-b-a[1]*x[m][1]-a[2]*x[m][2];
t=m2/m1;
me=m1*t*t;
return me;
}

double f(int m,double[] a,double b,double[][] x){
double f1;
f1=a[1]*x[m][1]+a[2]*x[m][2]+b;
return f1;
}

}
最終更新:2011年05月18日 02:24