kmeans的matlab具体代码
时间: 2023-10-10 12:16:06 浏览: 35
下面是一个简单的kmeans算法的MATLAB代码实现:
假设我们有一个数据集X,其中每个数据点都是一个二维向量,我们希望将这些向量分为K个簇。
```matlab
% 生成样本数据
X = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 初始化kmeans算法
K = 2; % 簇的数量
max_iters = 10; % 最大迭代次数
% 随机选择K个样本作为初始质心
initial_centroids = X(randperm(size(X,1), K), :);
% 迭代寻找最优质心
for i=1:max_iters
% 计算每个样本到质心的距离
dist = pdist2(X, initial_centroids);
% 找到每个样本所属的簇
[~, idx] = min(dist, [], 2);
% 重新计算质心
for k=1:K
initial_centroids(k,:) = mean(X(idx==k,:));
end
end
% 可视化结果
figure;
plot(X(idx==1,1), X(idx==1,2), 'ro');
hold on;
plot(X(idx==2,1), X(idx==2,2), 'go');
plot(initial_centroids(:,1), initial_centroids(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
legend('Cluster 1', 'Cluster 2', 'Centroids');
title('K-means Clustering');
```
这段代码将生成一个包含200个二维数据点的数据集X,然后使用K-means算法将这些数据点分为2个簇。我们可以通过修改K的值来改变簇的数量,并通过修改max_iters的值来改变最大迭代次数。