请给我kmeans聚类算法matlab代码可以实现可视化和各元素所属类
时间: 2024-02-11 12:08:09 浏览: 58
当然,以下是基于MATLAB实现K-Means聚类算法的代码,包含了可视化和各元素所属类的功能:
```matlab
clc;
clear;
close all;
% 载入数据
load fisheriris.mat;
data = meas;
% 初始化参数
k = 3; % 聚类数目
maxIter = 10; % 最大迭代次数
[n, d] = size(data); % 样本数和维度
labels = zeros(n, 1); % 样本标签
% 初始化聚类中心
minData = min(data);
maxData = max(data);
centers = rand(k, d) .* (maxData - minData) + minData;
% 迭代聚类
for iter = 1:maxIter
% 计算样本与聚类中心的距离
distance = zeros(n, k);
for i = 1:n
for j = 1:k
distance(i, j) = norm(data(i, :) - centers(j, :));
end
end
% 分配样本到最近的聚类中心
[~, minIndex] = min(distance, [], 2);
if iter == 1
scatter(data(:, 1), data(:, 2), 10, minIndex, 'filled');
title('Initial Clustering');
xlabel('Sepal Length');
ylabel('Sepal Width');
hold on;
scatter(centers(:, 1), centers(:, 2), 100, 'k', 'filled', 'd');
hold off;
pause(1);
end
% 更新聚类中心
for i = 1:k
centers(i, :) = mean(data(minIndex == i, :));
end
% 判断是否收敛
if iter > 1 && isequal(labels, minIndex)
break;
end
labels = minIndex;
% 可视化聚类结果
scatter(data(:, 1), data(:, 2), 10, labels, 'filled');
title(['Clustering Iteration ' num2str(iter)]);
xlabel('Sepal Length');
ylabel('Sepal Width');
hold on;
scatter(centers(:, 1), centers(:, 2), 100, 'k', 'filled', 'd');
hold off;
pause(1);
end
% 显示结果
disp(['Final labels: ' num2str(labels')]);
```
在这个代码中,我们使用了 `fisheriris` 数据集,初始化了聚类中心,计算了样本与聚类中心的距离,将样本分配到最近的聚类中心,更新聚类中心,可视化了聚类结果,并判断是否收敛。最后,输出了样本的标签(即所属的聚类)。
阅读全文