k均值聚类算法matlab
时间: 2023-07-08 13:49:27 浏览: 152
K均值聚类算法 matlab
5星 · 资源好评率100%
k均值聚类算法是一种常见的聚类算法,可以使用Matlab进行实现。以下是一份简单的Matlab代码实现k均值聚类算法:
```matlab
% 输入数据
data = [1, 1; 1.5, 2; 3, 4; 5, 7; 3.5, 5; 4.5, 5; 3.5, 4.5];
K = 2; % 聚类数
[m, n] = size(data); % 数据维度和数据点个数
% 初始化聚类中心
center = zeros(K, n);
index = randperm(m, K);
for i = 1:K
center(i, :) = data(index(i), :);
end
% 迭代求解聚类中心
max_iter = 100; % 最大迭代次数
iter = 0;
while iter < max_iter
iter = iter + 1;
% 分配样本到聚类中心
cluster = cell(K, 1);
for i = 1:m
dist = zeros(K, 1);
for j = 1:K
dist(j) = norm(data(i, :) - center(j, :));
end
[~, idx] = min(dist);
cluster{idx} = [cluster{idx}; data(i, :)];
end
% 更新聚类中心
for i = 1:K
center(i, :) = mean(cluster{i}, 1);
end
end
% 可视化结果
figure;
hold on;
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k'];
for i = 1:K
scatter(cluster{i}(:, 1), cluster{i}(:, 2), 36, colors(i), 'filled');
end
scatter(center(:, 1), center(:, 2), 100, 'k', 'filled', 'd');
title('k-means clustering');
```
代码中的输入数据是一个二维数组,每一行代表一个数据点,K表示聚类数。该代码使用随机选择的方式初始化聚类中心,然后通过迭代不断更新聚类中心和分配样本到聚类中心,最终得到聚类结果并可视化。
阅读全文