Sklearn中的高维DBSCAN

时间:2019-02-22 19:34:38

标签: python scikit-learn cluster-analysis 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

1 个答案:

答案 0 :(得分:0)

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重新编译源代码会很幸运