按 numpy 数组对 train_test_split 数据进行排序

Sorting train_test_split data by numpy array

我想拆分以下 numpy 数组进行训练和测试:Xyqid

目前我做的拆分是:

# Split documents, labels, and query_ids into training (70%) and testing (30%)
    X_tr, X_tst, y_tr, y_tst, qid_tr, qid_tst= train_test_split(X, y, qid, test_size=0.3, random_state=1, shuffle=True, stratify=qid)

问题是拆分后,我需要返回的 numpy 数组按 qid 排序。即所有 相同 qid 的文档需要一起(一个接一个)作为一个块(在训练和测试中)。

例子

正确拆分:

X              qid           y       
------------------------------
document 1     0             0
document 5     0             1
document 4     1             1
document 6     1             0
document 9     2             1

拆分不正确:

X              qid           y       
------------------------------
document 1     0             0
document 4     1             1
document 9     2             1
document 5     0             1
document 6     1             0

有什么方法可以做到这一点吗?

有一种非常简单的方法可以将数据拆分为训练集和测试集。拆分时你想维护两件事:

  1. 您的数据已正确打乱,通常,我们按某种顺序设置数据,我们希望正确打乱以获得更好的结果,
  2. 您每次都必须在训练和测试拆分中获得相同的行集。

为此,您可以通过加入所有 X 和 qid 以及 y df 来简单地创建一个 df。然后使用 pandas 洗牌并分成训练集和测试集。

import pandas as pd 

# Shuffle your dataset 
shuffle_df = df.sample(frac=1)

# Define a size for your train set 
train_size = int(0.7 * len(df))

# Split your dataset 
train_set = shuffle_df[:train_size]
test_set = shuffle_df[train_size:]

现在可以根据qid列对训练集进行排序,拆分成多个df,得到X_train、y_train和qid_train。对测试集做同样的事情。