消息不适合sklearn k-means收敛实现

问题描述 投票:0回答:1

为了在基于张量流的k-means实现中重复使用scikit-learn KMeans中实现的k-means收敛标准,我需要理解它,但我希望对此做出解释,我希望对此进行解释:] >

KMeans收敛于此消息:

迭代45,惯性6.993125中心偏移2.610457e-03

公差8.374284e-06

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cluster/_k_means.py中的实现(第442ff行,函数_kmeans_single_lloyd)如下:

center_shift_total = squared_norm(centers_old - centers)
if center_shift_total <= tol:
    if verbose:
        print("Converged at iteration %d: "
              "center shift %e within tolerance %e"
              % (i, center_shift_total, tol))
    break

仅当center_shift_total

的值小于tolerance的值时,才打印消息。从输出中可以看到,在我的KMeans运行中情况并非如此(center_shift_total实际上比tol大[[uch]]。)这怎么发生(或我忽略了什么?我注意到“迭代时收敛”部分也丢失了,但是观察到的消息对我来说毫无意义。为了在基于张量流的k-means实现中重复使用scikit-learn KMeans中实现的k-means收敛标准,我需要理解它,但我观察到了这一点……

我克隆了scikit-learn存储库,并检出了0.21.3标签。然后,我在所有.py文件中搜索“容忍度”,发现的唯一地方就是您引用的内容。因此,我看不到消息Iteration 45, inertia 6.993125 center shift 2.610457e-03 within tolerance 8.374284e-06可能来自的任何地方。
我唯一的猜测是,如果某件东西是从不同的线程打印出来的,那么这两个打印件是否发生冲突?我什至不知道在python中是否可能。

并且是的,如果center_shift_total高于tol,则该代码段将无法打印该消息。

无论如何,祝你好运。

python scikit-learn k-means
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.