如何在 train_test_split 中选择 RandomState?

6

我了解随机状态是如何用于随机将数据分割成训练集和测试集的。预料之中,每次更改随机状态后,我的算法都会给出不同的准确度。现在我需要在我的大学提交一份报告,但我无法理解应该提到的最终准确度。我应该选择获得的最高准确度吗?还是应该使用不同的随机状态运行,并取其平均值?或者其他方法?


问题或答案的初始部分中是否指定了特定的随机状态? - MaxU - stand with Ukraine
1
最终,您正在构建一个模型,希望它能够对新的、未知的数据具有强大的性能。如果您构建了一个好的模型,那么准确性不应该因随机状态而变化太大。如果您看到了狂野的波动,那么您的模型就不好。在我看来,报告最大准确度是不好的,因为它不能代表实际预期性能。我的建议是对一些运行次数取平均值或进行k-fold CV,但也要报告标准差。 - pault
@MaxU 实际上这是我自己选择的一个小项目。这是我大学三年级课程的一部分。 - Prabhjeet Singh
2个回答

2
最佳方法是取平均准确率...但是如果你基于特定的数据集划分来训练模型以获得最佳分类(可能被认为是过拟合),那么你可以选择最佳准确率。让我详细解释一下:
你可以训练模型进行几次迭代,测试集和训练集的准确率会有所变化,但会呈上升趋势(准确率会提高);你也可以进行多次迭代训练模型,并仅在该迭代的准确率提高时更新权重,从而构建最佳模型...
但是,你应该注意观察测试集的准确率,以避免过拟合,即当模型能够非常准确地预测训练集,但在测试集上的准确率非常低时。
在开始时,模型会学习,并且(测试和训练)准确率都会提高,经过大量训练后,训练准确率会提高(或保持不变),但测试准确率会下降。
你可以查看this以获取更多阅读资料。
我建议你查看k-fold交叉验证,我认为这种方法最适合在这种情况下使用。

但是,如果您根据特定的数据集拆分进行训练,以获得最佳分类(可能被视为过度拟合),则可以获得最佳准确性。请详细说明。 - Prabhjeet Singh
@PrabhjeetSingh,对原回答进行了一些解释,希望有所帮助。 - shahaf

1

对我个人而言,我会将random_state设置为特定数字(通常是42),这样如果我发现程序的准确性有变化,我就知道这不是由于数据拆分方式引起的。

然而,这可能会导致我的神经网络过度拟合到该特定拆分上。即我调整网络使其在该拆分上表现良好,但不一定在另一个拆分上表现良好。因此,我认为最好在提交代码时使用随机种子,这样评审人员就知道您没有过度拟合到特定状态。

要使用sklearn.train_test_split实现此目的,只需不提供random_state,它将使用np.random随机选择一个。


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