训练测试分割中的Shuffle和Random_State有什么区别?

我在一个小数据集样本上尝试了这两种方法,结果返回的是相同的输出。所以问题是,在scikit的train-test-split方法中,”shuffle”和”random_state”参数有什么区别?

最小工作示例的代码:

X, y = np.arange(10).reshape((5, 2)), range(5)train_test_split(y, shuffle=False)Out: [[0, 1, 2], [3, 4]]train_test_split(y, random_state=0)Out: [[0, 1, 2], [3, 4]]

回答:

有时候通过实验可以帮助理解一个函数是如何工作的。

假设你有一个这样的DataFrame:

   X  Y0  A  21  A  32  A  23  B  04  B  0

我们将介绍你可以使用train_test_split函数进行的不同操作:


  • 如果你输入train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=None),你将始终得到以下结果:
# TRAIN   X  Y0  A  21  A  32  A  2#TEST   X  Y3  B  04  B  0

  • 如果你输入train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=1)或任何其他整数作为random_state,你将得到同样的结果:
# TRAIN   X  Y0  A  21  A  32  A  2#TEST   X  Y3  B  04  B  0

这是因为你决定不打乱数据集,所以random_state参数不会被函数使用。


  • 现在,如果你执行train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=None),你将得到一个看起来像这样的数据集:
# TRAIN   X  Y4  B  00  A  21  A  3# TEST   X  Y2  A  23  B  0

注意,条目已经被打乱。但同样要注意,如果你再次运行代码,结果可能会有所不同


  • 最后,如果你执行train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=1)或任何其他整数作为random_state,你将得到两个条目也被打乱的数据集:
# TRAIN   X  Y4  B  00  A  23  B  0# TEST   X  Y2  A  21  A  3

只是这一次,如果你再次运行代码并使用相同的 random_state输出将始终保持不变。你已经设置了一个种子,这对于结果的可重复性很有用!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注