Java--K-Means算法的Java简单实现

算法说明:

(每次运行都会生成新的样本点,若想要固定的样本点,可在第二次运行时不执行createData方法)
1、使用方法:在Run类的main方法里面新建KMeans对象,并依次调用createData、getData、sort方法
2、首先会随机生成训练样本,写入文件data.txt,并读取保存在data数组里面
3、用随机数随机选出K个初始的中心点
4、计算所有点到K个中心点的距离,选出距离最近的那个点,将其归属于该中心点的一类,完成后会将样本点分成K类
5、计算每一类样本点的平均值,平均值为每一类新的中心点
6、重复4、5步骤,直到收敛(到达迭代次数或两次迭代得到的中心点一致)

实现部分

import java.io.*;
import java.util.ArrayList;
import java.util.Random;

public class KMeans {
   
    double[][] data = new double[500][2];//从文件中读取的数据集
    private int K;//分成几类?
    private int iterateTime;//迭代次数
    boolean isSameAsLastTime;//阈值,当两次找到的中心点一致时,停止迭代

    public KMeans(int k,int iterateTime) {
   
        K = k;
       this.iterateTime = iterateTime;
    }


    //开始分类
    public void sort() {
   
        double[][] center = new double[K][2];//中心点
        double[] distance = new double[K];//该点到N个中心点的距离

        //N个装着数组的列表
        ArrayList<ArrayList<double[]>> sortData = new ArrayList<>();

        //获取初始中心点
        for(int i=0;i<K;i++){
   
            center[i][0]=data[new Random().nextInt(100)][0];
            center[i][1]=data[new Random().nextInt(100)][1];
            sortData.add(new ArrayList<double[]>());
            System.out.println("初始"+i+"中心点:"
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值