我正在寻找一种好的算法来识别数据集群,其中集群往往是线性的,有点像蛇一样的集群。我尝试了一些标准的聚类算法,如 DBSCAN、OPTICS、HDBSCAN 和 RobustSingleLinkage,但它们看起来都像下图一样,在蛇形簇和常规簇之间混淆了。有谁知道一个好的聚类算法来解决这个问题?
Anony-Mousse 的回答很有帮助。我将添加一些细节来展示我是如何应用它的。我使用了 DBSCAN,调整了 X 轴的比例和 DBSCAN eps 值,直到它开始拾取更多的水平簇。这非常有效,足以满足我的目的。
scan = cluster.DBSCAN(eps=20, min_samples=10, metric="l1", n_jobs=-1)
X_val[:, 0] = X_val[:, 0]/20000
scan.fit(X_val)
y_pred = scan.labels_.astype(np.int) + 1
# y_pred = np.where(y_pred > 0, 1, 0)
plt.scatter(X.iloc[:, 0]/20000, X.iloc[:, 1], color=colors[y_pred])