首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧拆分为3个子组

将数据帧拆分为3个子组
EN

Stack Overflow用户
提问于 2016-07-01 15:16:30
回答 3查看 2.7K关注 0票数 1

我想将原始数据帧分成3个子组:训练、测试、验证

我看到了三种解决方案,但担心它们不正确,可能会造成瓶颈效应。

1)添加带键的字典

代码语言:javascript
复制
my_dict = {'train':raw_df.loc[start:end], 'test':raw_df.loc[start:end],
            'val':raw_df.loc[start:end]}

2)创建三个数据帧

代码语言:javascript
复制
train_df = df.loc[start:end]
test_df = df.loc[start:end]
val_df = df.loc[start:end]

3)添加具有以下三个随机值之一的新列

代码语言:javascript
复制
df['train/test/val'] = pd.Series('train', index=df.index)

ALso,在字典中添加数据帧是否会导致:在字典或列表中帮助数据帧失去性能优势的bottle_neck效果?从理论上讲,添加新列会增加数据的维度,创建新的数据帧是最糟糕的变体,因为它会消耗大量内存

EN

回答 3

Stack Overflow用户

发布于 2016-07-01 15:36:09

添加一个新列不会占用大量内存,但是每当您想要访问三个集合中的一个时,您都会添加一个切片成本。创建新的数据帧导致此切片部分只需执行一次。

为此,您可以使用sample。假设您希望80%的数据帧用于训练,10%用于测试和验证:

代码语言:javascript
复制
train = df.sample(frac = 0.8)
test = df.drop(train.index).sample(frac = 0.5)
validate = df.drop(train.index).drop(test.index)
票数 3
EN

Stack Overflow用户

发布于 2016-07-01 15:34:49

从技术上讲,我认为如果你想测试你的机器学习模型,你不需要有三个数据帧。为什么?因为您是在training_set上构建模型,并且需要使用validation_set对其进行验证。只有在您的模型通过验证后,您才能使用test_set。而且,您的test_set没有包含Y标签。

有几个库包含可以轻松拆分数据的函数。

  • scikit-learn提供了使用http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html
  • spark-ml has randomSplit
  • ... train_test_split

的选项

在不使用任何外部库的情况下,您可以这样做:

代码语言:javascript
复制
msk = np.random.rand(len(df)) < 0.8
train = df[msk]
validation = df[~msk]

(答案来自:How do I create test and train samples from one dataframe with pandas?)

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2016-07-01 15:39:40

仅针对单个迭代的纯pandas解决方案将使用sample,并在使用pd.Index.difference的下一次迭代中排除样本的索引

代码语言:javascript
复制
validation = df.sample(validation_size)
# Get the other part of the dataframe
train_test = df.loc[df.index.difference(validation.index)]

test = train_test.sample(test_size)
train = train_test.loc[train_test.index.difference(test.index)]

请注意,validation_sizetest_size分别是您希望用于验证和测试帧的行数。

Sklearn也有很好的功能,可以在循环中进行拆分,从而更容易进行交叉验证。这里的文档:http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.ShuffleSplit.html

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

https://stackoverflow.com/questions/38139306

复制
相关文章

相似问题

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