matlab手写实现kmeans聚类算法
时间: 2023-10-29 15:47:18 浏览: 109
以下是MATLAB手写实现kmeans聚类算法的代码:
function [idx, C] = my_kmeans(X, k, max_iter)
% X: 数据矩阵,每行表示一个样本,每列表示一个特征
% k: 聚类簇数
% max_iter: 最大迭代次数
% idx: 每个样本所属的簇编号
% C: 聚类中心
% 初始化聚类中心
[m, n] = size(X);
C = X(randperm(m, k), :);
% 迭代更新聚类中心和样本所属簇
for iter = 1 : max_iter
% 计算每个样本距离每个聚类中心的距离
dist = pdist2(X, C);
% 选择距离最近的聚类中心作为样本所属簇
[~, idx] = min(dist, [], 2);
% 更新聚类中心
for i = 1 : k
C(i, :) = mean(X(idx == i, :), 1);
end
end
end
使用示例:
% 生成数据
X = [randn(100, 2) + 2; randn(100, 2) - 2; randn(100, 2)];
% 聚类簇数
k = 3;
% 最大迭代次数
max_iter = 100;
% 调用kmeans函数
[idx, C] = my_kmeans(X, k, max_iter);
% 绘制聚类结果图
figure;
scatter(X(:, 1), X(:, 2), [], idx);
hold on;
scatter(C(:, 1), C(:, 2), [], [1:k], 'filled');
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids');
xlabel('Feature 1');
ylabel('Feature 2');
title('K-Means Clustering');
阅读全文