Bee*_*ars 2 c python machine-learning scipy k-means
我正在使用PyCluster的kMeans来聚集一些数据 - 主要是因为SciPy的kMeans2()产生了一个不可克服的错误. 这里提到.无论如何,PyCluster kMeans运行良好,我现在正在尝试优化kMeans集群的数量.PyCluster的附带文献表明我可以通过实现EM算法来优化其kMeans - 这里是第13页的底部 - 但我找不到一个例子.
有人可以指点一下PyCluster k-means优化问题吗?在此先感谢您的帮助.
小智 7
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
Run Code Online (Sandbox Code Playgroud)
给定初始化时,k-means算法将输出最佳解决方案,但不一定能在全局范围内找到最佳的聚类解决方案.这是本手册在第13页底部引用的内容.手册说kcluster例程将多次执行EM(这正是k-means算法)并选择最佳聚类.它从未提到找到最佳簇数的问题.
也就是说,您可以使用一些启发式方法来确定最佳簇数(例如,请参阅维基百科):