Scikit-learn:训练/测试拆分不可复制

3

我正在使用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个回答

4

随机性不是由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
您设置的random_state的值(在许多scikit-learn示例中使用的是42)并不重要,最重要的是该值始终相同,以便您可以多次验证代码。您的代码中可能存在其他随机性,会导致产生不同的结果,请发布您的完整代码。

每次它都从相同的CSV文件中提取数据。 - anon_swe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接