我有一个熊猫数据帧:comb
ENROLLED_Response
条目的数量是相当小的,整个数据帧的所以只随机抽样可能会失去太多的登记数据。创建测试/列车分裂基于两组熊猫Scikit学习
解决的办法是把所有的条目的75%的样品,其中ENROLLED_Response == True
,然后把所有的条目的70%的样品,其中ENROLLED_Response == False
所以我应该用柱is_train
与true
结束/ false
对数据帧
所以我通常使用类似:
from sklearn.cross_validation import cross_val_score
#split the dataset for train and test
comb['is_train'] = np.random.uniform(0, 1, len(comb)) <= .75
train, test = comb[comb['is_train']==True], comb[comb['is_train']==False]
这是适用于大多数情况下,但由于入学人数少,这种方法往往会遗漏出太多的'入学',因为只有这么少。所以我需要的是更类似于:
comb['is_train'] = train_test_split(comb['ENROLLED_Response']==True, Train_size = 0.75)
comb['is_train']= train_test_split(comb['ENROLLED_Response']==False, Train_size = 0.75)
哪个当然不起作用。这个概念是:第一个样本注册并将其中的一个随机标记为75,然后对未注册的(其他所有内容)进行抽样,并将它们中的75个标记为train,放在同一个新列(is_train)中,以便它可以在Scikit_learn容易使用,如:
train, test = comb[comb['is_train']==True],comb[comb['is_train']==False]
无法弄清楚如何做到这一点,因为由随机产生的NP阵列相对于整个数据帧的长度(等问题...)
我认为你的解释正确,但我认为我的内存约束阻止了我从这个方法,我有大约350,000行......所以我一直在调用诸如“shuffleSplit”之类的东西时遇到内存问题,因此为什么我'试图找出如何处理更直接.. – dartdog
也许更新的答案有帮助... – luckylwk
看起来不错,将不得不等待一些标记完成,需要测试和离开的一周(是啊!)谢谢 – dartdog