代码之家  ›  专栏  ›  技术社区  ›  asn

对2个numpy数组进行洗牌和拆分,以保持它们之间的顺序

  •  0
  • asn  · 技术社区  · 6 年前

    我有两个numpy数组X和Y,形状X:[4750,224,224,3]和Y:[4750,1]。

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

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

    如何实现上述目标?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Atul Shanbhag    6 年前

    我会这样做的

    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)
    

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

        2
  •  1
  •   asn    6 年前

    train_test_split

    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)
    
        3
  •  0
  •   Blownhither Ma    6 年前

    sklearn.model_selection.train_test_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:]]