Python 蛇形聚类的聚类算法
我正在寻找一个好的算法来识别数据集群,这些集群往往是线性的,有点像蛇一样的集群。我尝试过许多标准的聚类算法,如DBSCAN、OPTICS、HDBSCAN和RobustSingleLink,但它们看起来都像下图,在snake聚类和常规聚类之间变得混乱。有人知道一个好的聚类算法来解决这个问题吗 Anony Mouse的回答很有帮助。我将添加一些细节来说明我是如何应用它的。我使用了DBSCAN,调整了X轴的比例和DBSCAN eps值,直到它开始拾取更多的水平簇。这很有效,离我的目标足够近了Python 蛇形聚类的聚类算法,python,cluster-analysis,dbscan,optics-algorithm,Python,Cluster Analysis,Dbscan,Optics Algorithm,我正在寻找一个好的算法来识别数据集群,这些集群往往是线性的,有点像蛇一样的集群。我尝试过许多标准的聚类算法,如DBSCAN、OPTICS、HDBSCAN和RobustSingleLink,但它们看起来都像下图,在snake聚类和常规聚类之间变得混乱。有人知道一个好的聚类算法来解决这个问题吗 Anony Mouse的回答很有帮助。我将添加一些细节来说明我是如何应用它的。我使用了DBSCAN,调整了X轴的比例和DBSCAN eps值,直到它开始拾取更多的水平簇。这很有效,离我的目标足够近了 sca
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])
您也可以尝试或选择其他型号。另外,我现在还不想放弃DBSCAN,也许你只需要多使用一些参数。你也可以尝试使用或模型。另外,我现在还不想放弃DBSCAN,也许你只需要多使用一些参数。不要试图通过反复试验来解决这个问题 了解您的问题,了解您的数据,然后选择算法
dx=100
dy=10
由于您似乎正在使用python(我不知道它的任何实现),您将不得不“黑客”DBSCAN来模拟这种行为。尝试以下操作:按dx/dy缩放y轴(此处:10)。然后尝试使用半径为eps=dx、最小采样数为10和曼哈顿公制的DBSCAN。因为sklearn也没有最大范数,所以您也可以旋转45度,并使用更大的半径来更接近广义DBSCAN使用上述规则所给出的结果。但最重要的是调整这两个特征的权重(不要使用启发式规范化,而是根据问题选择可解释的值!)不要试图通过反复试验来解决这个问题 了解您的问题,了解您的数据,然后选择算法
dx=100
dy=10