利用Java实现KMeans聚簇算法

        与分类、序列标注等任务不同,聚类是在事先并不知道任何样本标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高,不同类别之间的样本相似度低(即增大类内聚,减少类间距)。

        聚类属于非监督学习,K均值聚类是最基础常用的聚类算法。它的基本思想是,通过迭代寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的损失函数最小。

        通俗来说,聚类就是把一些点(以二维坐标系为例)选取适当的中心将这些点进行分类。

那么我们如何使用Java来实现该算法的实现,这里以一些随机生成的二维坐标轴点为例。

首先,我们在IDEA下新建软件包,KMeansTest,然后新建类KMeans和类KMeansMethod以及文本文件result用于存放生成的点以及对应的聚簇中心点。

在KMeans类中编写程序的主函数和主运行逻辑,KMeansMethod中具体实现主函数中需要用的方法。

首先,我们需要获取对应的随机生成的点集

编写生成点集的函数前,我们需要编写代码用于生成随机点,这里我们为了方便,将每个点的x与y值设置为不大于100的正整数。

生成随机点的函数getInts()代码如下

// 生成随机点
    private static int[] getInts(){
        int[] ints = new int[2];
        Random random = new Random();
        ints[0] = random.nextInt(100);
        ints[1] = random.nextInt(100);
        return ints;
    }

生成随机点集的函数getPoints(int n)的代码如下,n为生成点的数量

    // 获取点的集合
    public static int[][] getPoints(int n) {
        int[][] points = new int[n][];
        for (int i = 0; i < n; i++) {
            points[i] = getInts();
        }
        return points;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值