【问题标题】:Splitting dataset into two non-redundant numpy arrays?将数据集拆分为两个非冗余 numpy 数组?
【发布时间】:2019-07-01 01:33:26
【问题描述】:

我有一个 numpy 数组“my_data”。我正在尝试随机拆分此数据集。但是,当我使用以下代码执行此操作时,我得到一个“train”数组和一个“test”数组。训练数组和测试数组在列中有一些行。

training_idx = np.random.randint(my_data.shape[0], size=split_size)
test_idx = np.random.randint(my_data.shape[0], size=len(my_data)-split_size)
train, test = my_data[training_idx,:], my_data[test_idx,:]

我的意图是首先随机找到训练数组,然后在 my_data 中剩下的任何行不在训练数组中,作为测试数组的一部分。

numpy 有没有办法做到这一点? (我避免使用 sklearn 来拆分我的数据)

我在这里参考了这篇文章,以获取我的数据集。 How to split/partition a dataset into training and test datasets for, e.g., cross validation?

如果我按照这篇文章的逻辑进行编码,我最终会得到训练和测试数据集,其中训练和测试中有一些冗余行。我打算制作没有共同行的训练和测试数据集。

【问题讨论】:

  • 尝试随机排列(使用randint)索引,然后将该排列分成两部分。一个用于训练,另一个用于测试。

标签: python numpy


【解决方案1】:

按照this answer你可以这样做:

train_idx = np.random.randint(my_data.shape[0], size=split_size)    
mask = np.ones_like(my_data, dtype=bool)
mask[train_idx] = False
train, test = my_data[~mask], my_data[mask]

不过,正如 Poojan 建议的那样,一种更自然的方法是对数据的排列进行切片。

permuted = np.random.permutation(my_data)
train, test = permuted[:split_size], permuted[split_size:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2013-05-20
    • 2020-10-22
    • 2013-06-27
    • 2013-12-04
    • 2015-05-17
    相关资源
    最近更新 更多