python - 在python中查找哪些点属于DBSCAN中的集群
问题描述
大家好,我已经在一组点(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)
以上是代码。
解决方案
您有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)]
推荐阅读
- python - 如何获取日期列表中一个月的最后一天
- java - 将 JavaFX 视图作为对象获取?
- facebook - 页面公共内容访问的 Facebook 应用审查程序不适合服务器端脚本
- apache - 本地 apache 无法解析虚拟主机
- javascript - 如何获得 null 而不是函数的 Enzyme type()?
- ionic3 - 有没有办法在使用文件传输插件下载文件后提供共享选项
- php - 在同一函数中从数组递归构建页面菜单
- eclipse - Eclipse:Jasper Report Studio 插件:不显示存储库资源管理器
- umbraco - Umbraco:您如何在整个网站的内容节点上用另一个宏替换一个宏?
- java - 如何将代码外部化为抽象类