?? lbg.~jav
字號(hào):
public class LBG extends Object {
double c[][];//重心
int indexc[];
int indext[];
double d[];//距離(歪)
public LBG(double t[][],int N) {
double e=0.001;
double td0=0;//上次總歪
double td;//本次總歪
double d0=999999.9;
double s,s1;
boolean notend=true;
c=new double[N][t[0].length];//重心數(shù)組
indexc=new int[N];//重心索引
indext=new int[t.length];//確定樣本t的分類
d=new double[N];//類組的歪
for (int i=0;i<N;i++)
{
indexc[i]=i; //確定初始重心為樣本1-N
for(int j=0;j<t[0].length;j++)
c[i][j]=t[indexc[i]][j];
}
while (notend){
//決定勢(shì)力圈
for (int i=0;i<t.length;i++)//遍歷數(shù)據(jù)
{ d0=9999999.9;
for (int j=0;j<N;j++)//遍歷類
{s=0.0;
for (int k=0;k<t[0].length;k++)
s+=(t[i][k]-c[j][k])*(t[i][k]-c[j][k]);
s=Math.sqrt(s);
if (s<d0){
d0=s;
indext[i]=j;}
} //end for j
}//end for i
//決定新的重心
for (int i=0;i<N;i++)
{d[i]=999999.0;
s=0;
for (int j=0;j<t.length;j++)
if (indext[j]==i)
{d0=0.0;
for (int k=0;k<t.length;k++)
{if ((indext[k]==i)&&(j!=k))
//if (indext[k]==i)
{ s=0;
for (int l=0;l<t[0].length;l++)
s+=(t[j][l]-t[k][l])*(t[j][l]-t[k][l]);
s=Math.sqrt(s);
}
}//end for k
d0+=s;
if (d0==0.0)
d0=0.1;
//if ((d0<d[i])&&(d0!=0.0)){
if (d0<d[i]){
d[i]=d0;
indexc[i]=j;
for(int m=0;m<t[0].length;m++)
c[i][m]=t[indexc[i]][m];
}
}//end for j
}//end i
//計(jì)算總歪
td=0;
for (int i=0;i<N;i++)
td+=d[i];
if (Math.abs(td-td0)<e)
notend=false;
else
td0=td;
}//end while
}//end LBG
public double[][] getc(){
return this.c;
}
public double[] getd(){
return this.d;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -