非监督聚类分析是一种常见的模式识别方法,用于将数据划分为不同的类别,而无需事先知道数据的类别标签。
1. K-Means 聚类
原理
K-Means 是一种基于划分的聚类算法,目标是将数据划分为 ( K ) 个簇,使得簇内数据的相似度高,簇间数据的相似度低。算法通过迭代优化簇中心(质心)和簇成员,最小化簇内平方和(Within-Cluster Sum of Squares, WCSS)。
步骤
- 随机选择 ( K ) 个数据点作为初始簇中心。
- 将每个数据点分配到最近的簇中心。
- 更新每个簇的中心为该簇所有数据点的均值。
- 重复步骤 2 和 3,直到簇中心不再变化或达到最大迭代次数。
MATLAB 实现
matlab
% 示例数据
data = rand(100, 2); % 生成随机数据
% 聚类参数
K = 3; % 簇的数量
% K-Means 聚类
[idx, C] = kmeans(data, K);
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx, 'rgb', 'o', 10);
hold on;
plot(C(:,1), C(:,2), 'kx', 'MarkerSize', 12, 'LineWidth', 2);
legend('簇 1', '簇 2', '簇 3', '簇中心');
title('K-Means 聚类结果');
hold off;
2. 层次聚类(Hierarchical Clustering)
原理
层次聚类是一种基于层次的聚类方法,可以生成一个嵌套的簇结构。它有两种主要形式:
- 凝聚型层次聚类:从单个数据点开始,逐步合并最相似的簇。
- 分裂型层次聚类:从一个包含所有数据点的簇开始,逐步分裂成更小的簇。
MATLAB 实现
matlab
% 示例数据
data = rand(100, 2); % 生成随机数据
% 层次聚类
Z = linkage(data, 'ward'); % 使用 Ward 方法
T = cluster(Z, 'Maxclust', 3); % 将数据划分为 3 个簇
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), T, 'rgb', 'o', 10);
title('层次聚类结果');
3. DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
原理
DBSCAN 是一种基于密度的聚类算法,能够发现任意形状的簇,并且可以识别噪声点。它通过两个参数控制:
- ε(Epsilon):邻域半径。
- MinPts:成为核心点所需的最小邻域点数。
MATLAB 实现
MATLAB 自带的 dbscan 函数可以实现 DBSCAN 聚类:
matlab
% 示例数据
data = rand(100, 2); % 生成随机数据
% DBSCAN 聚类
epsilon = 0.15; % 邻域半径
minpts = 5; % 最小邻域点数
[idx, isnoise] = dbscan(data, epsilon, minpts);
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx, 'rgbk', 'o', 10);
hold on;
plot(data(isnoise, 1), data(isnoise, 2), 'kx', 'MarkerSize', 10, 'LineWidth', 2);
legend('簇 1', '簇 2', '簇 3', '噪声');
title('DBSCAN 聚类结果');
hold off;
4. 谱聚类(Spectral Clustering)
原理
谱聚类是一种基于图论的聚类方法,通过数据的相似性矩阵构建图的拉普拉斯矩阵,然后通过特征分解将数据映射到低维空间,最后在低维空间中进行 K-Means 聚类。
MATLAB 实现
matlab
% 示例数据
data = rand(100, 2); % 生成随机数据
% 构建相似性矩阵
sigma = 0.1; % 高斯核的宽度
n = size(data, 1);
W = zeros(n);
for i = 1:n
for j = 1:n
W(i, j) = exp(-norm(data(i,:) - data(j,:))^2 / (2 * sigma^2));
end
end
% 构建拉普拉斯矩阵
D = diag(sum(W, 2));
L = D - W;
% 特征分解
[V, D] = eig(L);
[~, idx] = sort(diag(D));
V = V(:, idx(1:2)); % 取最小的两个特征向量
% 使用 K-Means 聚类
[idx, ~] = kmeans(V, 3);
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx, 'rgb', 'o', 10);
title('谱聚类结果');
5. Gaussian Mixture Model(高斯混合模型)
原理
高斯混合模型是一种基于概率模型的聚类方法,假设数据是由多个高斯分布的混合生成的。通过期望最大化(EM)算法估计模型参数。参考代码 模式识别,非监督聚类分析分类方法 www.youwenfan.com/contentcso/97427.html
MATLAB 实现
matlab
% 示例数据
data = rand(100, 2); % 生成随机数据
% 高斯混合模型
K = 3; % 簇的数量
gmm = fitgmdist(data, K);
% 聚类
idx = cluster(gmm, data);
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx, 'rgb', 'o', 10);
title('高斯混合模型聚类结果');
总结
是非监督聚类分析中常见的几种方法及其 MATLAB 实现。每种方法都有其适用场景:
- K-Means:适用于簇形状较为规则的情况。
- 层次聚类:适用于需要层次结构的聚类。
- DBSCAN:适用于簇形状不规则且存在噪声的情况。
- 谱聚类:适用于簇形状复杂的情况。
- 高斯混合模型:适用于数据符合高斯分布的情况。
你可以根据具体问题选择合适的聚类方法。