k_mean.fit 返回 ValueError: setting an array element with a sequence

Posted

技术标签:

【中文标题】k_mean.fit 返回 ValueError: setting an array element with a sequence【英文标题】:k_mean.fit returns ValueError: setting an array element with a sequence 【发布时间】:2018-09-18 03:47:42 【问题描述】:

我正在尝试通过已保存为数组列表的图像特征表示来通过 kmeans 进行聚类。

features_list = []
features = np.asarray(features_list)  

features_flat = features.reshape((features.shape[0], -1))
k_means = cluster.KMeans(n_clusters=10, n_jobs=-1)
k_means.fit(features_flat)

关于 features_flat 的信息如下:

print(features_flat)

Out:[[ array([[[ 0.36470588,  0.32156863,  0.2627451 ,  0.36862745],
    [ 0.36470588,  0.32156863,  0.2627451 ,  0.36862745],
    [ 0.36470588,  0.32156863,  0.2627451 ,  0.36862745],
    ..., 
[ array([[[ 0.19607843,  0.19215686,  0.14117647,  0.30980392],
    [ 0.19607843,  0.19215686,  0.14117647,  0.30980392],
    [ 0.19607843,  0.19215686,  0.14117647,  0.30980392],
    ..., 
    ]]

np.unique(list(map(len, features_flat)))
Out: array([1])

运行 k_means.fit() 时出现以下错误

ValueError: setting an array element with a sequence.

如何在创建正确类型的矩阵时保留数组中的数据?

【问题讨论】:

"features_flat" 不平坦。它是 3d 张量列表的列表。 KMeans 的数据必须是二维数组 - 只需处理您的数据,使其确实是二维的,具体取决于内部的内容。由于“重塑”不起作用,我怀疑您的“特征”是大小不同,这将导致 numpy 将每个元素视为一些神奇的对象,而不是可以调整大小的数组跨度> @lejlot 我的数据是 3d 的,因为它们是彩色图像的表示。有没有办法在转换为 2d 时保留颜色数据?.. dataset 必须是 2D,而不是 datapoint。您的单个 point 是 3D,这使数据集成为 4D,但它必须是 2D。 K-Means 不关心像素的“含义”,因此如果您想要对图像进行聚类,您最终会扁平化它们,从而将您的 3D 图像转换为 1D 平面向量。关键是每张图片都需要相同的大小。我怀疑你的不是(否则重塑会起作用) 【参考方案1】:

谢谢@lejlot

它适用于来自此转换的图像表示。

Standardized image size for each image + mapped to grayscale

我希望它可以与下面的图像表示一起使用

Original image transformation

,但这解决了这个特定的问题。

【讨论】:

以上是关于k_mean.fit 返回 ValueError: setting an array element with a sequence的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 返回:ValueError: Unknown label type: 'continuous'

sklearn 分类度量 auc 返回 ValueError

python django ajax:ValueError:视图没有返回 HttpResponse 对象。它返回 None 而不是

.format() 在使用 0:g 删除尾随零时返回 ValueError

工作管道上的 GridSearchCV 返回 ValueError

Tensorflow:实现新的损失函数返回“ValueError:没有为任何变量提供梯度”