gpt4 book ai didi

python - 如何拆分数据集以训练/测试某些行依赖的地方?

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:49 27 4
gpt4 key购买 nike

我有一个主题数据集,每个主题在我的 pandas 数据框中都有许多行(每个测量都是一行,一个主题可以测量几次)。我想将我的数据分成训练集和测试集,但我不能随机分割,因为所有受试者的测量值都是相关的(不能将同一受试者放入训练和测试中)。你会如何解决这个问题?我有一个 pandas 数据框,每个主题都有不同数量的测量值。

编辑:我的数据包括每行的主题编号,我希望拆分尽可能接近 0.8/0.2。

最佳答案

考虑带有 user_id 列的数据框 df 来识别用户。

df = pd.DataFrame(
np.random.randint(5, size=(100, 4)), columns=['user_id'] + list('ABC')
)

您想要识别唯一用户并随机选择一些。然后拆分您的数据框,以便将所有测试用户放在一个中,将训练用户放在另一个中。

unique_users = df['user_id'].unique()
train_users, test_users = np.split(
np.random.permutation(unique_users), [int(.8 * len(unique_users))]
)

df_train = df[df['user_id'].isin(train_users)]
df_test = df[df['user_id'].isin(test_users)]

这应该大致将您的数据分成 80/20。


但是,如果您希望尽可能保持平衡,则必须逐步添加用户。

unique_users = df['user_id'].unique()
target_n = int(.8 * len(df))
shuffled_users = np.random.permutation(unique_users)

user_count = df['user_id'].value_counts()

mapping = user_count.reindex(shuffled_users).cumsum() <= target_n
mask = df['user_id'].map(mapping)

df_train = df[mask]
df_test = df[~mask]

关于python - 如何拆分数据集以训练/测试某些行依赖的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45980621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com