结合数据样本的轮廓分数

时间:2017-12-04 12:37:44

标签: python numpy scikit-learn cluster-analysis

我有一个大数组,我需要聚类并计算轮廓分数,以便为我的数据学习最佳数量的聚类。 问题是,由于np.dot限制,当我尝试运行MemoryError

时,我会silhouette_score(X, c_labels)

我阅读了silhouette_score的源代码,我发现它在另一个方法np.mean的结果上调用了silhouette_samples。所以,我想也许我应该分批发送数据并得到他们的意思。所以,我做了一个实验。我创建了一个10,000x 10,000个数字的二维数组。然后我运行了聚类器,然后我计算了他们的得分:

testX = np.random.random((N, N))
b = MiniBatchKMeans(n_clusters=2, random_state=10)
c_labels = b.fit_predict(testX)
s = silhouette_score(testX, c_labels)

和s = -0.0001115591406734728
然后我运行了批量版本:

ss = []
lastIndex = 0
ss.append(silhouette_score(testX[:batch], c_labels[:batch]))
lastIndex += batch
while lastIndex < len(testX):
    ss.append(silhouette_score(testX[lastIndex:lastIndex+batch], c_labels[lastIndex:lastIndex+batch]))
    lastIndex += batch
np.mean(ss)

我得到了-6.7414138934508567e-05,这与原始结果相差甚远。

所以,我的问题是:有没有办法做到这一点?

0 个答案:

没有答案