首页 > 解决方案 > 如何在我的数据集中找到每个折叠的实例数?

问题描述

我得到了一个包含数据的 .npz 文件。我探索了数据集,并注意到它有 5 种数据类型:

cell_data = np.load("C:/Users/alexs/Documents/DataMining/cell-data.npz")
cell_data.files

在输出中给出这个:

['images', 'counts', 'folds', 'compressed', 'allow_pickle']

以及附上的图片。

我被保证数据集本身有 3 折。计数是一个 Nx6 矩阵,每行对应一个图像块,每列对应 6 种细胞类型(称为 T1、T2、...、T6)。折叠似乎是一个 1xN 矩阵,但我不确定,它包含范围为 {0,2} 的值。

我将如何找出每个折叠的实例数,如果可能的话,我将如何找出折叠的范围,即哪些实例属于哪些折叠(或将实例分组到它们自己的单独数组中,代表每个折叠比如,fold1 = x,fold2 = x_2 等)然后为每个折叠绘制一个直方图,以便分别绘制每种细胞类型的计数(总共 6 个图)?

标签: pythonmachine-learningdatasethistogram

解决方案


好的,由于您是编程新手,我将解释索引是如何工作的(在 numpy 中,它是 python 中几乎通用的数学库)。

假设我们有一个变量folds定义为:

import numpy as np
folds = np.array([1,1,2,2,1,2,1,0,0,0,1,2,1,2,0,0,2,1])

我们可以通过执行列表推导轻松地计算每个折叠出现:

num_folds = 3
fold_counts = [np.sum(folds==I) for I in range(num_folds)]
#will return [5, 7, 6]

这将返回计数,因为我们将折叠中的每个元素与折叠数 0、1 和 2 进行比较(如果元素不等于 I,则返回 false,否则返回 true)。我们可以对布尔值求和(将它们设置为 1)以获得总量。

要回答您的其他问题,我们可以使用类似的代码将图像分成折叠:

#assuming images are in a list:
image_folds = [[images[J] for J in np.where(folds==I)[0]] for I in range(num_folds)]

#assuming images are in an array of size [num_images, width, height, channels]
image_folds = [images[folds==I] for I in range(num_folds)]

推荐阅读