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
最佳答案
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 算法。
根据您的情况,您有几种行动方案:
关于python - Sklearn 中的高维 DBSCAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833983/