K-means 聚类是一种非常流行的无监督学习算法,用于将数据点划分为 K 个不
同的簇或群组。该算法通过迭代的方式将数据点分配给最近的质心,并重新计
算质心的位置,直到质心的位置不再显著变化或达到预定的迭代次数。
以下是 K-means 聚类算法的基本步骤:
1. 初始化:选择 K 个数据点作为初始质心。这些质心可以是随机选择的,
也可以是某种启发式方法选择的。
2. 分配数据点到最近的质心:对于每个数据点,计算它到所有质心的距
离,并将其分配给距离最近的质心所在的簇。
3. 重新计算质心:对于每个簇,计算所有数据点的均值,并将该均值设置
为新的质心。
4. 迭代:重复步骤 2 和 3,直到满足某个停止条件(例如,质心的位置变
化小于某个阈值,或者达到预定的迭代次数)。
5. 输出:返回最终的质心和每个数据点的簇分配
MATLAB 代码如下:
clc;close all;clear all;warning off;%清除变量
% 随机产生数据
rng(1); % 设置随机种子以确保结果的可重复性
n_samples = 300;
n_clusters = 3;
dims = 2;
% 为每个簇生成随机数据点
data = [];
for i = 1:n_clusters
% 每个簇的中心点位置
center = [(-2 + 4*(i-1)), (-2 + 4*(mod(i, 2)+1))];
% 生成正态分布的数据点
cluster_data = repmat(center,n_samples/n_clusters,1) +
randn(n_samples/n_clusters, dims);
data = [data; cluster_data];
end
% K-means 算法
% 随机初始化质心
centroids = data(randperm(n_samples, n_clusters), :);
max_iter = 100;
tol = 1e-4;