如何可视化我使用MiniBatchKmeans拟合的高维数据集

时间:2019-07-15 19:21:12

标签: python scikit-learn cluster-analysis data-visualization k-means

上下文:因此,我有一个32k图像的数据集,每个图像均为200x200,是黑白的。我按行主要顺序将200x200照片变成了40k的单个尺寸。我基本上有一个32k x 40k numpy矩阵,第一个值是图像索引,第二个值是该特定图像的像素索引的1或0。我这样运行MiniBatkKmeans:

with open('np_array.pickle', 'rb') as handle:
    np_list = pickle.load(handle)

# used a batch system for k mean so my machine doesn't run out of memory
mbk = MiniBatchKMeans(init='k-means++', n_clusters=5,
                      batch_size=200,
                      max_no_improvement=10, verbose=0)
mbk.fit(np_list)

现在,我想知道什么是“查看”此数据集以及所有形成的聚类的最佳方法,如果可能的话,并且每张照片彼此关联。

3 个答案:

答案 0 :(得分:0)

您可以对高维特征向量执行降维,例如多维缩放(MDS)。因此,您可以将32k特征向量从40k减少到1、2或3维。

我无法告诉您MDS是否是对数据进行降维的最佳方法。看看this博客文章,其中介绍了很多方法。

最后,您将拥有32k的1-,2-或3-d数据点,可以很容易地对其进行可视化。根据数据簇的颜色对它们进行颜色编码,如果幸运的话,它们也会在投影中分开。

答案 1 :(得分:0)

T-SNE可能有助于可视化聚类算法的输出。它显示了相似的点彼此靠近,而在低维空间中相异的点彼此分开。 This文章介绍了如何在python中完成。根据使用情况,您可能要使用PCA或其他答案中提到的链接中提到的其他算法。

答案 2 :(得分:0)

不要指望k均值能在40000维像素值上正常工作。您需要提取更好的功能。 无论如何,几乎所有数据都可能位于一个群集中。

无论如何,在这里忘记散点图吧。

但是每个中心也是200x200像素。因此,您可以轻松地可视化每个群集的“平均”图片。然后还可视化群集中一些最近和最远的样本。

然后您会看到它没有产生有用的簇。