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

一个用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;
	 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值