• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: Java
  • 标签: kmeans  java  

资源简介

java版的kmeans实现,可以直接运行,一个是kmeans实现类,一个是运行主类

资源截图

代码片段和文件信息

package TextAnalysis.nyh.cluster.kmeans;
/*
 * k平均聚类算法
*/
public class Kmeans {
public int[] cluster(double data[][]int k)  {
// 获得数组长度
// 取k值,作为分类数
int dn = data.length;
int dw = data[0].length;
// 标记数组
int clas[] = new int[dn];
// 聚类中心数组
double center[][] = new double[k][dw];
// 挑选随机初始聚类中心
for (int  i= 0; i < k; i++) {
int rand = (int)(Math.random()*dn);
for (int j = 0; j < dw; j++) {
center[i][j] = data[rand][j];
}
}
int iter = 0;
while (iter < 1000) {
// 判断每一个数据点属于那一类
for (int i = 0; i < dn; i++) {
double dmin[] = new double[k];
int w1 = 0;
for (int j = 0; j < k; j++) {
double d1 = 0;
for (int ii = 0; ii < dw; 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]; //每类的数量
double kd[][] = new double[k][dw];//每类距离和
for (int i = 0; i < k; i++) {
for (int j = 0; j < dn; j++) {
if (clas[j] == i) {
knum[i] = knum[i] + 1;
for (int ii = 0; ii < dw; ii++) {
kd[i][ii] = kd[i][ii] + data[j][ii];
}
}
}
}
for (int i = 0; i < k; i++){
for (int j = 0; j < dw; 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


评论

共有 条评论