我一直在使用KMeans从一组线中提取簇,我对结果印象不是很好,我想尝试DBSCAN,看看这是否能产生更好的效果。 DBSCAN是否将群集字输出为KMeans?
我能够使用DBSCAN并且能够将群集的数量输出为“3”但是我想知道是什么上下文驱动它来制作'3'群集(我想知道这些词)
这是我的代码段
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_
# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
print('Estimated number of clusters: %d' % n_clusters_)
print("Silhouette Coefficient: %0.3f"% metrics.silhouette_score(X, labels))
答案 0 :(得分:1)
您无法直接控制DBSCAN生成的群集数量。它产生的数量与给定密度水平下的数量相同;最好通过改变epsilon来完成。
请注意,它还会产生 noise ,即一个群集(可能是第一个)不是群集,但是不属于任何群集的剩余点。但是当你简单地丢弃这些点时,你的轮廓会变得虚假。
由于DBSCAN集群可能是任意形状的,因此没有任何有意义的“质心”。如在k-意味着你可以解释"单词" (但这种解释通常都很好)。
请阅读维基百科文章& DBSCAN文献了解更多细节。
答案 1 :(得分:-1)
首先,您应该清楚为什么使用DBSCAN。用于检测噪声或用于检测密集数据中的簇。如果没有理由你必须首先从文献中找到原因,那么应该尝试应用/使用DBSCAN算法。