首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为纵向(小组)研究按主题(参与者)学习train_test_split

为纵向(小组)研究按主题(参与者)学习train_test_split
EN

Stack Overflow用户
提问于 2021-09-27 15:00:23
回答 2查看 431关注 0票数 1

我有一个数据集与多个主题观察了一段时间。我将在它上训练一个顺序的模型,我需要把它分成各个学科的训练/测试(研究参与者)。

我提供了我目前的解决办法作为一个答案。

示例数据集:

代码语言:javascript
复制
from pydataset import data
longitudinal_study = data('Blackmoor')
longitudinal_study.head(10)

   subject    age  exercise    group
1      100   8.00      2.71  patient
2      100  10.00      1.94  patient
3      100  12.00      2.36  patient
4      100  14.00      1.54  patient
5      100  15.92      8.63  patient
6      101   8.00      0.14  patient
7      101  10.00      0.14  patient
8      101  12.00      0.00  patient
9      101  14.00      0.00  patient
10     101  16.67      5.08  patient

预期产出:

代码语言:javascript
复制
# Not Implemented
# train_df, test_df = train_test_split(longitudinal_study, by='subject', test_size=0.1)
assert len(set(train_df.subject).intersection(set(test_df.subject)))==0

我有三个问题:

  • 如何解释test_size?如果不同参与者的观察次数不同呢?
  • 其他属性的分层应该如何工作?
  • 的主要问题:,分离纵向数据的最佳方法是什么,scikit-learn或其他库中有哪些工具可用?
EN

回答 2

Stack Overflow用户

发布于 2021-09-27 15:02:13

作为一种解决办法,可以对列train_test_split的唯一值使用标准subject

代码语言:javascript
复制
import pandas as pd
from sklearn.model_selection import train_test_split

subjects = longitudinal_study.subject.unique()
subjects_train, subjects_test = train_test_split(subjects, test_size=0.1)
train_df = longitudinal_study[longitudinal_study.subject.isin(subjects_train)]
test_df = longitudinal_study[longitudinal_study.subject.isin(subjects_test)]
票数 1
EN

Stack Overflow用户

发布于 2021-09-28 14:16:32

我想通过以下方式来补充您的解决方案:与其保留一组唯一的subjects,不如保留每个subject的最后一个观察,并在目标上分层(甚至是一个特性)。

这两种解决方案将产生本质上相同的结果,但是,如果数据随着时间的推移而变得不平衡,那么在每个subject的最后一个观测周期上分层可能很重要。

代码语言:javascript
复制
# Keep last row of each subject
subjects = df.groupby('subject').last().reset_index()
# Split this data stratifying by `group`
subjects_train, subjects_test = train_test_split(subjects['subject'], train_size=0.9, test_size=0.1, stratify=subjects['group'])

然后像以前一样继续。

检查这篇文章,以防要按连续列分层。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69348896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档