一.初始化聚类中心
根据题目要求,直接从数据点中取前 k 个点作为初始中心:
centers[0..k-1] = nums[0..k-1]。
二.重复迭代(最多 max_iter 次) 每次迭代分为两步:
1)分配簇标签(Assignment Step)
对于每个点 nums[i] = (xi, yi):
实现一个二维数据的 K-Means 聚类算法。
给定:
n 表示数据点数量;k 表示聚类数;max_iter 表示最大迭代次数;nums,其中 nums[i] = [xi, yi] 表示第 i 个二维数据点的坐标。你需要对 nums 中的 n 个点进行 K-Means 聚类,将它们划分为 k 个簇。在聚类过程中,允许最多进行 max_iter 次迭代(如果在此之前收敛则可以提前停止)。初始聚类中心:从数据点中选择读入进来的前 k 个点作为初始中心。
算法结束后,需要返回两个结果:
k 的二维数组,表示最终的聚类中心坐标,形式为[[x1, y1], [x2, y2], ..., [xk, yk]]。n 的整数数组,表示每个数据点所属的聚类标签,标签范围为 [0, k - 1],顺序与 nums 中数据点的顺序一致。注意:保留4位小数,误差容忍度 1e-3
输入:
n = 4 , k = 2 , max_iter = 100
nums = [[1.0,1.0],[1.5,2.0],[5.0,8.0],[8.0, 8.0]]
输出:
[[1.25,1.5],[6.5,8.0]]
[0,0,1,1]
数据范围:
1 <= n <= 2 * 10^4
1 <= k <= 20
1 <= max_iter <= 100
-1e4 <= nums[i][0], nums[i][1] <= 1e4