1.代码
% 加载 fisheriris 数据集
load fisheriris
% 提取特征
meas = meas;
% K-Means 算法
k = 3;
[idx_kmeans, C_kmeans] = kmeans(meas, k);
visualizeClusters(meas, idx_kmeans, C_kmeans, 'K-Means');
% K-Means++ 初始化
opts = statset('Display','iter');
[idx_kmeanspp, C_kmeanspp] = kmeans(meas, k, 'Options', opts, 'Start', 'plus');
visualizeClusters(meas, idx_kmeanspp, C_kmeanspp, 'K-Means++');
% Gaussian Mixture Model (GMM)
gm = fitgmdist(meas, k);
idx_gmm = cluster(gm, meas);
C_gmm = gm.mu;
visualizeClusters(meas, idx_gmm, C_gmm, 'GMM');
% 层次聚类(使用 'linkage')
Z = linkage(meas, 'average');
dendrogram(Z);
title('Hierarchical Clustering Dendrogram');
xlabel('Sample index');
ylabel('Distance');
% 使用 'cluster' 函数从层次聚类中提取 k 个聚类
idx_hierarchical = cluster(Z, k);
C_hierarchical = arrayfun(@(n) mean(meas(idx_hierarchical == n, :), 1), 1:k, 'UniformOutput', false);
visualizeClusters(meas, idx_hierarchical, vertcat(C_hierarchical{:}), 'Hierarchical Clustering');
% 可视化函数
function visualizeClusters(data, idx, centers, titleStr)
figure;
gscatter(data(:,1), data(:,2), idx);
hold on;
plot(centers(:,1), centers(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
hold off;
xlabel('Feature 1');
ylabel('Feature 2');
title(titleStr);
end
% 注意:对于 DBSCAN、BIRCH、FCM、ISODATA、canopy、kshape、谱聚类和图团体检测等方法
% MATLAB 可能没有直接内置的函数。你可能需要查找第三方实现或使用其他工具包,
% 或者自行实现这些算法。这些高级聚类方法的实现通常比较复杂,超出了简单示例代码的范围。
2.运行结果
图2-1
iter phase num sum 1 1 150 122.183 2 1 9 103.215 3 1 10 90.9739 4 1 11 81.1761 5 1 3 79.5415 6 1 3 78.8514 距离的最佳总和 = 78.8514
图2-2
图2-3
图2-4
图2-5