matlab kmenas聚类
时间: 2023-11-02 09:17:01 浏览: 51
MATLAB 中的 k-means 是一种常见的聚类算法,可以将数据集划分为 k 个簇。以下是一个简单的 k-means 聚类的例子:
假设有一个包含 n 个样本的数据集 X,其中每个样本具有 m 个特征。我们要将这些样本划分为 k 个簇,使得同一个簇内的样本相似度较高,不同簇之间的相似度较低。
1. 初始化 k 个聚类中心,可以采用随机选取的方法,或者通过一些启发式算法选取。
2. 对于每个样本,计算它与 k 个聚类中心的距离,然后将它分配到距离最近的簇中。
3. 对于每个簇,重新计算它的聚类中心,即将该簇中所有样本的特征取平均值。
4. 重复步骤 2 和步骤 3,直到聚类中心不再发生变化或达到最大迭代次数。
下面是一个 MATLAB 实现的示例:
```matlab
% 生成随机数据集
data = randn(100, 2);
% 设置聚类的个数
k = 3;
% 初始化聚类中心
centers = randn(k, 2);
% 最大迭代次数
max_iter = 100;
for i = 1:max_iter
% 计算每个样本与聚类中心的距离
dist = pdist2(data, centers);
% 将每个样本分配到距离最近的簇中
[~, label] = min(dist, [], 2);
% 更新聚类中心
for j = 1:k
centers(j, :) = mean(data(label == j, :));
end
% 判断是否收敛
if i > 1 && norm(centers - old_centers) < 1e-6
break;
end
old_centers = centers;
end
% 绘制聚类结果
colors = 'rgb';
figure;
hold on;
for j = 1:k
plot(data(label == j, 1), data(label == j, 2), [colors(j) 'o']);
end
plot(centers(:, 1), centers(:, 2), 'kx', 'MarkerSize', 10, 'LineWidth', 2);
title('k-means Clustering');
```
在这个示例中,我们首先生成了一个包含 100 个样本的二维数据集。然后,我们设置要划分的聚类个数为 3,随机初始化了 3 个聚类中心。接着,我们通过迭代计算每个样本与聚类中心的距离,并将每个样本分配到距离最近的簇中。然后,我们根据分配结果更新每个簇的聚类中心。重复这个过程直到收敛或达到最大迭代次数。最后,我们将聚类结果绘制出来,其中不同的簇用不同的颜色表示,聚类中心用黑色十字表示。
阅读全文