資源簡介
java版的kmeans實現(xiàn),可以直接運行,一個是kmeans實現(xiàn)類,一個是運行主類

代碼片段和文件信息
package?TextAnalysis.nyh.cluster.kmeans;
/*
?*?k平均聚類算法
*/
public?class?Kmeans?{
public?int[]?cluster(double?data[][]int?k)??{
//?獲得數(shù)組長度
//?取k值,作為分類數(shù)
int?dn?=?data.length;
int?dw?=?data[0].length;
//?標記數(shù)組
int?clas[]?=?new?int[dn];
//?聚類中心數(shù)組
double?center[][]?=?new?double[k][dw];
//?挑選隨機初始聚類中心
for?(int??i=?0;?i? int?rand?=?(int)(Math.random()*dn);
for?(int?j?=?0;?j? center[i][j]?=?data[rand][j];
}
}
int?iter?=?0;
while?(iter?1000)?{
//?判斷每一個數(shù)據(jù)點屬于那一類
for?(int?i?=?0;?i? double?dmin[]?=?new?double[k];
int?w1?=?0;
for?(int?j?=?0;?j? double?d1?=?0;
for?(int?ii?=?0;?ii? d1?=?d1?+?(data[i][ii]?-?center[j][ii])
*?(data[i][ii]?-?center[j][ii]);
// System.out.println(data[i][ii]+“????“+center[j][ii]+“?????“+d1);
}
dmin[j]?=?d1;
}
double?min?=?dmin[0];
for(int?j?=0;j if(min>dmin[j]){
min?=?dmin[j];
w1?=?j;
}
}
clas[i]?=?w1;//?改變類標記
}
//?重新計算聚類中心
double?knum[]?=?new?double[k];?//每類的數(shù)量
double?kd[][]?=?new?double[k][dw];//每類距離和
for?(int?i?=?0;?i? for?(int?j?=?0;?j? if?(clas[j]?==?i)?{
knum[i]?=?knum[i]?+?1;
for?(int?ii?=?0;?ii? kd[i][ii]?=?kd[i][ii]?+?data[j][ii];
}
}
}
}
for?(int?i?=?0;?i? for?(int?j?=?0;?j? center[i][j]?=?kd[i][j]?/?(knum[i]+1);
}
}
iter++;
}
return?clas;
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1247??2015-04-17?19:14??Main.java
?????文件???????1756??2015-04-17?18:17??Kmeans.java
-----------?---------??----------?-----??----
?????????????????3003????????????????????2
評論
共有 條評論