我正在使用 PyCluster 的 kMeans 对一些数据进行聚类——主要是因为 SciPy 的 kMeans2() 产生了无法克服的错误。 这里提到了。无论如何,PyCluster kMeans 运行良好,我现在正在尝试优化 kMeans 集群的数量。PyCluster 的随附文献表明,我可以通过实现 EM 算法来优化其 kMeans——此处为第 13 页的底部——但我找不到一个示例。
有人可以指点我一个 PyCluster k-means 优化问题吗?提前感谢您的帮助。
我正在使用 PyCluster 的 kMeans 对一些数据进行聚类——主要是因为 SciPy 的 kMeans2() 产生了无法克服的错误。 这里提到了。无论如何,PyCluster kMeans 运行良好,我现在正在尝试优化 kMeans 集群的数量。PyCluster 的随附文献表明,我可以通过实现 EM 算法来优化其 kMeans——此处为第 13 页的底部——但我找不到一个示例。
有人可以指点我一个 PyCluster k-means 优化问题吗?提前感谢您的帮助。
PyCluster 的手册指的是与您所询问的不同的优化问题。当您询问如何确定最佳聚类数时,该手册涉及如何在给定聚类总数的情况下找到最佳聚类。要理解的概念是,k-means 是一种 EM(期望最大化问题)算法,不能保证最优聚类解决方案(其中最优聚类解决方案可以定义为最小化总和的聚类分配每个数据点与其聚类的平均值之间的距离的平方)。k-means 的工作方式是这样的:
set cluster means to equal k randomly generated points
while not converged:
# expectation step:
for each point:
assign it to its expected cluster (cluster whose mean it is closest to)
# maximization step:
for each cluster:
# maximizes likelihood for cluster mean
set cluster mean to be the average of all points assigned to it
k-means 算法将在给定初始化的情况下输出最佳解决方案,但不一定会在全局范围内找到最佳聚类解决方案。这就是手册在第 13 页底部所指的内容。手册说 kcluster 例程将多次执行 EM(这正是 k-means 算法)并选择最佳聚类。它从来没有提到找到最佳集群数量的问题。
也就是说,您可以使用一些启发式方法来确定最佳集群数量(例如参见Wikipedia):