Scikit学习:训练/测试拆分不可重现

时间:2018-11-07 02:25:26

标签: python scikit-learn

我正在使用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将确保确定性的划分。

如何确保每次均分?

2 个答案:

答案 0 :(得分: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引起了问题。

答案 1 :(得分:0)

您设置的random_state(在许多scikit学习示例中使用了42)的值并不重要,最重要的是该值始终相同,以便您可以多次验证代码。 / p>

如果您发布完整的代码,则代码中可能还会存在其他随机性,从而产生不同的结果。