用索引向量保存分割顺序
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_train
和name_images_test
,以拆分data
和labels
我试过了
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
期间保留data
、labels
和name_images
的拆分顺序?
我想在同一个调用中保留数据、标签和名称图像的拆分顺序
这就是我的回答。这意味着如果 train_X 获得索引 [1,5,7..] 那么 train_y 和 name_images_train 也将获得相同的索引。如果这仍然不符合您的需要,您能否举例说明您想要什么输出
【参考方案1】:
有多种方法可以做到这一点。
最直接的方法是使用train_test_split
的random_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)
的顺序是否相同。
【讨论】:
以上是关于用索引向量保存分割顺序的主要内容,如果未能解决你的问题,请参考以下文章