アットウィキロゴ

VCX

import java.io.*;

class pro{

String[] data=new String[50000];
int s,sx,datanumber,wordnumber;
int[][] sdata=new int[500][10000];
int[][] xx=new int[500][10000];
int[] y=new int[500];
int xp,tr;
double[][] x=new double[500][10000];
double[] a=new double[21];
double b,q;
double[] v=new double[22];
int point;
double[] vec=new double[21];
double e,delta;

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

pro(){

readfile("svm.txt");

for(s=1;s<datanumber+1;s++){
String[] z=data[s].split(",");
wordnumber=z.length;
for(sx=0;sx<z.length;sx++){
sdata[s][sx+1]=Integer.parseInt(z[sx]);
}
}
System.out.println(datanumber);
System.out.println(wordnumber);


for(s=1;s<datanumber+1;s++){
xx[s][1]=sdata[s][35];
xx[s][2]=sdata[s][455];
xx[s][3]=sdata[s][446];
xx[s][4]=sdata[s][197];
xx[s][5]=sdata[s][849];
xx[s][6]=sdata[s][799];
xx[s][7]=sdata[s][251];
xx[s][8]=sdata[s][127];
xx[s][9]=sdata[s][174];
xx[s][10]=sdata[s][304];
xx[s][11]=sdata[s][614];
xx[s][12]=sdata[s][667];
xx[s][13]=sdata[s][537];
xx[s][14]=sdata[s][945];
xx[s][15]=sdata[s][1035];
xx[s][16]=sdata[s][1809];
xx[s][17]=sdata[s][1689];
xx[s][18]=sdata[s][1678];
xx[s][19]=sdata[s][1630];
xx[s][20]=sdata[s][306];
}

for(s=1;s<8;s++){
y[s]=1;
}

for(s=8;s<datanumber+1;s++){
y[s]=-1;
}


for(s=1;s<datanumber+1;s++){
xp=0;
for(sx=1;sx<21;sx++){
xp=xp+xx[s][sx];
}
for(sx=1;sx<21;sx++){
x[s][sx]=(double)xx[s][sx]/xp;
}
}

for(sx=1;sx<21;sx++){
a[sx]=1;
}
b=1;

for(tr=1;tr<5000;tr++){

point=makepoint();

q=-0.05;

for(sx=1;sx<21;sx++){
v[sx]=df(point,sx)+q*dp(sx);
}


e=0;
for(sx=1;sx<21;sx++){
e=e+v[sx]*v[sx];
}
e=Math.pow(e,0.5);


for(sx=1;sx<21;sx++){
vec[sx]=v[sx]/e;
}


delta=0.01;
for(sx=1;sx<21;sx++){
a[sx]=a[sx]+vec[sx]*delta;  
}


System.out.println(f()+q*pen());

}

for(s=1;s<21;s++){
System.out.println(a[s]);
}



}

double pen(){
int m,h;
double d1;
d1=0;
for(m=1;m<datanumber+1;m++){
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)d1=d1+g(a,b,m,x);
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)d1=d1-g(a,b,m,x);
}
return d1;
}

double dp(int n){
int m,h;
double d1;
d1=0;
for(m=1;m<datanumber+1;m++){
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)d1=d1+x[m][n];
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)d1=d1-x[m][n];
}
return d1;
}

double f(){
int m,h;
double d1,mind;
mind=9999;
for(m=1;m<datanumber+1;m++){
d1=999;
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)d1=met(a,b,m,x);
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)d1=met(a,b,m,x);
if(d1<mind)mind=d1;
}
if(mind>9000)mind=0;
return mind;
}

double df(int m,int n){
double delta,m1,m2;
double[] alpha=new double[21];
int mx;
delta=0.01;
for(mx=1;mx<21;mx++){
alpha[mx]=a[mx];
}
alpha[n]=alpha[n]+delta;
m1=met(a,b,m,x);
m2=met(alpha,b,m,x);
return (m2-m1)/delta;
}

int makepoint(){
double f1,minf;
int m,h,mx;
minf=999;
mx=0;
for(m=1;m<datanumber+1;m++){
f1=9999;

h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)f1=met(a,b,m,x);
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)f1=met(a,b,m,x);

if(f1<minf)mx=m;
if(f1<minf)minf=f1;

}
return mx;
}


double met(double[] a,double b,int m,double[][] x){
double m1,m2,t,mt;
int mx;
m1=b;
for(mx=1;mx<21;mx++){
m1=m1+a[mx]*a[mx];
}
m2=-g(a,b,m,x);
t=m2/m1;
mt=t*t*m1;
mt=Math.pow(mt,0.5);
return mt;
}


void readfile(String file){

String str;
BufferedReader br;
int s;
s=0;

try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"SJIS"));  
while((str = br.readLine()) != null) {  
s=s+1;
data[s]=str;  
}
br.close();
} catch (IOException e) {System.out.println(e);}
datanumber=s;

}

double g(double[] a,double b,int m,double[][] x){
double g1;
int mx;
g1=b;
for (mx=1;mx<21;mx++){
g1=g1+a[mx]*x[m][mx];
}
return g1;
}





}
最終更新:2011年06月04日 11:32