用索引向量保存分割顺序

Posted

技术标签:

【中文标题】用索引向量保存分割顺序【英文标题】:Saving order of splitting with a vector of index 【发布时间】:2017-09-01 09:34:47 【问题描述】:

我想将数据拆分为训练和测试以及包含名称的向量(它用作索引和参考)。

name_images has a shape of (2440,)

我的数据是:

data has a shape of (2440, 3072) 
labels has a shape of (2440,)

from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test= train_test_split(data, labels, test_size=0.3)

但我也想将我的name_images 拆分为name_images_trainname_images_test,以拆分datalabels

我试过了

  x_train, x_test, y_train, y_test,name_images_train,name_images_test= train_test_split(data, labels,name_images, test_size=0.3)

它不保留顺序 有什么建议 谢谢

编辑1:

x_train, x_test, y_train, y_test= train_test_split(data, labels,test_size=0.3, random_state=42)

name_images_train, name_images_test=train_test_split(name_images, 
                                                         test_size=0.3, 
                                                         random_state=42)

EDIT1 不保留订单

【问题讨论】:

我不明白。您想在每次调用此train_test_split 时保留顺序,还是要在同一次调用train_test_split 期间保留datalabelsname_images 的拆分顺序? 我想在同一个调用中保留数据、标签和名称图像的拆分顺序 这就是我的回答。这意味着如果 train_X 获得索引 [1,5,7..] 那么 train_y 和 name_images_train 也将获得相同的索引。如果这仍然不符合您的需要,您能否举例说明您想要什么输出 【参考方案1】:

有多种方法可以做到这一点。

最直接的方法是使用train_test_splitrandom_state 参数。作为documentation states:

random_state : int 或 RandomState :- 用于随机采样的伪随机数生成器状态。

当您修复 random_state 时,为将数组拆分为训练和测试而生成的索引每次都完全相同。

所以把你的代码改成:

x_train, x_test, 
y_train, y_test, 
name_images_train, name_images_test=train_test_split(data, labels, name_images, 
                                                     test_size=0.3, 
                                                     random_state=42)

有关 random_state 的更多了解,请在此处查看我的回答:

https://***.com/a/42197534/3374996

【讨论】:

我也尝试了以下方法,但它不起作用:x_train, x_test, y_train, y_test, name_images_train, name_images_test=train_test_split(data_pixels, classes, images_names, test_size=0.3, random_state=42)跨度> 【参考方案2】:

就我而言,我首先意识到我的输入数组的顺序不正确。因此,对于未来的 Google 员工,您可能需要仔细检查 (data, labels) 的顺序是否相同。

【讨论】:

以上是关于用索引向量保存分割顺序的主要内容,如果未能解决你的问题,请参考以下文章

第四十二篇 Numpy的基本操作——索引相关

PIL 图像以错误的顺序保存(for 循环,枚举索引)

InnoDB索引实现

用元素名称替换索引,保持名称的顺序而不是索引的顺序

如何使用二分搜索将元素插入已排序的向量中

在 C++ 中删除向量中的第一个最小数字(并保持顺序)