Python 洗牌并拆分2个numpy数组,以保持它们之间的顺序

Python 洗牌并拆分2个numpy数组,以保持它们之间的顺序,python,numpy,Python,Numpy,我有两个numpy数组X和Y,形状为X:[47502242243]和Y:[4750,1] X是训练数据集,Y是每个条目的正确输出标签 我想将数据分为训练和测试,以验证我的机器学习模型。因此,我想随机拆分它们,以便在对X和Y应用随机拆分后,它们都具有正确的顺序。即,在拆分后,X的每一行都正确地具有其相应的标签不变 我怎样才能达到上述目标 我就是这样做的 def split(x, y, train_ratio=0.7): x_size = x.shape[0] train_size = in

我有两个numpy数组X和Y,形状为X:[47502242243]和Y:[4750,1]

X是训练数据集,Y是每个条目的正确输出标签

我想将数据分为训练和测试,以验证我的机器学习模型。因此,我想随机拆分它们,以便在对X和Y应用随机拆分后,它们都具有正确的顺序。即,在拆分后,X的每一行都正确地具有其相应的标签不变


我怎样才能达到上述目标

我就是这样做的

def split(x, y, train_ratio=0.7):
  x_size = x.shape[0]
  train_size = int(x_size * train_ratio)
  test_size = x_size - train_size
  train_indices = np.random.choice(x_size, size=train_size, replace=False)
  mask = np.zeros(x_size, dtype=bool)
  mask[train_indices] = True
  x_train, y_train = x[mask], y[mask]
  x_test, y_test = x[~mask], y[~mask]
  return (x_train, y_train), (x_test, y_test)
我只需为我的列车集(随机)选择所需数量的索引,剩余的将用于测试集


然后使用遮罩选择列车和测试样本。

我将这样做

def split(x, y, train_ratio=0.7):
  x_size = x.shape[0]
  train_size = int(x_size * train_ratio)
  test_size = x_size - train_size
  train_indices = np.random.choice(x_size, size=train_size, replace=False)
  mask = np.zeros(x_size, dtype=bool)
  mask[train_indices] = True
  x_train, y_train = x[mask], y[mask]
  x_test, y_test = x[~mask], y[~mask]
  return (x_train, y_train), (x_test, y_test)
我只需为我的列车集(随机)选择所需数量的索引,剩余的将用于测试集


然后使用掩码选择训练和测试样本。

您还可以使用scikit learn
训练测试分割
仅使用两行代码分割数据:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33)

您还可以使用scikit learn
训练测试分割
仅使用两行代码分割数据:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33)

sklearn.model\u selection.train\u test\u split
是一个不错的选择

但是要自己制作一个

import numpy as np

def my_train_test_split(X, Y, train_ratio=0.8):
    """return X_train, Y_train, X_test, Y_test"""
    n = X.shape[0]
    split = int(n * train_ratio)
    index = np.arange(n)
    np.random.shuffle(index)
    return X[index[:split]], Y[index[:split]], X[index[split:]], Y[index[split:]]

sklearn.model\u selection.train\u test\u split
是一个不错的选择

但是要自己制作一个

import numpy as np

def my_train_test_split(X, Y, train_ratio=0.8):
    """return X_train, Y_train, X_test, Y_test"""
    n = X.shape[0]
    split = int(n * train_ratio)
    index = np.arange(n)
    np.random.shuffle(index)
    return X[index[:split]], Y[index[:split]], X[index[split:]], Y[index[split:]]