
使用DeepSeek和Claude绘制出高质量的SVG 图片
聚类分析是一种数据分析技术,用于探索数据集中自然出现的组(称为聚类)。聚类分析不需要将数据点分组到任何预定义的组中,这意味着它是一种无监督学习方法。在无监督学习中,洞察力是从数据中得出的,没有任何预定义的标签或类别。良好的聚类算法可确保较高的簇内相似度和较低的簇间相似度。
根据销售额对零售店进行分组是聚类分析的一个简单用例。假设一家咖啡馆在城市有 8 家分店。下表显示了卡布奇诺和冰咖啡的每日销量。
下图显示了相同的数据,其中每个门店的卡布奇诺和冰咖啡销售额分别绘制在 X 轴和 Y 轴上。在这个例子中,由于数据点有限,很容易在图表上绘制两个自然出现的咖啡馆门店集群并手动将其可视化。
然而,当涉及到数千个数据点时,需要使用聚类分析算法将数据点分成不同的聚类。
聚类分析通常有两种主要用途:
聚类分析通常用作各种机器学习算法的预处理步骤。
分类算法对大量数据集进行聚类分析,以过滤掉属于明显组的数据。然后,可以对减少的、不明显的数据点使用高级数据分类技术。随着数据集变小,计算时间大大减少。同样的方法可以以相反的方式使用,即使用聚类分析算法来过滤掉噪声或异常数据。
在运行监督学习算法之前,人们可能首先对输入数据进行聚类分析,以找出数据中的自然聚类。
聚类分析算法通常属于以下几类:
每种算法本身都很复杂,可能适合某些分析,而不适合其他分析。
在此方法中,算法从几个初始聚类开始。然后迭代地将数据点重新定位到不同的聚类中,直到实现最佳划分。K 均值聚类算法是最流行的聚类算法之一。
下面的 K 均值聚类示例显示了其工作原理。聚类分析有哪些应用?
步骤 1:确定集群
确定算法的簇数“K”,例如 K=3。算法会将上述 12 个数据点划分为 3 个簇。K 可以是任意值。根据该值,聚类的正确性可能会有所不同。还有算法方法可用于确定 K 的最佳值。
第 2 步:选择数据点
由于 K=3,取任意三个数据点作为初始均值。在此示例中,选择点 C、D 和 E 作为初始均值。请注意,K 均值算法可以将任意点作为初始均值。
步骤 3:计算距离
计算数据集中每个点到每个初始聚类均值的距离。随机选择了三个聚类均值 C、D 和 E。对于样本中的每个数据点,计算它与这三个均值的距离。两点 (X1, Y1) 和 (X2, Y2) 之间的欧几里得距离使用如下:
在步骤 3 之后,表格将显示每个数据点与初始平均值 C、D 和 E 的距离。
根据数据点的最小距离将其添加到聚类中。例如,点 A 与初始均值 C 的距离最小。这意味着 A 在均值为 C 的聚类中。第一步完成后,便获得了聚类。
步骤 4:重复——计算新均值
现在很容易看到初始聚类。下一步是计算三个新的聚类平均值。为此,取特定聚类中的每个数据点,并计算平均值。
“C” 聚类的新聚类均值 = (5+2+6+1+4+3+6/7, 21+11+22+10+23+14+12/7) = (3.85, 16.14),我们将此点称为 X。
“D” 聚类的新聚类均值 = (1+2+5/3, 6+8+4/3) = (2.66, 6),我们将此点称为 Y。
“E” 聚类的新聚类均值 = (4+5/2, 10+11/2) = (4.5, 10.5)。我们把这个点称为 Z。
步骤 5:重复——计算每个数据点与新均值的距离
重复步骤 3,找出所有数据点与新计算的聚类均值 X、Y 和 Z 的距离。在这个新的迭代中,很容易看出数据点 C、D、I 和 L 的最小距离已经改变。它们现在属于一个新的聚类,如下所示。
然后,由于某些数据点已经改变了其聚类,因此需要继续进行 K-means 迭代。
步骤 6:重复——计算新均值和新聚类
由于数据点 C、D、I、L 已改变其聚类,因此需要像步骤 4 中那样计算新的聚类均值。为此,取特定聚类中的每个数据点,并计算平均值。然后像步骤 5 中一样,计算从每个数据点到新聚类均值的距离。根据距离,将数据点分配到与其距离最小的聚类。
K-means 是一种迭代分割算法:
在新的迭代中,如果每个数据点都保留在其先前的聚类中,则 K 均值算法终止。这意味着已获得局部最优解。
K-medoids 算法是另一种基于分区的聚类算法。K-medoid 算法选择 medoids 作为聚类的代表对象。K-medoid 算法试图找到与特定聚类中每个其他数据点具有最小差异的数据点。在差异最小化之前,K-medoid 算法会迭代地对数据集进行分区。K-均值算法通常使用平方误差距离(欧几里得距离),而 K-medoid 算法通常使用绝对值距离(如曼哈顿距离)来测量两个数据点之间的差异。
K-medoid 算法的一个标准实现是 Partition Around Medoids (PAM) 算法。以下是 PAM 算法的基本步骤。
尽管 K-均值算法很简单,但当数据有大量噪声和异常值时,它不会产生良好的结果。在这种情况下,K-中心点方法更为稳健。然而,像 PAM 这样的 K-中心点算法只有在数据集较小时才有用。当数据集大小增加时,K-中心点算法的计算时间会成倍增加。
顾名思义,分裂算法首先将所有数据点分配到单个簇中。然后将簇划分为最不相似的簇。然后,该算法递归地划分这些簇,直到获得最优解。分裂算法也称为自上而下的聚类方法。
这些算法首先将每个数据点分配到不同的聚类。然后,该算法递归地连接最相似的聚类,直到获得最佳解决方案。凝聚算法也称为自下而上的聚类方法。
凝聚聚类算法的示例
下面是五个数据点的距离矩阵。点之间的距离可以根据欧几里得距离或曼哈顿距离或任何其他距离公式计算。距离矩阵始终是对称矩阵,因为点 X 和 Y 之间的距离与 Y 和 X 之间的距离相同。基于此距离矩阵,这是凝聚(自下而上)聚类算法的一个示例。
步骤 1:在距离矩阵中,找到距离最小的两个点。在上面的例子中,它们是点 3 和 5。它们之间的距离为 2。将它们放入单个簇中。
步骤 2:删除点 3 和 5,将其替换为簇“35”,并创建一个新的距离矩阵。为此,需要计算所有数据点与簇“35”之间的距离。有多种方法可以确定此距离。
在此示例中,使用以下方法来测量距离:
点 X 与簇“35”的距离 = 最小值 (距离 (X, 3), 距离 (X,5))。基于此方法更新的距离矩阵为:
步骤 3:重复步骤 2,直到所有数据点都分组为一个簇。在当前示例中,需要六次迭代。下图显示了簇的形成。这种表示称为树状图。在此表示中,Y 轴表示两个数据点之间的距离。例如,点 3 和 5 之间的距离为 2。
步骤 4:一旦所有数据点都聚类完毕,如上所示,决定需要保留多少个簇。这是一个艰难的决定,因为每个层次聚类算法最终都会产生一个簇。在层次聚类算法对数据进行分区后,有几种方法可用于确定最佳簇数。
这些算法基于这样的理念:簇总是比其周围的数据空间更密集。基于密度的算法从单个数据点开始,探索其邻域内的数据点。初始点邻域内的点包含在单个簇中。邻域的定义因算法的实现而异。基于密度的噪声应用空间聚类 (DBSCAN) 是此类别中一种流行的聚类算法。
基于网格的聚类算法与基于密度的聚类算法类似。数据空间被划分为几个较小的单元,称为网格。每个数据点被分配到特定的网格单元。然后,该算法计算每个网格的密度。密度低于阈值的网格将被消除。接下来,该算法从相邻的密集网格组中形成聚类。统计信息网格 (STING) 和任务中的聚类 (CLIQUE) 是两种流行的基于网格的算法。
除了上面讨论的算法外,聚类分析还包括一组基于模型的聚类、基于约束的聚类和异常值分析算法。
算法 | 优点 | 缺点 |
基于分区的聚类分析算法 | 简单且可扩展。适用于具有紧凑且分离良好的集群的数据集。 | 需要提前定义聚类的数量。不适用于高维数据空间。易受噪声和异常值的影响。稳定性较差。 |
层次聚类分析算法 | 不需要预先定义集群。计算所有可能聚类的完整层次结构。良好的可视化方法,如树状图。 | 关于何时停止聚类尚不明确。高维数据空间的情况下性能下降。一旦集群分裂或合并完成,就很难纠正。 |
基于密度的聚类分析算法 | 发现任意形状和大小的簇。更好地处理数据中的噪声和异常值。不需要预先指定聚类的数量。 | 如果数据具有不同密度的聚类,则此方法可能会失败。输出高度依赖于输入参数的初始设置。 |
基于网格的聚类分析算法 | 无需计算距离。因此该算法很快。该算法可以处理大型数据集。 | 集群边界由水平或垂直边界组成。它不包括对角线边界 |
文章转载自: What is cluster analysis?