【发布时间】:2020-03-15 09:02:27
【问题描述】:
为了将 scikit-learn KMeans 中实现的 k-means 收敛标准重新用于我的基于 tensorflow 的 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 大 很多)。
这怎么会发生(或者我忽略了什么)?我注意到“迭代时收敛”部分也丢失了,但观察到的消息对我来说绝对没有意义。
【问题讨论】:
-
您能告诉我们sklearn的版本吗,请使用:
print(sklearn.__version__)。而且,你正在使用什么版本的 python。 -
当然,Ubuntu 18.04 LTS 上的 sklearn 0.21.3 和 python 3.7.4
标签: python scikit-learn k-means