【问题标题】:When to use k means clustering algorithm?何时使用k均值聚类算法?
【发布时间】:2014-04-25 03:45:22
【问题描述】:

我可以对单个属性使用 k-means 算法吗?

属性和簇数有关系吗?

我有一个属性的表现,我想将数据分为 3 类:差、中、好。

可以用一个属性创建3个集群吗?

【问题讨论】:

  • 按属性,我推断你的意思是一个特征。您是否对单个功能进行了多次测量(可能会随着时间的推移)?您是否进行了多次测量此功能的实验?您想将这些实验中的每一个分类为差、中等还是好?问题的当前措辞并未明确提出问题。

标签: cluster-analysis data-mining k-means


【解决方案1】:

K-Means 在您了解空间中实际存在的集群数量时很有用。它的主要优点是速度。属性与数据集中的观察数量之间存在关系。

有时,数据集可能会受到The Curse of Dimensionality 的影响,其中您的变量/属性数量远大于您的观察数量。基本上,在观测值很少的高维空间中,很难在超维度中分离观测值。

你当然可以拥有一个属性的三个集群。考虑您有 7 个观察值的定量属性

  • 1
  • 2
  • 100
  • 101
  • 500
  • 499
  • 501

请注意,此样本中有三个居中的聚类:1.5、100.5 和 500。

【讨论】:

  • 实际上,k-means 无法合理处理分类属性。因为这些没有“意思”。
  • @Anony-Mousse 好点。实际上,尽管我只是向 OP 询问有关在一个属性中包含三个集群的问题。分类是回答这个问题的最简单方法。尽管如此,我还是将其更改为留在 K-Means 领域。
【解决方案2】:

是的,可以使用单个属性的聚类。

不,集群的数量和属性之间没有已知的关系。然而,有一些研究建议采用簇数 (k)=n\sqrt{2},其中 n 是项目总数。这只是一项研究,不同的研究提出了不同的簇数。确定簇数的最佳方法是选择使簇内距离最小和簇间距离最大的簇数。拥有背景知识也很重要。

您正在寻找的性能属性问题与其说是聚类问题,不如说是分类问题 Difference between classification and clustering in data mining?

【讨论】:

    【解决方案3】:

    如果您有一维数据,搜索 stackoverflow 以获得比 k-means 更好的方法。

    当您拥有多变量数据时,K-means 和其他聚类算法会大放异彩。它们会“处理”一维数据,但它们不再那么聪明了。

    一维数据是有序的。如果您对数据进行排序(或者甚至已经排序),则可以比使用 k-means 更有效地处理它。 k-means 的复杂性“只是”O(n*k*i),但如果您的数据是经过排序且一维的,您实际上可以将 k-means 提高到O(k*i)。排序是有代价的,但是到处都有非常好的排序实现......

    另外,对于一维数据,您可以使用很多统计数据,这些统计数据在更高维度上没有得到很好的研究或处理。您真正应该尝试的一项统计数据是内核密度估计。也许也可以试试 Jenks Natural Breaks Optimization。

    但是,如果您只想将数据分为差/中/高,为什么不只使用两个阈值

    【讨论】:

    • 要跟进内核密度估计评论 - 如果您想要聚类分类,可以使用诸如均值偏移聚类之类的东西。但是,集群的数量将取决于您选择的内核。
    • 对于一维数据,均值偏移不会比 KDE 产生任何好处,不是吗?但它的运行时间可能会高出一百倍,甚至更多。
    • 查看支持向量机或贝叶斯分类器甚至 K NN。对于单维数据,它们都应该很好用。如果该值是连续的,请检查高斯分类器。
    • @MattBoyle 问题在于 未标记 数据。那么你就不能使用任何分类器了。
    • 是吗?阅读这个问题,听起来他们正试图对我进行分类。
    【解决方案4】:

    正如其他人已经回答的那样,k-means 需要有关集群计数的先验信息。这在开始时可能看起来不是很有帮助。但是,我将引用以下我曾使用过并发现非常有帮助的场景。

    颜色分割

    想象一张包含 3 个信息通道的图片。 (红、绿、蓝)您想将颜色量化为 20 个不同的波段,以减少维度。我们称之为向量量化。

    每个像素都是一个具有红色、绿色和蓝色分量的 3 维向量。如果图像是 100 x 100 像素,那么您有 10,000 个向量。

    R,G,B
    128,100,20
    120,9,30
    255,255,255
    128,100,20
    120,9,30
    .
    .
    .
    

    根据您打算执行的分析类型,您可能不需要所有的 R、G、B 值。处理序数表示可能更简单。 在上面的示例中,可能会为 RGB 值分配一个平面积分表示

    R,G,B
    128,100,20 => 1
    120,9,30   => 2
    255,255,255=> 3
    128,100,20 => 1
    120,9,30   => 2
    

    您对这 10,000 个向量运行 k-Means 算法并指定 20 个集群。 结果 - 您已将图像颜色减少到 20 个大桶。显然有些信息丢失了。然而,这种损失是可以接受的直觉是,当人眼凝视着一片绿色草地时,我们不太可能记录所有 1600 万种 RGB 颜色。

    YouTube 视频

    https://www.youtube.com/watch?v=yR7k19YBqiw 我已经嵌入了该视频中的关键图片以供您理解。 注意!我不是这个视频的作者。

    原图

    K均值分割后

    【讨论】:

      【解决方案5】:

      只有一个属性,你不需要做k-means。首先,我想知道您的属性是数字的还是分类的。

      如果是数字,设置两个阈值会更容易。如果它是分类的,事情就会变得容易得多。只需指定哪些类别属于差、中或好。然后简单的数据框操作就可以工作了。

      如果您仍然感到困惑,请随时给我发送 cmets。

      罗文

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 2014-09-16
        • 2014-09-11
        • 2014-07-24
        • 2017-02-15
        • 2016-03-10
        • 2017-12-09
        • 2015-02-09
        相关资源
        最近更新 更多