gpt4 book ai didi

java - k均值聚类算法的实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:52 24 4
gpt4 key购买 nike

在我的程序中,我将 k=2 用于 k-mean 算法,即我只需要 2 个集群。我已经以一种非常简单直接的方式实现了,但我仍然无法理解为什么我的程序会进入无限循环。谁能指导我在哪里犯了错误..?

为简单起见,我在程序代码本身中进行了输入。这是我的代码:

import java.io.*;
import java.lang.*;
class Kmean
{
public static void main(String args[])
{
int N=9;
int arr[]={2,4,10,12,3,20,30,11,25}; // initial data
int i,m1,m2,a,b,n=0;
boolean flag=true;
float sum1=0,sum2=0;
a=arr[0];b=arr[1];
m1=a; m2=b;
int cluster1[]=new int[9],cluster2[]=new int[9];
for(i=0;i<9;i++)
System.out.print(arr[i]+ "\t");
System.out.println();

do
{
n++;
int k=0,j=0;
for(i=0;i<9;i++)
{
if(Math.abs(arr[i]-m1)<=Math.abs(arr[i]-m2))
{ cluster1[k]=arr[i];
k++;
}
else
{ cluster2[j]=arr[i];
j++;
}
}
System.out.println();
for(i=0;i<9;i++)
sum1=sum1+cluster1[i];
for(i=0;i<9;i++)
sum2=sum1+cluster2[i];
a=m1;
b=m2;
m1=Math.round(sum1/k);
m2=Math.round(sum2/j);
if(m1==a && m2==b)
flag=false;
else
flag=true;

System.out.println("After iteration "+ n +" , cluster 1 :\n"); //printing the clusters of each iteration
for(i=0;i<9;i++)
System.out.print(cluster1[i]+ "\t");

System.out.println("\n");
System.out.println("After iteration "+ n +" , cluster 2 :\n");
for(i=0;i<9;i++)
System.out.print(cluster2[i]+ "\t");

}while(flag);

System.out.println("Final cluster 1 :\n"); // final clusters
for(i=0;i<9;i++)
System.out.print(cluster1[i]+ "\t");

System.out.println();
System.out.println("Final cluster 2 :\n");
for(i=0;i<9;i++)
System.out.print(cluster2[i]+ "\t");
}
}

最佳答案

你有一堆错误:

  1. do 循环开始时,您应该将 sum1sum2 重置为 0。

  2. 在计算sum1sum2时,你应该分别循环到kj(或者清除cluster1cluster2do 循环的开头。

  3. sum2 的计算中,您不小心使用了 sum1

当我进行这些修复时,代码运行良好,产生输出:

Final cluster 1 :   
2 4 10 12 3 11 0 0 0

Final cluster 2 :
20 30 25 0 0 0 0 0 0

我的一般建议:学习如何使用调试器。 Stackoverflow 不适合这样的问题:希望您能找到自己的错误,并且只有在其他一切都失败时才来这里...

关于java - k均值聚类算法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21111070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com