python 的凝聚聚类算法有多精确?

How precise is python's agglomerative clustering algorithm?

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

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

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

提前致谢

Scikit-learn 的 AgglomerativeClustering class 将 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 表示。