python - Sklearn 中的高维 DBSCAN

标签 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

最佳答案

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. 将数据转换为二维(查看 thisthis)
  2. 重新提出您的问题,并正确定义问题的根源和您想要的内容。
  3. 使用 allow_nd=True 重新编译源代码试试运气

关于python - Sklearn 中的高维 DBSCAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833983/

相关文章:

machine-learning - 获取 ELKI OPTICSXi 的簇边界

python - 如何在 r 或 python 中查找并突出显示彼此一定范围内的值簇?

python - Pandas 数据框每两行的组合

python - sklearn 的 LabelBinarizer 的作用可以与 DictVectorizer 类似吗?

python - 使用BioPython时出现Urllib错误

python - 检查通过 python cmd 模块传递的参数

python - 使用 Pyodbc + UnixODBC + FreeTDS 设置连接设置

python - 使用 google translate 从 python 脚本翻译 url

python - Scikit - SGDRegressor 不适合

python - 在 DBSCAN 中使用 Mahalanobis 等替代距离度量