kmeans的matlab代码实现
时间: 2023-12-15 08:04:08 浏览: 103
K-means算法是一种经典的聚类算法,它将数据样本划分为若干个簇,使得同一簇内的数据点相似度较高,不同簇之间的相似度较低。在MATLAB中,实现K-means算法可以使用自带的kmeans函数或者手写代码实现。以下是一个基本的K-means聚类MATLAB代码实现:
1. 首先,从数据集中随机选择K个点作为初始聚类中心。
2. 然后,对于每个数据点,计算其与各个聚类中心的距离,将其划分到距离最近的聚类中心对应的簇中。
3. 接着,重新计算每个簇的聚类中心,即取每个簇中所有点的平均值。
4. 重复步骤2和3,直到聚类中心不再发生变化或达到最大迭代次数为止。
实现代码示例:
```
data = load('your_data_file.mat'); % 读入数据集
K = 3; % 设定聚类簇数为3
max_iters = 10; % 设定最大迭代次数为10
[m, n] = size(data);
centroids = data(randperm(m, K), :); % 随机初始化聚类中心
for i = 1:max_iters
% 计算每个样本点到聚类中心的距离
distances = zeros(m, K);
for j = 1:K
distances(:, j) = sum((data - centroids(j, :)).^2, 2);
end
% 将每个样本点划分到距离最近的聚类中心对应的簇中
[~, idx] = min(distances, [], 2);
% 重新计算每个簇的聚类中心
for j = 1:K
centroids(j, :) = mean(data(idx == j, :), 1);
end
end
% 显示聚类结果
figure;
gscatter(data(:, 1), data(:, 2), idx, 'rgb');
hold on;
plot(centroids(:, 1), centroids(:, 2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids', 'Location', 'best');
title('K-means Clustering Results');
```
这段代码实现了从数据集中读入数据,设定聚类簇数,初始化聚类中心,计算每个样本点到聚类中心的距离,将每个样本点划分到对应的簇中,重新计算每个簇的聚类中心,直到满足停止条件为止。最后,可以用gscatter函数将聚类结果可视化出来。
阅读全文