c均值聚类算法matlab
时间: 2023-07-04 09:28:19 浏览: 51
以下是使用Matlab实现c均值聚类算法的示例代码:
```matlab
% 数据准备
data = [1 1; 1.5 2; 3 4; 5 7; 3.5 5; 4.5 5.5; 3.5 4.5];
% 设置聚类数
k = 2;
% 随机初始化聚类中心
centers = data(randperm(size(data, 1), k), :);
% 迭代次数
max_iter = 100;
iter = 0;
% 开始迭代
while iter < max_iter
% 计算每个点属于哪个聚类
distances = pdist2(data, centers);
[~, labels] = min(distances, [], 2);
% 更新聚类中心
for i = 1:k
centers(i, :) = mean(data(labels == i, :));
end
% 检查是否收敛
if iter > 0 && all(labels == old_labels)
break;
end
% 保存上一轮聚类结果
old_labels = labels;
% 迭代次数加一
iter = iter + 1;
end
% 输出最终聚类结果
disp(labels);
```
在上面的示例代码中,我们首先准备了一个二维数据集,然后设置了聚类数为2,并随机初始化了两个聚类中心。接着,我们开始迭代,每轮迭代都计算每个点离哪个聚类中心更近,并将其分配到相应的聚类中。然后,我们更新聚类中心为每个聚类内部所有点的均值,并检查聚类结果是否收敛。如果聚类结果与上一轮相同,则认为已经收敛,停止迭代。最后,我们输出最终的聚类结果。
需要注意的是,c均值聚类算法的结果与初始聚类中心的位置有关,因此需要进行多次试验,选择最优的结果。