【问题标题】:Find which points belong to a cluster in DBSCAN in python在python中查找哪些点属于DBSCAN中的集群
【发布时间】:2019-08-31 10:07:07
【问题描述】:

大家好,我已经在一组点(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)

以上是代码。

【问题讨论】:

    标签: python machine-learning unsupervised-learning dbscan


    【解决方案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)]
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2019-09-19
      • 2018-09-15
      • 2020-08-27
      • 2014-05-22
      • 2014-06-29
      • 1970-01-01
      • 2013-01-15
      • 2016-02-28
      相关资源
      最近更新 更多