此示例来自Data Science for dummies:
digits = load_digits()
X = digits.data
ground_truth = digits.target
pca = PCA(n_components=40)
Cx = pca.fit_transform(scale(X))
DB = DBSCAN(eps=4.35, min_samples=25, random_state=1)
DB.fit(Cx)
for k,cl in enumerate(np.unique(DB.labels_)):
if cl >= 0:
example = np.min(np.where(DB.labels_==cl)) # question 1
plt.subplot(2, 3, k)
plt.imshow(digits.images[example],cmap='binary', # question 2
interpolation='none')
plt.title('cl '+str(cl))
plt.show()
我的问题是:
答案 0 :(得分:1)
操作DB.labels_ == cl
的输出是一个布尔数组,如果(DB.labels_ == cl)[i]
,则True
为DB.labels_[i] == cl
。
因此np.where
应用于数组DB.labels_ == cl
。如果在单个数组上使用它的输出,则是该数组的非零元素,即元素是True
。
操作np.where(DB.labels_ == cl)
返回等于DB.labels_
的{{1}}元素的索引。这些是cl
中使用的数据元素,fit
已将其标记为群集DB
的一部分。
在这种情况下,cl
返回上一个数组中最小的indice。这意味着它将检索已归类为集群np.min
的一部分的集合的第一个元素。通过循环遍历所有群集,可以检索一组在群集中构成的图像的示例。
此索引对应于data.image中的索引,因为cl
包含数据集中每个点的标签,您需要DB.labels_
。此数据集的顺序与DB.fit
相同。