2016-08-05 68 views
0

我正在尝试使用MiniBatchKMeans将NLP数据进行流式处理并对其进行群集处理,但无法确定需要多少个群集。我想要做的是定期拍摄轮廓分数,如果它低于某个阈值,则增加质心的数量。但据我所知,n_clusters在初始化群集器时设置,不能在不重新启动的情况下进行更改。我错了吗?有没有解决这个问题的另一种方法可以避免这个问题?在拟合过程中是否可以增加KMeans中的质心数?

+2

尽管事实证明,k-means是启发式的,我敢肯定,运行期间聚类数量的变化会对交替最小化类型的算法产生极其负面的影响(你会陷入由于现在已经过时的参数,因此只有当地的最小值并且只有那里)。至少,这是我的想法!只需对n_cluster的不同值进行优化并比较你的分数(如果你信任它们的话)。 k-means应该足够快来做这种验证策略。这种方法会更稳定! – sascha

回答

2

在优化过程中这样做并不是一个好主意,因为它会大大改变优化过程。它将基本上重置整个优化。有一些策略,比如平分k-均值,试图在聚类过程中学习k的值,但它们比将k增加1更棘手 - 他们决定要分割一个特定的聚类,并尝试选择好的初始质心这个集群保持一定的稳定性。

此外,增加k并不一定会改善Silhouette。它会平均改善SSQ,所以你也不能用SSQ作为选择k的启发。

最后但并非最不重要的是,计算Silhouette是O(n^2)。经常运行太昂贵了。如果您有足够大的数据量来要求MiniBatchKMeans(其中确实是仅用于海量数据),那么您显然不能计算出Silhouette。

+0

好的,谢谢,我不知道,它大于50GB的元数据,所以是的,它很大 –

+0

然后让我给你一个重要的建议:**先使用样本**,测试你的方法。只对您的完整数据进行缩放*。因为根据我的经验,k-means会令你失望(请让我知道它是否给你带来了好的结果!) - 我一直在考虑做一些关于k-means的工作(并且我有一些很好的想法),但是它在我的问题上从未效果良好。 –

+0

我在样本上使用过它,它工作得很好 –

相关问题