如何将数据集拆分/划分为训练和测试数据集以进行交叉验证?

新手上路,请多包涵

将 NumPy 数组随机拆分为训练和测试/验证数据集的好方法是什么?类似于 cvpartitioncrossvalind Matlab 中的函数。

原文由 erik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 454
2 个回答

如果你想将数据集分成两部分,你可以使用 numpy.random.shuffle ,或者 numpy.random.permutation 如果你需要跟踪索引(记得修复随机种子使一切都可重现):

 import numpy
# x is your dataset
x = numpy.random.rand(100, 5)
numpy.random.shuffle(x)
training, test = x[:80,:], x[80:,:]

要么

import numpy
# x is your dataset
x = numpy.random.rand(100, 5)
indices = numpy.random.permutation(x.shape[0])
training_idx, test_idx = indices[:80], indices[80:]
training, test = x[training_idx,:], x[test_idx,:]

有许多其他方法 可以重复划分同一数据集以进行交叉验证。其中许多 sklearn 库中可用(k-fold,leave-n-out,…)。 sklearn 还包括更高级的 “分层抽样” 方法,这些方法创建一个关于某些特征平衡的数据分区,例如确保正例和负例的比例相同训练和测试集。

原文由 pberkes 发布,翻译遵循 CC BY-SA 4.0 许可协议

还有另一种选择,只需要使用 scikit-learn。正如 scikit 的 wiki 所描述的,您可以使用以下说明:

 from sklearn.model_selection import train_test_split

data, labels = np.arange(10).reshape((5, 2)), range(5)

data_train, data_test, labels_train, labels_test = train_test_split(data, labels, test_size=0.20, random_state=42)

通过这种方式,您可以使您尝试拆分为训练和测试的数据的标签保持同步。

原文由 Paulo Malvar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题