首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保持表格数据自然顺序的同时不进行替换的随机样本

在保持表格数据自然顺序的同时不进行替换的随机样本
EN

Stack Overflow用户
提问于 2020-04-09 19:48:49
回答 2查看 324关注 0票数 1

我有时间序列数据,不是单调增长,所以调用排序/洗牌是不可能的。

我希望在保持数据相对顺序的同时,随机提取n%的数据,作为验证或测试集,可以如下所示:

代码语言:javascript
复制
my_ndarray = [ 1, 20, 10, 3, 90, 5, 80, 50, 4, 1] # (number of samples = 1645, number of timesteps = 10, number of features = 7)
# custom_train_test_split()
train = [1, 20, 90, 5, 50, 4, 1]
valid = [10, 3, 80]

我希望就如何有效地做到这一点提供一些指导。据我理解,Java风格的迭代在Python中效率很低。我怀疑三维布尔表掩码将是丙酮和矢量化的方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-09 20:25:54

以下是解决方案的样子:

  • 向数组中的每个项添加一个临时的附加维度,在该维度中向数组中的每个项添加索引。
  • 对数组进行混淆。
  • 获取数组中所需的部分,然后根据所选部分的临时维度对每一部分进行排序。

下面是使用普通Python列表的解决方案:

代码语言:javascript
复制
my_ndarray = [ 1, 20, 10, 3, 90, 5, 80, 50, 4, 1] 
# Add temporary dimension by converting each item 
# to a sublist, where the index is the first element of each sublist
nda=[[i,my_ndarray[i]] for i in len(my_ndarray)]
np.random.shuffle(nda)
# Training data is the first 7 items
traindata=nda[0:7]
traindata.sort()
traindata=[x[1] for x in traindata]
# Test data is the rest
testdata=nda[7:10]
testdata.sort()
testdata=[x[1] for x in testdata]
票数 1
EN

Stack Overflow用户

发布于 2020-04-09 19:59:13

这个很管用。我将test_size=0.4设置为使40%的行位于test_df中。这假设您的dataframe在左边有所有的功能列,在右边有响应列。

代码语言:javascript
复制
x = df[features_columns_names_list]
y = df[response_column_name]

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.4)

train_df = pd.concat([X_train, y_train], axis=1).sort_index(axis = 0)
test_df = pd.concat([X_test, y_test], axis=1).sort_index(axis = 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61129122

复制
相关文章

相似问题

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