【问题标题】:Scikit-learn: train/test split not reproducibleScikit-learn:训练/测试拆分不可重现
【发布时间】:2019-04-10 11:46:35
【问题描述】:

我正在使用 scikit-learn 的 train_test_split 功能,并且在重复运行相同的代码时得到不同的结果:

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=42)

当我在y_train 中记录唯一元素的数量时:

logger.info(len(set(y_train)))

我在重复运行时得到不同的值(没有代码更改)。我原以为random_state 会确保确定性拆分。

我怎样才能确保每次都进行相同的拆分?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    随机性不是由train_test_split 引起的,你可以看到如果你多次运行这个最小的代码:

    from sklearn.model_selection import train_test_split
    
    x = [k for k in range(0, 50)]
    y = [k for k in range(0, 50)]
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=44)
    
    print (x_train)
    

    您的代码中可能还有另一个随机性来源。所以也许 numpy/pandas 导致了这个问题。

    【讨论】:

      【解决方案2】:

      您设置random_state 的值(在许多 scikit-learn 示例中使用 42)并不重要,最重要的是该值始终相同,因此您可以多次验证您的代码。

      您的代码中可能存在其他一些随机性,会产生不同的结果,您能否发布完整的代码。

      【讨论】:

      • 每次都从同一个 CSV 中提取
      猜你喜欢
      • 2015-06-08
      • 2021-06-20
      • 2017-04-11
      • 2021-07-26
      • 2018-04-22
      • 2018-12-07
      • 2020-01-03
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多