Python 在Sklearn中进行群集时发生ValueError

Python 在Sklearn中进行群集时发生ValueError,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我有一个如下形状的RGB图像((3L,5L,5L)。这意味着5×5像素的图像有3层(R,G和B)。我想使用DBSCAN算法进行聚类,如下所示。但我收到一条错误消息,ValueError:Found array with dim 3。要进行聚类,需要说明两点之间的距离。DBSCAN不是一种图形聚类算法,它使用特征。需要将每个像素表示为特征,以便距离为e适当 特征可以是RGB,在这种情况下,相似的颜色聚集在一起。或者特征还可以包括x、y坐标,这意味着还需要考虑空间距离 如果你想考虑空间距离,我建议你

我有一个如下形状的RGB图像((3L,5L,5L)。这意味着5×5像素的图像有3层(R,G和B)。我想使用DBSCAN算法进行聚类,如下所示。但我收到一条错误消息,
ValueError:Found array with dim 3。要进行聚类,需要说明两点之间的距离。DBSCAN不是一种图形聚类算法,它使用特征。需要将每个像素表示为特征,以便距离为e适当

特征可以是RGB,在这种情况下,相似的颜色聚集在一起。或者特征还可以包括x、y坐标,这意味着还需要考虑空间距离


如果你想考虑空间距离,我建议你看一下ScKIT图像的分割模块,它包含了几种流行的图像分割方法。

如果你查看文档:X:数组或稀疏(CSR)的形状矩阵(n-样本,n-特征),或形状数组(n-样本,n-样本)你如何定义两个像素之间的距离?@yangjie我不知道。你是指通道上两个像素之间的距离(体素)?因此,是的,RGB是特征,x,y坐标是空间距离。我必须对数据进行聚类,即RGB通道值相对于x,y坐标。这意味着,RGB值越近,x,y坐标就越接近,也就是说,它们将落入同一个簇中。在这种情况下,DBS可以工作吗?它可以工作,但您需要t将所有数据放入一个2d数组,其中每行为一个像素,前三列为RGB值,后两列为x和y值(可能需要将它们中的任何一列乘以某个值,以使它们达到相同的数量级)。
import numpy as np
from sklearn.cluster import DBSCAN
from collections import Counter

data = np.random.rand(3,5,5)
print np.shape(data)
print data

db = DBSCAN(eps=0.12, min_samples=3).fit(data)
print db
DBSCAN(algorithm='auto', eps=0.12, leaf_size=30, metric='euclidean',
    min_samples=1, p=None, random_state=None)
labels = db.labels_

print Counter(labels)