精华内容
下载资源
问答
  • 2020-09-22 12:23:40

    无须事先指定簇数量的聚类

    说到聚类,最常见的模型当然是 KMeans。不过如果使用 KMeans 的话,需要在算法运行前指定 $k$ 的值——也就是要在训练前指定最后的结果被分为几簇。

    现实中有相当多的聚类问题,无法在事先指定簇的数量。KMeans 就无法完成这类任务。

    好在聚类方法有很多,有一种算法,不仅不需要事先指定 $k$ 值,还可以在结果中保证每个簇中的个体数量低于某个量值,这就是——基于图切割的谱聚类(Spectral Clustering)

    算法实现

    基于图切割的谱聚类算法过程分为两个大的步骤:

    1. 图切割
    2. 谱聚类

    具体步骤如下:

    Step 1:生成一张图 $G = <V,E>$,其中每个顶点(Vertex)对应一个样本对象,每两个顶点之间的边则代表这两个样本之间的距离。

    此处的距离可以是欧氏距离、余弦距离,或者任何一种距离,我们用 $c_{ij}$ 表示顶点 $i$ 和顶点 $j$ 之间的距离,那么这张图就可以用矩阵 $C$ 来表示了:

    $C = (c_{ij}) $

    Step 2:确定距离阈值 $threshold_C$,将所有 $c_{ij} > threshold_C$ 的顶点对 $\{ i, j \}$ 视为断开。

    据此将完整的 $G$ 分割为若干连通图 ${G_1, G_2, … , G_n}$。

    计算每一个子图的 Radius (最远边缘节点到中心节点的距离) 和 Size(包含顶点数):

      更多相关内容
    • 通过对原始数据的变量观察,该数据变量主要为数值型变量和类别型变量两类,且类别型变量数量较多,常用的K-means聚类只能分析数值型变量,无法考虑类别型变量所包含的信息。二阶段聚类法适用于包含数值型和类别型...
    • 首先使用基于最小距离原则的一趟聚类算法将训练邮件集合划分为大小几乎相同的超球体,每个超球体包含一个类别或多个类别的文本;其次,采用投票机制对得到的聚类结果进行簇标识,即以簇中最多文本的类别作为簇的类别,...
    • 什么是聚类聚类是一组用于将数据划分为组或簇的技术。...现阶段常见的聚类算法包括:Partitional clusteringHierarchical clusteringDensity-based clusteringPartitional clusteringPartitional cluste...

      什么是聚类?

      聚类是一组用于将数据划分为组或簇的技术。同组的数据中相比其他组的数据更加相似,而在聚类的过程选择合适的聚类算法是关键。

      现阶段常见的聚类算法包括:

      • Partitional clustering

      • Hierarchical clustering

      • Density-based clustering

      Partitional clustering

      Partitional clustering将数据对象划分为不重叠的组,并且每个集群必须至少有一个对象。Partitional clustering两个示例是-means和-medoids。

      Partitional clustering是非确定性的,这意味着即使运行基于相同的输入,它们也可以从两个单独的运行中产生不同的结果。

      Hierarchical clustering

      Hierarchical clustering通过建立层次结构来确定聚类分配。这是通过自下而上或自上而下的方法实现的:它合并最相似的两个点,直到所有点都合并到一个集群中。

      Hierarchical clustering是一个确定性过程,运行多次但最终聚类结果不会改变。

      Density-based clustering

      Density-based clustering根据区域中数据点的密度确定聚类分配,簇被分配在由低密度区域分隔的高密度数据点的区域。

      Density-based clustering与其他聚类类别不同,这种方法不需要用户指定聚类的数量。

      -Means聚类

      均值聚方法第一步是随机选择个质心,其中等于您选择的聚类数,质心是表示集群中心的数据点。

      468c44199f1a54963c5aa2c0f36e4c72.gif

      均值聚方法期望步骤将每个数据点分配到其最近的质心。均值聚方法最大化步骤计算每个集群的所有点的平均值并设置新的质心。

      聚类优劣是通过计算质心收敛后的平方误差 (SSE) 之和来确定的,或者与前一次迭代的分配相匹配。SSE 定义为每个点到其最近质心的欧几里得距离平方和。

      import matplotlib.pyplot as plt
      from kneed import KneeLocator
      from sklearn.datasets import make_blobs
      from sklearn.cluster import KMeans
      from sklearn.metrics import silhouette_score
      from sklearn.preprocessing import StandardScaler
      
      features, true_labels = make_blobs(
          n_samples=200,
          centers=3,
          cluster_std=2.75,
          random_state=42
      )

      make_blobs()生成合成数据集:

      • n_samples是要生成的样本总数

      • centers是要生成的中心数

      • cluster_std是标准差

      均值聚方法中使用的参数:

      • init控制初始化技术。

      • n_clusters为聚类个数

      • n_init设置要执行的初始化次数

      • max_iter为初始化最大迭代次数

      kmeans = KMeans(
          init="random",
          n_clusters=3,
          n_init=10,
          max_iter=300,
          random_state=42
      )
      
      kmeans.fit(scaled_features)
      
      # The lowest SSE value
      kmeans.inertia_
      
      
      # Final locations of the centroid
      kmeans.cluster_centers_

      选择合适的聚类个数

      肘部法(elbow method)

      要执行肘法,运行几个k均值,每次迭代递增k,并记录SSE:

      kmeans_kwargs = {
          "init": "random",
          "n_init": 10,
          "max_iter": 300,
          "random_state": 42,
      }
      
      # A list holds the SSE values for each k
      sse = []
      for k in range(1, 11):
          kmeans = KMeans(n_clusters=k, **kmeans_kwargs)
          kmeans.fit(scaled_features)
          sse.append(kmeans.inertia_)

      SSE曲线开始弯曲的最佳点是肘点。该点的3被认为是误差和聚类数量之间的合理权衡。

      f5c5835fd2a3fb90b909d4ffed72566e.png

      plt.style.use("fivethirtyeight")
      plt.plot(range(1, 11), sse)
      plt.xticks(range(1, 11))
      plt.xlabel("Number of Clusters")
      plt.ylabel("SSE")
      plt.show()

      轮廓系数(silhouette coefficient)

      轮廓系数是独立簇同类的凝聚力和分离度,它根据两个因素量化数据点与其分配的集群的匹配程度:

      • 数据点与同簇中其他点的接近程度

      • 数据点与其他同簇中的点之间的距离

      # A list holds the silhouette coefficients for each k
      silhouette_coefficients = []
      
      # Notice you start at 2 clusters for silhouette coefficient
      for k in range(2, 11):
          kmeans = KMeans(n_clusters=k, **kmeans_kwargs)
          kmeans.fit(scaled_features)
          score = silhouette_score(scaled_features, kmeans.labels_)
          silhouette_coefficients.append(score)

      绘制每个的平均轮廓分数k表明,最好的选择3因为它具有最高分数:

      28a469b6269b84860e7c462eda70852d.png

      plt.style.use("fivethirtyeight")
      plt.plot(range(2, 11), silhouette_coefficients)
      plt.xticks(range(2, 11))
      plt.xlabel("Number of Clusters")
      plt.ylabel("Silhouette Coefficient")
      plt.show()
      
       
      
       
      
       
      
       
      
       
      往期精彩回顾
      
      
      
      
      适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
      AI基础下载机器学习交流qq群955171419,加入微信群请扫码:

      c4c73dfc551fcb144652f892661fcf9a.png

      展开全文
    • 该算法的参数包括网格大小、噪声阈值和神经节点 数量。算法首先根据参数对数据空间划分网格,接着使用高斯影响函数计算每个单元的场强,然后针对网格位 置和网格的场强使用SOM进行聚类,最后使用Chameleon算法对SOM...
    • matlab实现的k聚类算法

      2020-05-13 22:46:59
      matlab实现的k聚类算法实例,从excel表格中读取二维数据点(x,y),然后将数据点分类,可以自主调节类别数量。压缩包包含如下内容:kmeans聚类函数(kmeans_clustering.m),测试代码(main.m),测试数据(testdata....
    • 聚类是一种无监督机器学习方法,可以从数据本身中识别出相似的数据点。 对于一些聚类算法,例如 K-means,需要事先知道有多少个聚类。 如果错误地指定了簇的数量,则结果的效果就会变得很差(参见图 1)。 这种情况...

      聚类是一种无监督机器学习方法,可以从数据本身中识别出相似的数据点。 对于一些聚类算法,例如 K-means,需要事先知道有多少个聚类。 如果错误地指定了簇的数量,则结果的效果就会变得很差(参见图 1)。

      这种情况下,s 变为负数,接近 -1。

      在许多情况下,不知道数据中有多少个簇。但是弄清楚有多少簇可能是我们首先要执行聚类操作的原因。如果有数据集相关的领域内知识可能有助于确定簇的数量。但是这假设需要知道目标类(或至少有多少类),而在无监督学习中无法确认,所以我们需要一种方法,它可以在不依赖目标变量的情况下告诉我们簇的数量。

      确定正确的簇数量的一种可能的解决方案是暴力测试的方法。我们尝试不同数量的簇的聚类算法。然后找到最优的聚类结果,但是这种方式的需要花费大量的资源。在本文中,我们首先介绍两个流行的指标来评估簇质量。然后介绍了三种方法来找到最佳簇数量:

      • 肘部法 The elbow method
      • 轮廓系数的优化 The optimization of the silhouette coefficient
      • 间隔量统计 The gap statistic

      聚类结果的质量

      在使用不同的方法来确定最佳聚类数之前,首先要了解如何定量评估聚类结果的质量。 想象以下场景,相同的数据集分为三个簇(参见图 2)。 左侧的聚类定义良好,而右侧的聚类识别不佳。

      这是为什么?聚类的目标是对聚类中的数据点进行分组,以便 (1) 聚类内的点尽可能相似,(2) 属于不同聚类的点尽可能不同。这意味着,在理想的聚类中,簇内的变化很小,而簇间的变化很大。因此,一个好的聚类质量度量应该能够定量地总结(1)和/或(2)。

      一种这样的质量指标是inertia(惯性)。这被计算为数据点与其所属聚类中心之间的平方距离之和。inertia量化了簇内的变化。

      另一个流行的指标是silhouette coefficient(轮廓系数),它试图总结簇内和簇间的变化。在每个数据点,我们计算到该数据点所属的聚类中心的距离(称为a),以及到次优聚类中心的距离(称为b)。在这里,次好的簇是指不是当前数据点簇的最接近的簇。然后基于这两个距离 a 和 b,该数据点的轮廓 s 计算为 s=(b-a)/max(a,b)。

      在理想聚类下,距离 a 与距离

      一旦在所有数据点计算 s,s 的平均值就确定了轮廓系数。 可以为每个簇单独计算轮廓系数,也可以为所有数据点计算轮廓系数。 接近 1 的轮廓系数表明聚类算法能够将数据划分为分离良好的聚类。

      肘部法则

      inertia是簇数 k 的递减函数。 它的下降速度在最佳聚类数 K 上下是不同的。当 k<K 时,inertia迅速下降,而当 k>K 时,inertia下降很慢。 因此,通过在 k 范围内绘制inertia,可以确定曲线在 K 处弯曲或弯头的位置。图 4 显示了图 1 中示例的惯性图。我们可以清楚地看到弯曲或弯头, 在 k = 6。所以我将inertia翻译成了惯性是非常贴切的。

      这种方法有些主观,因为不同的人可能会在不同的位置识别肘部。 在我们图 4 的示例中,有些人可能会争辩说 k=4 是肘部。 此外,肘部可能并不总是很明显,我们将在后面看到。

      肘部法的用例可以在自然语言问题中看到,以使用 KNIME 分析平台确定社交网络中的最佳主题数量。 由于没有 KNIME 节点来计算inertia,因此在此示例中使用 Java Snippet 节点来计算inertia。 这是用于计算inertia的代码片段。

      // Initializing the sum of squares
      out_sum_squares = 0.0;
      /*
      The first half of columns belong to features of the origin.
      The second half of columns belong to features of the terminus.
      The groups of columns have to be in the same order.
       */
      int col_count = getColumnCount();
      int no_dimensions = col_count / 2;
      
      // Loop over the feature columns
      for(int i=0; i < no_dimensions; i++){
        /*
        Checking if the feature i from the origin and
        the feature i from the terminus (i.e., i+no_dimensions)
        are not missing, and have similar column names
         */
        if(!isMissing(i) && isType(i, tDouble)
         && !isMissing(i+no_dimensions) && 
         isType(i+no_dimensions, tDouble) &&
         getColumnName(i+no_dimensions).contains(getColumnName(i))){
          // Calculating the squared distance and adding it to the sum
          out_sum_squares += Math.pow(getCell(i, tDouble) - 
          getCell(i+no_dimensions, tDouble), 2);
         }
      }
      

      轮廓系数法

      轮廓系数可以提供更客观的方法来确定最佳聚类数。 这是通过简单地计算 k 范围内的轮廓系数并将峰值识别为最佳 K 来完成的。 在 k 范围内执行 K-Means 聚类,找到产生最大轮廓系数的最佳 K,并根据优化的 K 将数据点分配给聚类。图 5 显示了我们提供的示例数据中的轮廓系数图示例 如图 1 所示,轮廓系数在 k=6 处达到峰值,因此确定为最佳 K。

      间隔量统计

      为了讨论差距统计,让我们考虑一个没有任何聚类的随机数据集的聚类。假设一个随机数据集被聚类为 k 个聚类,并根据生成的聚类计算惯性(参见图 6)。尽管缺乏基本的组织,但随着 k 的增加,簇的随机数据会产生稳步下降的惯性(惯性的复数)。这是因为聚类中心越多,数据点到聚类中心的距离越小就会产生惯性的衰减。正如在图 4 中已经看到的,在具有簇组织的数据集中,无论 k 是否低于或高于最佳簇数 K,惯性的减少率都会有所不同。将观察数据和随机数据的惯性绘制在一起时差异变得明显(参见图 7)。间隔量统计是通过比较来自(希望)聚类数据集和覆盖数据空间中相同范围的相应随机数据集的惯性来计算的。

      图 6:均匀分布的随机数据聚集成 k=4(左)、6(中)和 15(右)簇。

      图 7:原始数据(来自图 1)与 k 范围内的随机数据的惯性如何降低。

      在实际计算间隔统计量时,会生成一些随机样本,然后在 k 的范围内进行聚类,并记录由此产生的惯性。 这允许随机情况下的一些惯性。 原始数据集也在k的范围内聚集,产生一系列惯性。 k 个簇的间隙统计量计算为

      其中 Wk(i) 是来自第 i 个随机样本 (i=1,2,…,B) 的惯性,具有 k 个簇,Wk 是来自原始数据的惯性具有 k 个簇,将其标准差计算为

      然后找到最优K作为满足条件的最小k

      间隔量统计的计算涉及模拟,所以这里在 R 中计算间隙统计信息。 特别是调用clusGap()函数计算不同k处的gap统计量,maxSE()返回满足上述条件的最优K。 图 8 显示了图 1 中示例数据集的间隙统计图,基于每个 k 处的 B=100 次迭代。 红线代表满足上述条件的最优 K。

      需要注意的是,由间隔量统计方法确定的最优 K 可能不一致。 例如,当间隔量统计方法多次应用于演示数据时,得到的最优 K 可能不同(见图 9)。

      MNIST 手写数字数据示例

      现在让我们在具有簇组织的真实数据集上检查上述三种方法。 MNIST 数据集由 0 到 9 的手写数字的灰度图像组成。在这个例子中,我们使用了 n=1797 个 8x8 像素的图像。 图 10 显示了数据集的一些示例。

      上述三种方法用于确定最佳聚类数。 由于该数据集中有 10 个不同的数字,因此可以合理地假设有 10 个聚类,每个聚类对应一个数字。 然而人们可能有多种书写数字的方式,实际上簇的数量不一定是 10。数据的 2D 散点图(通过 tSNE 投影到 2D 空间,参见图 11)显示一些簇可能与其他簇很好地分离,而一些 簇可能接触或重叠。

      肘部法的结果尚无定论,因为图中没有明显的肘部(图 12,左)。而 图中有一些微妙的弯曲(例如,9、12、20、24 等等),并且可以选择其中任何一个作为聚类的数量。

      图 12:根据数字数据生成的肘部图(左)和轮廓系数图(右)。

      图 13:根据 B=100 次迭代从数字数据生成的间隔量统计图。 最佳 k=12 用红线表示。

      轮廓系数在 k=12 处有一个峰值(图 12,右)。 根据间隔量统计方法,k=12也被确定为最佳聚类数(图13)。 我们可以直观地比较 k=9(根据肘部方法最佳)和 k=12(根据轮廓和间隙统计方法最佳)的 k-Means 聚类(参见图 14)。

      图 14:在 k=9 和 k=12 的数字数据中发现的 K-Means 聚类, t-SNE 投影到 2D 空间。

      总结

      本文展示了选择最佳聚类数的三种不同方法,即肘部法、轮廓系数和间隔量统计量。 虽然肘部图的解释相当主观,但轮廓系数和间隙统计方法都可以精确地确定聚类的数量。 但是间隔量统计涉及模拟,它可能并不总是产生相同的结果。

      与许多机器学习方法一样,此处描述的方法并非在所有场景中都能正常工作。 由于这些方法量化了聚类中心和数据点之间的距离,因此它们适用于寻找凸聚类,例如在 K-Means 聚类中找到的聚类的数量。

      引用

      Robert Tibshirani, Guenther Walther, Trevor Hastie. Estimating the number of clusters in a data set via the gap statistic. Journal of the Royal Statistical Society, Series B, 63: 411–423 (2001).

      https://www.overfit.cn/post/c25bfe782db74e1aa44b345af4ec01e8

      作者:Satoru Hayasaka

      展开全文
    • 常见的聚类算法

      2021-03-30 11:16:40
      常见聚类算法K-meansMean-ShiftDBSCAN基于高斯混合模型(GMM)的期望最大化(EM)聚类凝聚层次聚类 K-means K-means的假设是:将某一些数据分为不同的类别,在相同的类别中数据之间的距离应该都很近,也就是说离得越近...

      K-means

      K-means的假设是:将某一些数据分为不同的类别,在相同的类别中数据之间的距离应该都很近,也就是说离得越近的数据应该越相似,再进一步说明,数据之间的相似度与它们之间的欧式距离成反比。

      K-mean中有两个关键的参数:一个是每个数据所属的类别;一个是每个聚类的中心{。这两个未知的参数是相互依存的:如果知道每个数据的所属类别,那么类别的所有数据的平均值就是这个类别的中心;如果知道每个类别的中心,那么就是计算数据与中心的距离,再根据距离的大小可以推断出数据属于哪一个类别。

      根据这个思路,使用EM算法来估计模型的参数。具体操作如下:

      1. 首先随机生成k个聚类中心点
      2. 根据聚类中心点,将数据分为k类。分类的原则是数据离哪个中心点近就将它分为哪一类别。
      3. 再根据分好的类别的数据,重新计算聚类的类别中心点。
      4. 不断的重复2和3步,直到中心点不再变化。

      在这里插入图片描述

      优点:

      速度非常快,因为我们真正要做的就是计算点和组中心之间的距离;计算量少

      缺点:

      1、首先,您必须先确定聚类的簇数量。理想情况下,对于一个聚类算法,我们希望它能帮我们解决这些问题,因为它的目的是从数据中获得一些洞察力。k-均值也从随机选择聚类中心开始,因此它可能在算法的不同运行中产生不同的聚类结果。因此,结果可能不可重复,缺乏一致性。

      2、K中位数是与K均值相关的另一种聚类算法,除了不使用平均值重新计算组中心点之外,我们使用组的中位数向量。这种方法对异常偏离值不太敏感(因为使用了中值),但对于较大的数据集来说要慢得多,因为在计算中值向量时,每次迭代都需要排序。

      Mean-Shift

      Mean-shift 聚类是一个基于滑窗的算法,尝试找到数据点密集的区域。它是一个基于质心的算法,也就是说他的目标是通过更新中心点候选者定位每个组或类的中心点,将中心点候选者更新为滑窗内点的均值。这些候选滑窗之后会在后处理阶段被过滤,来减少临近的重复点,最后形成了中心点的集合和他们对应的组。

      在这里插入图片描述

      单滑窗的 Mean-Shift 聚类

      1、为了解释 mean-shift,我们将考虑一个二维空间中的点集,像上图所示那样。我们以一个圆心在C点(随机选择)的圆形滑窗开始,以半径 r 作为核。Mean shift 是一个爬山算法,它每一步都迭代地把核移动到更高密度的区域,直到收敛位置。

      2、在每次迭代时,通过移动中心点到滑窗中点的均值处,将滑窗移动到密度更高的区域(这也是这种算法名字的由来)。滑窗内的密度与在其内部点的数量成正比。很自然地,通过将中心移动到窗内点的均值处,可以逐步的移向有个高的密度的区域。

      3、我们继续根据均值来移动滑窗,直到有没有哪个方向可以使核中容纳更多的点。查看上面的图,我们一直移动圆圈直到密度不再增长。(即窗内点的数量不再增长)。

      4、用很多滑窗重复1-3这个过程,直到所有的点都包含在了窗内。当多个滑动窗口重叠时,包含最多点的窗口将被保留。然后,根据数据点所在的滑动窗口对数据点进行聚类。

      在这里插入图片描述

      DBSCAN

      DBSCAN 是一个基于密度的聚类算法,与 mean-shift 相似,但是有几个值得注意的优点。

      1、DBSCAN 从一个任意的还没有被访问过的启动数据点开始。用一个距离 ε 将这个点的邻域提取出来(所有在距离 ε 内的点都视为邻居点)。

      2、如果在邻域内有足够数量的点(根据 minPoints) ,那么聚类过程开始,并且当前数据点变成新集群中的第一个点。否则,该点将被标记为噪声(之后这个噪声点可能会变成集群中的一部分)。在这两种情况中的点都被标记为”已访问“。

      3、对于这个新集群中的第一个点,在它 ε 距离邻域内的点已将变成相同集群中的一部分。这个让所有在 ε 邻域内的点都属于相同集群的过程在之后会一直被重复做,直到所有新点都被加进集群分组中。

      4、第 2,3 步的过程会一直重复直到集群内所有点都被确定,即所有在 ε 邻域内的点都被访问且被打上标签。

      5、一旦我们在当前集群做完这些,一个新的未被访问的点会被提取并处理,从而会接着发现下一个集群或噪声。这个过程反复进行直到所有的点都被编辑为已访问。既然在最后所有的点都被访问,那么每个点都被标记为属于一个集群或者是噪声。

      相较于其他聚类算法,DBSCAN 提出了一些很棒的优点。首先,它根本不需要预置集群的数量。它还将离群值认定为噪声,不像 mean-shift 中仅仅是将它们扔到一个集群里,甚至即使该数据点的差异性很大也这么做。另外,这个算法还可以很好的找到任意尺寸核任意形状的集群。

      SBSCAN 最大的缺点是当集群的密度变化时,它表现的不像其他算法那样好。这是因为当密度变化时,距离的阈值 ε 和用于确定邻居点的 minPoints 也将会随之改变。这个缺点也会发生在很高维的数据中,因为距离阈值 ε 变得很难被估计。

      基于高斯混合模型(GMM)的期望最大化(EM)聚类

      k-means的一个主要缺点是它简单地使用了集群中心的平均值。通过下面的图片,我们可以看到为什么这不是最好的方式。在左手边,人眼可以很明显地看到,有两个半径不同的圆形星团以相同的平均值为中心。k-means不能处理这个问题,因为不同簇的平均值非常接近。当簇不是圆形时,k均值也会失效,这也是将均值用作簇中心的后果。

      K-means不适用的case

        高斯混合模型(gmms)具有更好的灵活性比K-means。使用GMMs,我们需要假设数据点是高斯分布,相对于环形的数据而言,这个假设的严格程度与均值相比弱很多。这样的话,我们有两个参数来描述簇的形状:均值和标准差。以二维为例,意味簇可以是任何一种椭圆形(因为我们有两个标准差在x和y方向)。因此,每个高斯分布会被分配到单一的聚类簇。
      

      为了在每个聚类簇中找到这两个高斯参数(e.g均值和标准差),我们将使用的优化算法称为expectation–maximization(EM)。请看下面的图片,以说明将高斯拟合聚类簇。然后,我们可以处理EM聚类过程使用gmms。

      在这里插入图片描述

      使用GMMs的EM聚类

      1、我们首先设定聚类簇的数量(如k-means),然后随机初始化每个集群的高斯分布参数。我们也可以通过快速查看数据来为初始参数提供一个很好的猜测。正如上图所示,这不是100%必要的,因为高斯操作开始时候是非常差的,但很快优化。

      2、给定每个簇的高斯分布,计算每个数据点属于特定簇的概率。一个点越靠近高斯中心,它就越可能属于该簇。这应该是直观的,因为对于高斯分布,我们假设大多数数据都靠近集群的中心。

      3、基于这些概率,我们为高斯分布计算了一组新的参数,这样我们就可以最大化群集中数据点的概率。我们使用数据点位置的加权和计算这些新参数,其中权重是属于特定集群的数据点的概率。为了以可视化的方式解释这一点,我们可以查看上面的图形,特别是以黄色集群为例。在第一次迭代中,分布是随机开始的,但是我们可以看到大多数黄点都在分布的右边。当我们计算一个由概率加权的和时,即使在中心附近有一些点,但大多数都在右边。因此,分布的平均值很自然地移近这些点集。我们还可以看到,大多数点是“从右上到左下”。因此,标准偏差会发生变化,以创建一个更适合这些点的椭圆,以便最大化概率加权的和。

      4、第2步和第3步重复进行,直到收敛,也就是在收敛过程中,迭代变化不大。

      使用GMMS有两个关键优势。首先,GMMS在簇协方差方面比K均值灵活得多;由于标准偏差参数的存在,簇可以呈现任何椭圆形状,而不局限于圆形。k均值实际上是GMM的一个特例,其中每个簇的所有维协方差都接近于0。其次,由于GMM使用概率,因此每个数据点可以有多个集群。因此,如果一个数据点位于两个重叠集群的中间,我们可以简单地定义它的类,方法是说它属于类1的X%,属于类2的Y%。即GMMS支持混合成员。

      凝聚层次聚类

      凝聚层次聚类算法实际上分为 2 类:自上而下或自下而上。自下而上算法在一开始将每个数据点当作一个单个集群对待,然后逐步的合并(或凝聚)成对的集群,直到所有的集群被合并到一个集群中,这个集群包含所有的点。自下而上层次聚类因此被叫做层次凝聚的聚类或者 HAC。这个聚类的层次被表示为一棵树(或者树状图)。树根是唯一的集群,他聚集了所有的样本,叶子是只有一个样本的集群。在接着看算法步骤之前,请查看下面的图示说明。

      凝聚层次聚类

      1、我们通过将每个点视作一个单个集群作为开始,即如果我们的数据集中有 X 个数据点,那么我们就有 X 个集群。我们然后选择一个距离度量标准来测量两个集群之间的距离。作为一个例子,我们将用到平均连接,它将两个集群之间的距离定义为第一个集群中的数据点与第二个集群中数据点的平均距离。

      2、在每次迭代时,我们将两个集群组合成一个。两个将被组合的集群是在那些有最小平均连接的集群中选出来的,即根据我们选择的距离度量标准,这些两两集群之间有最小的距离,且因此是最相似的也最应该被组合。

      3、一直重复第二步,直到我们到达树的根部,即我们只有一个包含所有数据点的集群。通过这种方法,我们仅仅通过选择停止组合的集群的时机,即选择何时停止树的构建,就可以挑选出最终我们想要的集群数。

      层次聚类不要求我们指定集群的数目,并且我们甚至可以选择看上去最好的集群的数目,因为我们正在构建一棵树。另外,算法对于距离度量的选择也是不敏感的;所有的这些都和其他聚类算法的效果一样好,而对于其他算法,距离度量的选择是很关键的。层次聚类方法的一个典型的使用案例是当底层数据具有层次结构并且要恢复层次结构时; 其他聚类算法做不到这个。这些层次聚类的优点的代价是效率很低,因为它的时间复杂度是O(n),不像有线性复杂度的 K-Means 和 GMM 那样。

      展开全文
    • 聚类基于点之间的距离,不需要事先知道聚类数量。 如果两点之间的距离小于用户定义的距离,则每个点都与最近的相邻点聚类临界点。 该函数在屏幕上输出基本的汇总统计信息(簇数、最小、最大和平均簇大小等),并...
    • 2、学生家乡在广州,课程1在80分以上,且课程9在9分以上的男同学的数量: 3、比较广州和上海两地女生的平均体能测试成绩,哪个地区的更强些? 4、学习成绩和体能测试成绩,两者的相关性是多少?(九门课的成绩分别与...
    • ISO-SPLIT是一种有效的聚类算法,可以处理中低维度的未知数量的单峰聚类,而无需任何用户可调整的参数。 它基于对单峰性的重复测试-使用等渗回归和改进的Hartigan dip测试-应用于假定的聚类对的一维投影。 它可以很...
    • Python实现经纬度空间点DBSCAN聚类

      万次阅读 多人点赞 2020-09-22 09:33:32
      博主前期科研工作中,涉及到要对某个地区的一些空间点进行聚类分析,想到读研期间,曾经用DBSCAN聚类算法实现了四线激光雷达扫描的三维点云数据聚类(论文题目:基于改进DBSCAN算法的激光雷达目标物检测方法),当初...
    • 聚类及DBSCAN 聚类算法

      千次阅读 2022-01-05 15:17:22
      聚类及DBSCAN 聚类算法 一、聚类 1.概念 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。 2.聚类与分类...
    • 聚类

      2021-05-24 16:16:57
      聚类算法是对代表事物的实例的集合进行分簇的算法。聚类属于无监督学习。 K均值聚类算法: 基本思想: 设样本总数为m,样本集为S={x_1,x_2,…,x_m}。K均值聚类算法对样本集分簇的个数是事先指定的,即k。设分簇...
    • sklearn谱聚类并确定最佳聚类数目

      千次阅读 2021-04-04 20:32:45
      python自带的sklearn就可以实现谱聚类 这里给出各参数介绍 以及实现实例:谱聚类对已经给出的相似度矩阵进行聚类,然后使用轮廓系数和ch系数确定最佳簇数。 原网址:...
    • 一文总结聚类分析步骤

      千次阅读 2022-04-02 15:06:33
      一、聚类 1.准备工作 (1) 研究目的 聚类分析是根据事物本身的特性研究个体分类的方法,聚类分析的原则是同一类别的个体有较大相似性,不同类别的个体差异比较大。 (2) 数据类型 1)定量:数字有比较意义...
    • 聚类分析

      2021-04-28 22:44:37
      通俗的讲,聚类分析它是根据研究对象的特征按照一定的标准,对研究对象来进行分类的一种分析方法,它使分成后的每一种类的数据对象具有较高的相似度,而不同类的对象有比较大的差异性,聚类分析可以在没有明显分类的...
    • 5.2 确定类的数量 (1)树状图 树状图中,横坐标为类的数量,纵坐标为距离,一般取距离(纵坐标)宽度大的情况所对应的类的数目,此时聚类结果更稳定。如下图所示,水平线与树状图中的垂直线有几个交点就表示此时是...
    • xcluster包含极端集群,即,其中要聚集点的数量和集群的数量是很大的聚类算法的实例和评估工具。 最值得注意的是,xcluster 包含PERCH (集群层次结构的纯度增强旋转)的实现。 PERCH 是一种在线极限聚类算法,它...
    • 2.3-聚类 - sklearn中文文档 密度聚类方法 密度聚类方法的核心思想是,只要样本点的密度大 于某阈值,则将该样本添加到最近的簇中。这类算法能克服基于距离的算法只能发现“类圆形”(凸)的聚类的缺点,可发现任意...
    • 聚类——基于层次的聚类算法

      千次阅读 2021-12-23 17:41:40
      可以选择一个聚类数量,根据需求对树状图中画一条水平线,得到对应的聚类。 自底向上的聚类 从点作为个体簇开始,迭代时每一步合并两个最接近的簇,直到所有样本合并为一簇。 基本步骤: 每个样本点自成一类。 ...
    • DBSCAN聚类算法

      2022-01-02 16:35:57
      去年学聚类算法的R语言的时候,有层次聚类、系统聚类、K-means聚类、K中心聚类,最后呢,被DBSCAN聚类算法迷上了,为什么呢,首先它可以发现任何形状的簇,其次我认为它的理论也是比较简单易懂的。今年在python这门...
    • 数据挖掘——聚类

      2022-04-09 21:15:09
      每次聚类保证局部最优,随后调整聚类,利用局部最优聚类的上限来不断逼近全局最优。 采用距离作为相异度的评价指标,以簇内差异函数w©作为聚类质量的优化目标函数,即将所有数据 对象到它的簇中心点的距离平方和...
    • 聚类的介绍 案例——商场客户聚类 一、读取数据 import pandas as pd beer=pd.read_csv('beer.txt',sep=' ') #输出文件内容 beer pandas.read_csv 常用参数为:header, sep, name…… header: 指定...
    • 聚类数目的多种确定方法与理论证明前言一:确定聚类中心数目的基础方法**二:方法修正**三:实验内容四:关于蒙特卡洛方法的有效性证明五:总结与展望 前言 上一篇文章我们主要是自己实现了kmeans++算法的底层逻辑,...
    • 作者 | Josh Thompson编译 | 张睿毅、王雨桐来源 | 数据派THU原文 | Choosing the Right Clustering Algorithm for your Dataset - KDnuggets聚类算法十分容易上手,但是选择恰当的聚类算法并不是一件容易的事。...

    空空如也

    空空如也

    1 2 3 4 5 ... 20
    收藏数 40,331
    精华内容 16,132
    关键字:

    包含数量的聚类