【问题标题】:an algorithm for clustering visually separable clusters一种视觉上可分离的聚类算法
【发布时间】:2016-12-04 17:53:23
【问题描述】:

在使用 PCA 后,我在 2D 中可视化了一个数据集。 1 维是时间,Y 维是第一个 PCA 组件。如图所示,点(A,B)之间有较好的分离。但不幸的是,聚类方法(DBSCAN、SMO、KMEANS、Hierarchical)无法将这些点聚类在 2 个聚类中。正如你在 A 部分看到的,有一个相对的连续性,这个连续的过程结束了,B 部分开始了,与 A 和 B 之间的过去数据相比,存在相当大的差距。

如果您能向我介绍任何方法和算法(或根据数据的分布设计任何度量标准),以便能够在没有可视化的情况下分离 A 和 B,我将不胜感激。非常感谢。

这是上图(第一个)的 2 个 PCA 组件的图。另一个也是其他数据集的组件图,我也得到了不好的结果。

【问题讨论】:

    标签: machine-learning cluster-analysis visualization distance pca


    【解决方案1】:

    如果 PCA 为您提供了良好的分离,您可以在通过 PCA 特征向量投影数据后尝试聚类。如果您不想使用 PCA,那么无论如何您都需要一种替代的数据投影方法,因为失败的聚类方法意味着您的数据在原始维度中不可分离。您可以查看非线性聚类方法,例如基于内核的方法或spectral clustering。或者定义自己的非欧几里得度量,这实际上只是另一种数据投影方法。

    但显然使用 PCA 似乎最适合您的情况(Occam razor:使用适合您数据的最简单模型)。

    【讨论】:

    • 谢谢。我想使用 PCA。你能解释更多吗。因为我在 PCA 组件上使用了集群,但没有得到想要的结果。
    • 您是否在第一个数据集(这会给您带来良好结果的数据集)上学习 PCA 投影,然后在第二个更难的数据集上应用投影(无需学习!)?如果这对您没有帮助,那么您确实应该查看光谱聚类,或者正如 Anony-Mousse 所说的时间序列,因为显然您应该学习有时会中断的时间重复主题(A)(B,异常) .
    • 谢谢。请考虑第二个和第三个情节。 x 和 y 轴是 PCA 组件(PC 1 和 PC2)。你知道测试光谱的任何好的和精确的工具吗?我找到了一些 Matlab 代码,但它们没有很好的结果,并且与这 2 个数据集(2 和 3)上的其他聚类方法一样。
    • 是的,我看到了第二和第三个情节,这就是我问你的原因:你是使用在第二个情节上学到的 PCA 生成了第三个情节,还是生成了一个新的 PCA 投影?关于光谱聚类,您应该查看scikit-learn spectral clustering algorithms,我没有使用它们,但它们看起来很好并且很好地解释了。这里还有a pretty good tutorial on spectral clustering
    • 没有。第二个和第三个图是针对两个不同的数据集的。它们都是相关数据集的 PCA 组件的可视化。
    【解决方案2】:

    这是一个时间序列,显然您正在寻找变化点或想要分段这个时间序列。

    将此数据集视为二维x-y数据集,此处不要使用聚类;而是选择一种实际上是为时间序列设计的算法。

    首先,绘制series[x] - series[x-1],即一阶导数。您可能需要移除季节性以改善结果。没有聚类算法可以做到这一点,它们没有季节性或时间的概念。

    【讨论】:

    • 谢谢 Anony-Mousse。一如既往的犀利!实际上,A部分代表正常点,B部分代表某种异常值,或者说异常点。现在,我应该能够使用 PC 组件以无人监督的方式将它们分开。 PC 组件在某些数据集中具有很好的分离性,但在其他一些数据集中则不是很好。你能解释更多来处理这种分布并能够达到相对分离吗?
    • 先去掉季节性!
    • 帖子已更新。较早的图是 PCA 第一个分量的时间图。我当然不是想要最好的结果。有2045个正常点和200个异常点。例如,在一个集群中有大约 100-120 个 B 点对我来说这两个数据集非常好。
    • 不要忽视时间。使用使用季节性和时间的方法来获得更好的结果。
    • 我根本没有使用过时间序列。你能说出一些可以遵循的方法吗?你的意思是我应该将时间作为一项新功能添加到 PCA 组件中,然后使用聚类和其他无监督方法?
    【解决方案3】:

    我不知道您是否可以轻松设计一种算法来处理这种情况,这很危险(根据目前的能力)接近“读懂我的想法”聚类。你有一个重要的小巷,你已经标记了这个部门。您在 (1700, +1/3) 附近有一个几乎一样好,在 (1850, 0.45) 附近有一个隔离。这些将很难说服通用算法在您想要的位置精确地进行一个划分,尽管那个(我认为)仍然是计算上最明显的。

    光谱聚类在寻找差距方面效果很好;我会先试试。您可能不得不要求它提供 3 或 4 个集群来分离您通常想要的集群。您也可以尝试使用 SVM(擅长在数据中寻找小巷),但在无人监督的环境中这样做是很棘手的部分。

    不,KMeans 不起作用;它对密度或连通性不敏感。

    【讨论】:

    • 感谢您的回复。你能解释一下关于光谱聚类的更多信息吗?直到现在我还没有使用它们。
    • 如果您在完成初步调查后 有一个特定的问题,那么我很乐意尝试解释。但是,StackOverflow 不是一个教程网站:我们希望进行初步研究并带着具体问题来到这里。 “多解释一点”太开放了。
    • 你是对的。我第一次听到光谱。其实我以前也遇到过,但没有名字。我正在为这个问题寻找一个好的工具,但我找不到任何好的工具(除了一些无效的 Matlab 代码)。有人吗?
    • 我唯一熟悉的就是我做过质量保证的那个,英特尔的可信分析平台/分析工具套件。但是,TAP 的开销比您可能想要设置的要多。最后我知道,Apache 的 MLlib 没有实现该算法,但自从我上次在 2 月份查看以来,这可能已经改变了。
    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2016-10-14
    • 2011-03-24
    • 2015-02-28
    • 2018-10-13
    • 2019-09-04
    相关资源
    最近更新 更多