以下极度简化的数据框表示包含医疗诊断的更大数据框:
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])
…其中分割数组指定进入每个子帧的完整数据的分数
下面是一个Python函数,它使用分层采样将Pandas数据帧拆分为训练、验证和测试数据帧。它通过两次调用scikit learn的函数
train_test_split()
来执行此拆分下面是一个完整的工作示例
考虑一个具有要执行分层的标签的数据集。此标签在原始数据集中有自己的分布,例如75%
foo
、15%bar
和10%baz
。现在,让我们使用60/20/20比率将数据集拆分为训练、验证和测试子集,其中每个拆分保留相同的标签分布。请参见下图:以下是示例数据集:
现在,让我们从上面调用
split_stratified_into_train_val_test()
函数,按照60/20/20的比率来获得训练、验证和测试数据帧三个数据帧
df_train
、df_val
和df_test
包含所有原始行,但它们的大小将遵循上述比率此外,三个分裂中的每一个将具有相同的标签分布,即75%
foo
、15%bar
和10%baz
np.array_split
如果您想推广到
n
拆分,np.array_split
是您的朋友(它可以很好地处理数据帧)train_test_split
使用^{} 进行分层拆分的多风解决方案
其中
X
是功能的数据帧,y
是标签的单列数据帧纯
pandas
溶液按70/20/10%的比例分为培训/验证/测试:
相关问题 更多 >
编程相关推荐