按 numpy 数组对 train_test_split 数据进行排序
Sorting train_test_split data by numpy array
我想拆分以下 numpy 数组进行训练和测试:X
、y
和 qid
X
是一组特征化文档 - shape: (140, 105)
qid
是每个文档的一组查询标识符 - shape: (140,)
y
是每个 (X
, qid
) 对的一组标签 - shape: (140,)
目前我做的拆分是:
# 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
有什么方法可以做到这一点吗?
有一种非常简单的方法可以将数据拆分为训练集和测试集。拆分时你想维护两件事:
- 您的数据已正确打乱,通常,我们按某种顺序设置数据,我们希望正确打乱以获得更好的结果,
- 您每次都必须在训练和测试拆分中获得相同的行集。
为此,您可以通过加入所有 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。对测试集做同样的事情。
我想拆分以下 numpy 数组进行训练和测试:X
、y
和 qid
X
是一组特征化文档 - shape: (140, 105)qid
是每个文档的一组查询标识符 - shape: (140,)y
是每个 (X
,qid
) 对的一组标签 - shape: (140,)
目前我做的拆分是:
# 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
有什么方法可以做到这一点吗?
有一种非常简单的方法可以将数据拆分为训练集和测试集。拆分时你想维护两件事:
- 您的数据已正确打乱,通常,我们按某种顺序设置数据,我们希望正确打乱以获得更好的结果,
- 您每次都必须在训练和测试拆分中获得相同的行集。
为此,您可以通过加入所有 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。对测试集做同样的事情。