数学原理: K-Means 是一种基于划分的聚类算法,旨在将数据集划分为 K 个簇。它通过初始化 K 个质心,然后迭代地执行两个步骤:(a) 将每个数据点分配给最近的质心,从而形成簇;(b) 更新每个簇的质心为簇内数据点的均值。 创新点: 算法的简洁性和高效性。K-Means 非常适合处理大型数据集,因为它的复杂度相对较低。
数学原理:K-means++ 是对经典K-means算法的一个改进,主要创新在于初始质心的选择方法。在传统的K-means中,初始质心通常是随机选择的,这可能导致不理想的聚类结果。K-means++通过一种更精细的策略选择初始质心,以增加产生更优聚类结果的可能性。具体来说,它首先随机选择一个数据点作为第一个质心,然后根据数据点到已选择质心的距离的概率分布来选择接下来的质心。 创新点:通过优化初始质心的选择过程,K-means++能够提高聚类的质量和算法的稳定性。它减少了陷入局部最优的可能性,并且通常能够加快算法的收敛速度。
数学原理:轮廓系数是评估聚类效果的一种度量方法,它结合了聚类的紧密性和分离性。对于每个数据点,计算其与所在簇内其他点的平均距离(紧密性)和与最近的非所在簇的所有点的平均距离(分离性)。轮廓系数是分离性和紧密性之差与它们之间的最大值的比率。在优化K-means聚类时,可以使用轮廓系数作为一个指标来确定最佳的簇数量或评估不同的聚类配置。 创新点:使用轮廓系数优化K-means聚类使得簇的选择不仅依赖于算法的内在迭代过程,还结合了一个明确的聚类效果评估指标。提高了聚类结果的有效性,特别是在簇数量不是预先确定的情况下。
数学原理: FCM 是一种模糊聚类算法,允许单个数据点以不同的隶属度属于多个簇。它通过迭代优化隶属度和簇中心来减少目标函数,该函数是簇中心和数据点之间距离的加权和。 创新点: 引入模糊概念,与 K-Means 的硬划分不同,FCM 通过隶属度提供了更多灵活性,适用于数据结构不清晰或重叠的情况。
DBSCAN密度聚类:
数学原理: DBSCAN 是一种基于密度的聚类算法。它通过识别被低密度区域分隔的高密度区域来形成簇。核心概念包括核心点、边界点和噪声点。 创新点: 能够识别任意形状的簇,并能有效处理噪声点。它不需要预先指定簇的数量。
数学原理: 类似于 K-Means,但更加灵活。ISODATA 考虑簇的合并和分裂,允许簇数量在迭代过程中动态变化。 创新点: 能够自适应调整簇的数量,适用于对簇数量不确定的情况。
数学原理: 基于图理论,将数据点看作图中的节点。算法首先构建一个相似度图,然后基于图的拉普拉斯矩阵的特征向量进行聚类。 创新点: 能够捕捉数据的复杂结构,尤其是非球形的簇。谱聚类对于特定类型的数据非常有效。
数学原理: GMM 是一种基于概率的聚类方法,它假设数据是从若干个高斯分布的混合生成的。每个簇由一个高斯分布表示,参数通过最大化似然估计或期望最大化(EM)算法进行优化。 创新点: 提供了软聚类方法,每个数据点属于每个簇的概率可以计算出来。适用于估计簇的形状和大小。
数学原理:AHC 是一种自底向上的层次聚类方法。它开始于将数据集中的每个点视为一个单独的簇,然后迭代地合并最相似的簇。这种相似性通常是通过一种距离度量(如欧氏距离)来定义的。合并过程持续进行,直到所有点都归并到一个单一的簇中,或者达到某个停止标准(如预定的簇数量)。 创新点:AHC 提供了一种直观的方式来理解和可视化数据的层次结构。通过树状图(dendrogram)的形式,它揭示了数据的嵌套结构,使得解释和理解聚类结果更加直观。
clc
clear all
示例数据
data = xlsread('特征数据.xls');
设置K值的搜索范围,这里假设最大为10
max_k = 10;
初始化最佳结果
best_k = 0;
best_idx = [];
best_centers = [];
best_silhouette_score = -1;
for k = 2:max_k
执行Kmeans聚类
opts = statset('Display','off');
C] = kmeans(data, k, 'Options', opts);
计算轮廓系数
s = silhouette(data, idx);
silhouette_score = mean(s);
更新最佳结果
if silhouette_score > best_silhouette_score
best_k = k;
best_idx = idx;
best_centers = C;
best_silhouette_score = silhouette_score;
end
end
获取聚类中心
cluster_centers = best_centers;
创建HSV颜色图
hsv_colors = hsv(best_k);