python - 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
解决方案
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 算法。
在您的情况下,您有几个行动方案: