【问题标题】:Precomputed distances for spectral clustering with scikit-learn使用 scikit-learn 进行谱聚类的预计算距离
【发布时间】:2016-02-19 19:49:39
【问题描述】:

我很难理解频谱聚类文档here

具体来说。

如果您有一个相似度矩阵,例如距离矩阵,其中 0 表示相同的元素,而高值表示非常不同的元素,则可以通过应用高斯将其转换为非常适合算法的相似度矩阵(RBF,热)内核: np.exp(- X ** 2 / (2. * delta ** 2))

对于我的数据,我有一个大小为(n_samples, n_samples) 的完整距离矩阵,其中大的条目表示不同的对,小的值表示相似的对,零表示相同的条目。 (即唯一的零点沿对角线)。

所以我需要做的就是用affinity = "precomputed" 构建SpectralClustering 对象,然后将转换后的距离矩阵传递给fit_predict

我坚持建议的转换方程。 np.exp(- X ** 2 / (2. * delta ** 2))

这里的X 是什么? (n_samples, n_samples) 距离矩阵?

如果是这样,delta 是什么。只是X.max()-X.min()吗?

致电np.exp(- X ** 2 / (2. * (X.max()-X.min()) ** 2)) 似乎是正确的做法。 IE。大条目变得相对较小,小条目相对较大,所有条目都在 0 和 1 之间。对角线全为 1,这是有道理的,因为每个点都与自身最接近。

但我很担心。我想如果作者想让我使用np.exp(- X ** 2 / (2. * (X.max()-X.min()) ** 2)),他会告诉我只使用那个,而不是把delta扔在那里。

所以我想我的问题就是这个。 delta 是什么?

【问题讨论】:

    标签: python-2.7 scikit-learn


    【解决方案1】:

    是的,X 在这种情况下是距离矩阵。 delta 是一个比例参数,您可以随意调整。它控制着距离/相似性关系的“紧密度”,也就是说,一个小的增量会增加远点的相对差异性。

    请注意,delta 与 RBF 内核的 gamma 参数的倒数成正比,前面在您提供的文档链接中提到:两者都是可用于调整聚类结果的免费参数。

    【讨论】:

    • delta 是否有建议值? X.max()-X.min() 常用吗?
    • delta 的最佳选择完全取决于您的数据。太大了,远点会被认为是相邻的。太小了,相邻的点会被认为距离很远。您可能希望将其设为数据范围或标准差的倍数并对其进行调整,直到获得良好结果。
    • 好吧,出于我使用它的目的,我真的没有能力调整它。我需要一个基于Xdelta 的公式,它可能会做得很好。基于这个讨论,我将只使用X.max()-X.min()。我将推迟一天给你答案,看看是否有人提出了默认的 delta 最佳实践。感谢您的帮助。
    • 还有一点:R kernlab 包有一个谱聚类例程,带有用于自动确定此参数的启发式算法:inside-r.org/packages/cran/kernlab/docs/specc 没有关于启发式算法背后的推理的信息,R 代码通常看起来对我来说就像意大利面,但你可能会发现它很有用!
    • 我想我宁愿把手放在搅拌机里也不愿研究 R 代码,但谢谢你的提示。
    猜你喜欢
    • 2016-03-17
    • 2019-11-12
    • 2012-12-30
    • 2017-06-09
    • 2016-03-16
    • 2016-12-07
    • 2012-02-15
    • 2015-06-07
    • 2015-09-14
    相关资源
    最近更新 更多