以下极其简化的 DataFrame 表示包含医疗诊断的更大的 DataFrame:
medicalData = pd.DataFrame({'diagnosis':['positive','positive','negative','negative','positive','negative','negative','negative','negative','negative']})
medicalData
diagnosis
0 positive
1 positive
2 negative
3 negative
4 positive
5 negative
6 negative
7 negative
8 negative
9 negative
问题:对于机器学习, 我需要按以下方式将此数据帧随机拆分为三个子帧:
trainingDF, validationDF, testDF = SplitData(medicalData,fractions = [0.6,0.2,0.2])
…其中拆分数组指定进入每个子帧的完整数据的分数。
- 子帧中的数据需要 互斥,拆分数组(分数)需要和为一。
- 此外,每个子集中阳性诊断的比例需要大致相同。
- 这个问题的答案 建议使用 pandas 示例方法 或 sklearn 中的 train_test_split 函数。但是这些解决方案似乎都不能很好地概括为 n 个拆分,也没有一个提供分层拆分。
原文由 Oblomov 发布,翻译遵循 CC BY-SA 4.0 许可协议
np.array_split
如果你想概括为
n
拆分,np.array_split
是你的朋友(它适用于数据帧)。train_test_split
使用
train_test_split
进行分层拆分的多风解决方案。其中
X
是您的功能的 DataFrame,而y
是您的标签的单列 DataFrame。