VGG 功能的 K 均值聚类不起作用
K-means clustering for VGG features is not working
我有一个大小为 37759x4096 的多维数组。 37759 是特征观察的数量,每个特征的大小为 4096。
这些特征是我为 37759 inages 提取的图像的 vgg 特征。我想执行 k 均值聚类以查看它们是否会分组在相同的 类.
中
代码片段:
from sklearn.cluster import KMeans
import numpy as np
features = np.asarray(features) #converting list to features
kmeans = KMeans(n_clusters=17).fit(features)
输出:
In [26]: kmeans.labels_
Out[26]: array([ 0, 0, 0, ..., 11, 11, 11], dtype=int32)
In [27]: len(kmeans.labels_)
Out[27]: 37759
In [28]: kmeans.cluster_centers_
Out[28]:
array([[ 2.46095985e-01, -4.32133675e-07, 6.41381502e-01, ...,
9.16770659e-09, 2.39292532e-03, 9.38249767e-01],
[ 1.18244767e+00, 8.83443374e-03, 8.44059408e-01, ...,
6.17001206e-09, 7.23063201e-03, 4.57734227e-01],
[ 5.05003333e-01, 2.45869160e-07, 1.07537758e+00, ...,
-4.24915925e-09, 2.19564766e-01, 6.04652226e-01],
...,
[ 2.72164375e-01, 7.94929452e-03, 8.18695068e-01, ...,
-3.43425199e-09, 7.62813538e-03, 2.84249210e+00],
[ 1.03947210e+00, 1.03959814e-04, 7.81472027e-01, ...,
7.42147677e-09, 1.28777415e-01, 8.22515607e-01],
[ 1.55310243e-01, 6.24559261e-02, 7.55328536e-01, ...,
-3.84170562e-09, 2.09998786e-02, 4.18608427e-01]], dtype=float32)
首先,因为它是一个高维数据,所以我不确定 k-means 是否是处理它的最佳方法。它只分类了 11 个集群而不是 17 个。
但无论如何,
- 我们如何确保它是按行(根据样本观察)而不是按列(特征)对数组进行聚类
- 相同类的特征堆叠在一起,但我们可以看到
kmeans.cluster_centers_
中的聚类中心非常不同,从前三个数组推断
- 如何可视化这些数据?我如何找到独特的数组?
- 关于如何对像这样的超高维数据进行聚类,您有什么建议吗?
kmeans 中的簇可以变空并因此消失。
如果发生这种情况,初始中心选择不当,结果通常不是"stable"。如果您尝试不同的初始种子,您可能会得到截然不同的结果。
对此类数据进行聚类和可视化很困难,而且您找不到简单的开箱即用解决方案。
我有一个大小为 37759x4096 的多维数组。 37759 是特征观察的数量,每个特征的大小为 4096。
这些特征是我为 37759 inages 提取的图像的 vgg 特征。我想执行 k 均值聚类以查看它们是否会分组在相同的 类.
中代码片段:
from sklearn.cluster import KMeans
import numpy as np
features = np.asarray(features) #converting list to features
kmeans = KMeans(n_clusters=17).fit(features)
输出:
In [26]: kmeans.labels_
Out[26]: array([ 0, 0, 0, ..., 11, 11, 11], dtype=int32)
In [27]: len(kmeans.labels_)
Out[27]: 37759
In [28]: kmeans.cluster_centers_
Out[28]:
array([[ 2.46095985e-01, -4.32133675e-07, 6.41381502e-01, ...,
9.16770659e-09, 2.39292532e-03, 9.38249767e-01],
[ 1.18244767e+00, 8.83443374e-03, 8.44059408e-01, ...,
6.17001206e-09, 7.23063201e-03, 4.57734227e-01],
[ 5.05003333e-01, 2.45869160e-07, 1.07537758e+00, ...,
-4.24915925e-09, 2.19564766e-01, 6.04652226e-01],
...,
[ 2.72164375e-01, 7.94929452e-03, 8.18695068e-01, ...,
-3.43425199e-09, 7.62813538e-03, 2.84249210e+00],
[ 1.03947210e+00, 1.03959814e-04, 7.81472027e-01, ...,
7.42147677e-09, 1.28777415e-01, 8.22515607e-01],
[ 1.55310243e-01, 6.24559261e-02, 7.55328536e-01, ...,
-3.84170562e-09, 2.09998786e-02, 4.18608427e-01]], dtype=float32)
首先,因为它是一个高维数据,所以我不确定 k-means 是否是处理它的最佳方法。它只分类了 11 个集群而不是 17 个。 但无论如何,
- 我们如何确保它是按行(根据样本观察)而不是按列(特征)对数组进行聚类
- 相同类的特征堆叠在一起,但我们可以看到
kmeans.cluster_centers_
中的聚类中心非常不同,从前三个数组推断 - 如何可视化这些数据?我如何找到独特的数组?
- 关于如何对像这样的超高维数据进行聚类,您有什么建议吗?
kmeans 中的簇可以变空并因此消失。
如果发生这种情况,初始中心选择不当,结果通常不是"stable"。如果您尝试不同的初始种子,您可能会得到截然不同的结果。
对此类数据进行聚类和可视化很困难,而且您找不到简单的开箱即用解决方案。