数据挖掘—K-中心点聚类算法(Java实现)

本文介绍了K-中心点聚类算法的详细步骤,并提供了Java代码实现,包括初始化簇中心、对象分配、中心点更新等过程,直至聚类稳定。
摘要由CSDN通过智能技术生成

K-中心点聚类算法

(1)任意选择k个对象作为初始的簇中心点
(2)指派每个剩余对象给离他最近的中心点所表示的簇
(3)选择一个未被选择的中心点直到所有的中心点都被选择过
(4)选择一个未被选择过的非中心点对象,计算用代替的总代价并记录在S中
,直到所有非中心点都被选择过。
(5)如果在S中的所有非中心点代替所有中心点后的计算出总代价有小于0的存在,然后找出S中的用非中心点替代中心点后代价最小的一个,并用该非中心点替代对应的中心点,形成一个新的k个中心点的集合
(6)重复步骤2-5,直到没有再发生簇的重新分配,即所有的S都大于0.

代码

public class Cluster {
   
    private int id;// 标识
    private Point center;// 中心
    private List<Point> members = new ArrayList<Point>();// 成员

    public Cluster(int id, Point center) {
   
        this.id = id;
        this.center = center;
    }

    public Cluster(int id, Point center, List<Point> members) {
   
        this.id = id;
        this.center = center;
        this.members = members;
    }

    public void addPoint(Point newPoint) {
   
        if (!members.contains(newPoint)){
   
            members.add(newPoint);
        }else{
   
            System.out.println("样本数据点 {"+newPoint.toString()+"} 已经存在!");
        }
    }
    public float getdis() {
   
        float cur=0;
        for (Point point : members) {
   
            cur+=point.getDist()*point.getDist();
        }
        return cur;
    }
    public int getId() {
   
        return id;
    }

    public Point getCenter() {
   
        return center;
    }

    public void setCenter(Point center) {
   
        this.center = center;
    }

    public List<Point> getMembers() {
   
        return members;
    }

    @Override
    public String toString() {
   

        String toString = "-----------Cluster"+this.getId()+"---------\n";

         toString+="Mid_Point:  "+center+"  Points_num:  "+members.size();
        for (Point point : members) {
   
            toString+="\n"+point.toString();
        }
        return toString+"\n";
    }
}


public class datahandler {
   
    public static List<float[]> readTxt(String fileName){
   
        List<float[]> list=new ArrayList<>();
        try {
   
            File filename = new File(fileName); // 读取input.txt文件
            InputStreamReader reader = new InputStreamReader(
                    new FileInputStream(filename)); // 建立一个输入流对象reader
            BufferedReader br = new BufferedReader(reader);
            String line = "";
            line = br.readLine();

            while (true) {
   


                line = br.readLine();
                if(line==null) break;
                String[] temp=line.split(",");
                float[] c
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值