首页 > 解决方案 > Sklearn中的高维DBSCAN

问题描述

sklearn 中是否有允许通过 DBSCAN 算法进行更高维聚类的方法?就我而言,我想在 3 维和 4 维数据上进行聚类。我检查了一些源代码,发现 DBSCAN 类调用了 sklearn utils 包中的 check_array 函数,该包包含一个参数 allow_nd。默认情况下,它设置为 false,似乎没有办法通过 DBSCAN 类构造函数来设置它。有什么想法/想法还是我错过了一些简单的东西?谢谢!

编辑:最小代码(我使用的是 sklearn 版本 0.20.2)。

import numpy as np
from sklearn.cluster import DBSCAN

data = np.random.rand(128, 416, 1)
db = DBSCAN()
db.fit_predict(data)

这是一个示例,但它也适用于我加载的任何真实数据。这是返回的确切错误:

ValueError: Found array with dim 3. Estimator expected <= 2.

这是上面ndarray的形状和ndim。

(128, 416, 1)
3

标签: pythonscikit-learncluster-analysisdbscan

解决方案


DBSCAN确实对数据维度没有限制。

证明:

from sklearn.cluster import DBSCAN
import numpy as np
np.random.seed(42)
X = np.random.randn(100).reshape((10,10))
clustering = DBSCAN(eps=3, min_samples=2).fit(X)
clustering.labels_
array([ 0,  0,  0, -1,  0, -1, -1, -1,  0,  0])

您真正的问题是您正在尝试将 3d 维图像数据提供给 2d 算法。

在您的情况下,您有几个行动方案:

  1. 将您的数据转换为 2d(查看thisthis
  2. 通过正确定义问题的根源和您想要的内容重新打开您的问题。
  3. 重新编译源代码试试运气allow_nd=True

推荐阅读