数据挖掘k-means聚类算法JAVA模拟

本文介绍了一个使用Java实现的k-means聚类算法的示例项目。作者为了免考,选择了编写程序来模拟课本中的k-means算法。算法流程包括选择初始中心点,计算点到簇中心的距离,分配点到最近的簇,迭代更新簇中心直至收敛。项目包含了表示坐标点的类,以及三个面板展示坐标点、算法结果和坐标轴。文章提供了程序的截图和源代码下载链接。
摘要由CSDN通过智能技术生成

一个用java实现的模拟数据挖掘算法k-means的demo。因为老湿说期末如果能自己编写程序模拟课本中的任意算法,通过答辩就可以不用考试。对于我这种不规矩的学生,能不考试当然选择不考了。

进入正题:k-means聚类算法,简单点说就是给定N个坐标点,然后在其中选择k个点做为k个簇的初始中心点,然后计算所有点到各个簇的中心点的距离,将点分配到最近的簇,然后重新计算k个簇的新中心点,然后继续迭代,直到k个簇的中心点不再变化。

先来说下数据结构:

首先定义一个类用于表示坐标点,并且定义和点相关的方法:

//定义一个类用于表示每个坐标点
class Point{
	String name;
	double x,y;
	public Point(String name,double x,double y){
		this.name=name;
		this.x=x;
		this.y=y;
	}
	public Point(){
	}
 //计算两个坐标点之间的距离
	public static double distance(Point a,Point b){
		return Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
	}	
 //计算每个坐标点距离哪个簇最近
	public static int ClusterDistance(Point p,ArrayList<Cluster> array){
        int a=0;
		for(int i=0;i<array.size();i++){
			if(Point.distance(p,array.get(a).center)>Point.distance(p, array.get(i).center)){
				a=i;
			}
		}
		return a;	
	}
 //将double数组中的所有坐标点存入Point数组中
   public static void PointAdd(ArrayList<Point> PointArray,  ArrayList<double[]> DoubleArray){
	  for(int i=0;i<DoubleArray.size();i++){
		  PointArray.add(new Point("p"+(i+1),DoubleArray.get(i)[0],DoubleArray.get(i)[1]));
	  }
   }
}
定义一个类用于表示簇以及相关的方法:
 //定义一个类用于表示簇
class Cluster{
 public Cluster(double x,double y){
	 center.x=x;
	 center.y=y;
 }
 //计算簇的新中心点坐标
 public static void NewCenter(Cluster cluster){
	  double sumx=0,sumy=0;
	  int i=0;
	 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值