k-means聚类算法迭代 matlab
时间: 2023-06-16 09:03:28 浏览: 105
以下是用 MATLAB 实现 k-means 聚类算法迭代的示例代码:
```matlab
% 设定数据集和聚类数
data = [1 1; 1.5 2; 3 4; 5 7; 3.5 5; 4.5 5; 3.5 4.5];
k = 2;
% 随机初始化聚类中心
centroids = data(randperm(size(data, 1), k), :);
% 迭代聚类过程
iter_count = 0;
while true
% 计算每个点到每个聚类中心的距离
distances = pdist2(data, centroids);
% 分配每个点到最近的聚类中心,并计算新的聚类中心
[min_distances, cluster_indices] = min(distances, [], 2);
new_centroids = zeros(k, size(data, 2));
for i = 1:k
new_centroids(i, :) = mean(data(cluster_indices == i, :), 1);
end
% 判断聚类中心是否变化
if isequal(centroids, new_centroids)
break;
end
% 更新聚类中心并计数
centroids = new_centroids;
iter_count = iter_count + 1;
end
% 输出聚类结果和迭代次数
fprintf('聚类结果:\n');
disp(cluster_indices);
fprintf('迭代次数:%d\n', iter_count);
```
该代码中,首先设定了数据集 `data` 和聚类数 `k`,然后随机初始化了 `k` 个聚类中心。接着进入迭代聚类过程,该过程包含两个步骤:
1. 计算每个点到每个聚类中心的距离。
2. 分配每个点到最近的聚类中心,并计算新的聚类中心。
迭代过程会一直进行,直到聚类中心不再变化为止。最后输出聚类结果和迭代次数。
需要注意的是,该示例代码只适用于二维数据集,如果数据集的维度更高,需要对代码进行相应的修改。另外,在实际应用中,需要根据具体情况选择合适的聚类数和初始聚类中心,否则可能会影响聚类效果。
阅读全文