嗨,大家好,我在一组点(4953点)上安装了DBSCAN模型。现在我需要找到属于不同聚类的点,即所有输入值都属于所有聚类。我总共有10个聚类,如何找到呢?
db = DBSCAN(eps=0.0003,min_samples=20,n_jobs=-1).fit(X_scaled)
y_pred = db.fit_predict(X_scaled)
pred_labels = db.labels_
print(len(pred_labels))
n_clusters_ = len(set(pred_labels))- (1 if -1 in pred_labels else 0)
print(n_clusters_)
plt.scatter(list(range(len(df_median2))),X_scaled[:,0],c=y_pred, cmap='Paired')
plt.ylim(0.1,0.4)
上面是代码。
答案 0 :(得分:1)
您有X_scaled
个输入值数组(可能还有缩放前的X
个原始值数组)和pred_labels
个簇标签数组。如果某些样本未分配给簇并且被归类为噪声,则n_clusters_
的值将比len(set(pred_labels))
的值高一个。但是这两个数组具有相同数量的元素,且顺序相同,因此您可以在pred_labels
数组中为X_scaled
数组中的每个元素查找值,例如pred_labels[0]
将返回第一个样本的聚类标签。如果您在任何标签中看到-1
,则它们不是聚类标签,而只是表示未分配给任何聚类的噪声样本的一种方式。
您还可以连接两个数组,以便将簇标签与原始样本并排保存:
import numpy as np
samples_w_lbls = np.concatenate((X_scaled,pred_labels[:,np.newaxis]),axis=1)
然后,您可以将该组合数组过滤为具有特定群集标签值的行:
#Get rows with cluster label value of 5:
filter = np.asarray([5])
samples_w_lbls[np.in1d(samples_w_lbls[:,-1], filter)]