【问题标题】:Splitting of Training and Test set when the dataset could be updated可以更新数据集时拆分训练集和测试集
【发布时间】:2022-10-23 04:03:34
【问题描述】:

我正在关注“Hands on Machine learning with Sci-kit learn and tensorflow 2nd edition”(ipynb link)的代码。在选择训练数据集和测试数据集的部分,作者提出了编写拆分函数的重要性,以便测试集在多次运行中保持一致,即使数据集被刷新。编写代码是为了使更新的数据集仍然具有正确的百分比 (test ratio) 来拆分测试集和训练集,但新的测试集不会包含以前在训练集中的任何实例。它通过为索引值 (identifier/id_x) 创建一个数字来实现这一点,如果该数字介于可以选择的可能数字范围的 0 和 (test ratio) 之间,则返回 true。

from zlib import crc32

def test_set_check(identifier, test_ratio):
    return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2**32

def split_train_test_by_id(data, test_ratio, id_column):
    ids = data[id_column]
    in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio))
    return data.loc[~in_test_set], data.loc[in_test_set]

这部分是有道理的,但我不明白的是如何使用来自skilearn 的函数train_test_split 来实现同样的事情如果整个数据集都更新了,那么测试集永远不会包含已经被选为训练集中的值。如果我们包含 random_state 参数并确保更新的数据集仅将行添加到现有数据集而不删除行,这是否已经包含在内?这是一个现实的要求吗?

这也是交叉验证需要担心的问题吗?

谢谢你的帮助。

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    如果您担心训练集中的行将成为测试集的一部分,并最终会在使用test_train_split 时影响分类器的性能,我建议不要担心这种情况不会发生。为了在多次运行中保持训练和测试的一致性,可以使用random_state

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      相关资源
      最近更新 更多