【问题标题】:How precise is python's agglomerative clustering algorithm?python的凝聚聚类算法有多精确?
【发布时间】:2021-12-14 11:24:25
【问题描述】:

抱歉,如果这样的问题不适合此平台,但我无法在任何地方找到有关此的任何信息。我正在使用 sklearn 对某些点进行聚类分析;这是我的代码的相关部分:

    clustering = AgglomerativeClustering(n_clusters=None, affinity='euclidean',
                                 distance_threshold=d, linkage='single').fit(i)
    number = clustering.n_clusters_

我想知道我可以定义 'd' 的精度,在这种情况下,它是集群不会合并的距离阈值。例如,如果我设置 d = 0.000002,它会使用这个值还是四舍五入为零?基本可以使用多少位小数。

提前致谢

【问题讨论】:

    标签: python cluster-analysis precision hierarchical-clustering


    【解决方案1】:

    Scikit-learn 的 AgglomerativeClustering 类将 distance_threshold 值存储为 float 类型,这在大多数 Python 系统上意味着双精度,即 64 位。您输入的十进制数在引擎盖下转换为以 2 为底的指数数,并在必要时相应地四舍五入以适合 64 位存储槽。 1 位用于符号,11 位用于指数,52 位用于有效数字。

    请注意,当您有一个诸如0.000002 之类的数字时,该数字以许多零开头并且只有一个有效数字,确定可能的最小值的因素是指数的位数。所以问题是,用 11 位存储的指数可以表示多小的数字? 让我们看看:

    2 ** -(2 ** 11)
    

    输出:0.0

    2 ** -(2 ** 10)
    

    输出:5.562684646268003e-309

    因此,如果您将 d 值输入为十进制数,而不使用指数表示法,则必须输入至少 309 个零才能使该限制生效。因此该值实际上永远不会四舍五入为零,但是除非你的十进制数恰好有一个简单的 base-2 表示,否则会有一个小的舍入误差。

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 2021-09-16
      • 2020-07-07
      • 1970-01-01
      • 2021-07-25
      • 2013-06-09
      • 2014-06-28
      • 2011-12-22
      相关资源
      最近更新 更多