Sklearn中的高维DBSCAN [复制]

问题描述 投票:1回答:1

这个问题在这里已有答案:

无论如何,在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
python scikit-learn cluster-analysis dbscan
1个回答
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])

你真正的问题是你正试图将三维图像数据输入到二维算法。

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

  1. 将您的数据投射到2d(查看thisthis
  2. 通过正确定义问题的根源和所需内容重新打开您的问题。
  3. 试试用allow_nd=True重新编译源代码的运气
© www.soinside.com 2019 - 2024. All rights reserved.