【发布时间】:2020-01-19 12:20:55
【问题描述】:
为跨栈帖子道歉,我不确定这是否更适合 stackoverflow 或 crossvalidated。我最初在后者上发帖,但意识到这可能是更合适的地方。
所以,我有一个包含许多个人行的数据集,每个人都有一个独特的个人ID。
对于每个人,还有一列表示该人是否属于同一家庭,这是唯一的householdID。
最后,每行都有一个Target 变量,我将尝试对它进行预测。当然,也有具有不同特征的列。
我的问题是——由于不同家庭的成员身份很重要——有没有办法将数据划分为训练集和测试集,其中属于同一家庭的所有人都放在一起,而不是随机分成两组? (即,任何给定的householdID 号码都不应出现在两组中)。但是,是否可以在训练集和测试集上拆分家庭并保持平衡的Target 变量?
因此,使用caret 中的createDataPartition 函数,当我设置y = Target 时,我设法在训练和测试中获得平衡的Target 值,并且我已经成功地将家庭分开当我设置y = unique(householdID) 时,通过训练和测试,但我不知道是否有办法同时获得这两个结果。
我完全没有想法,所以欢迎任何建议!
谢谢!
【问题讨论】:
-
这称为阻塞(按familyID)。在没有人工干预的情况下,很难根据 y 进行分层拆分并被另一个变量阻塞。我建议只专注于阻塞。用不同的种子做一堆分裂,并检查每个分裂的目标。然后选择一个最平衡的。如果您需要进一步的帮助,请提供一些数据供您参考。
-
感谢@missuse 的建议。没有看到任何其他方法,我会尝试你的建议,因为它应该是可行的。谢谢!
标签: r r-caret train-test-split