matlab手写实现kmeans聚类算法
时间: 2023-10-22 10:17:19 浏览: 73
以下是一个简单的 MATLAB 实现 K-Means 聚类算法的示例代码:
```
% 加载数据
data = load('data.txt');
% 设置聚类数和迭代次数
k = 3;
max_iters = 10;
% 随机初始化聚类中心
centroids = initCentroids(data, k);
% 迭代优化聚类中心
for i=1:max_iters
% 计算每个样本点与聚类中心的距离
idx = findClosestCentroids(data, centroids);
% 更新聚类中心
centroids = computeCentroids(data, idx, k);
end
% 绘制聚类结果
plotDataPoints(data, idx, k);
% 初始化聚类中心
function centroids = initCentroids(X, k)
randidx = randperm(size(X, 1));
centroids = X(randidx(1:k), :);
end
% 计算每个样本点与聚类中心的距离
function idx = findClosestCentroids(X, centroids)
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
m = size(X,1);
for i=1:m
distance = zeros(K, 1);
for j=1:K
distance(j) = sum((X(i,:) - centroids(j,:)).^2);
end
[~, idx(i)] = min(distance);
end
end
% 更新聚类中心
function centroids = computeCentroids(X, idx, k)
[m n] = size(X);
centroids = zeros(k, n);
for i=1:k
centroids(i,:) = mean(X(idx==i,:));
end
end
% 绘制聚类结果
function plotDataPoints(X, idx, K)
colors = 'rgb';
markers = 'ov+';
for i=1:K
plot(X(idx==i,1), X(idx==i,2), strcat(colors(i), markers(i)), 'MarkerSize', 7);
hold on;
end
hold off;
end
```
阅读全文