kmeans源代码matlab
时间: 2023-08-14 11:00:10 浏览: 65
K-means算法是一种常用的聚类算法,它的基本思想是将数据集划分为k个簇,使得每个样本点都属于距离最近的簇中心。下面是一个简单的K-means算法的MATLAB源代码实现:
```matlab
function [centroids, labels] = kmeans(data, k)
% K-means算法的MATLAB实现
[m, n] = size(data); % 数据集大小为m*n
centroids = data(randperm(m, k), :); % 随机选择k个初始簇中心
labels = zeros(m, 1); % 存储每个样本的簇标签
while true
oldLabels = labels; % 保存上一轮的簇标签
% 根据当前簇中心计算每个样本的簇标签
for i = 1:m
minDist = inf;
for j = 1:k
dist = norm(data(i, :) - centroids(j, :));
if dist < minDist
minDist = dist;
labels(i) = j;
end
end
end
% 更新簇中心,将每个簇中的样本点的均值作为新的簇中心
for i = 1:k
centroids(i, :) = mean(data(labels == i, :));
end
% 如果簇标签不再改变,则停止迭代
if isequal(labels, oldLabels)
break;
end
end
end
```
以上就是一个简单的K-means算法的MATLAB源代码实现。该算法通过随机选择初始簇中心,然后迭代以下两个步骤:将每个样本点归属于距离最近的簇中心,然后更新簇中心为每个簇中样本点的均值。迭代直到簇标签不再改变为止,最终得到每个样本的簇标签和最终的簇中心。