如何在train_test_split中选择RandomState?

时间:2018-03-29 17:21:54

标签: python pandas machine-learning scikit-learn svm

我理解随机状态如何用于随机将数据分成训练和测试集。正如预期的那样,我的算法每次更改时都会给出不同的准确度。现在我必须在我的大学提交报告,我无法理解在那里提到的最终准确性。我应该选择最高精度吗?或者我应该使用不同的RandomStates运行它然后取其平均值?或其他什么?

2 个答案:

答案 0 :(得分:2)

最好的方法是取平均准确度......但是 如果你根据特定的数据集进行训练模型以获得最佳分类(可能被视为过度拟合),你可以采取最佳准确度让我详细说明:

您可以训练模型几次迭代,测试列车设置的准确度会有所不同,但会采取上行趋势(准确度会上升) 你可以训练模型进行大量的迭代,只有在这次迭代时精度更好才能更新你的权重,从而构建出最好的模型...

您应该注意观察测试集的准确性,以避免过度拟合,即当模型能够以非常精度进行预测时超过列车设置,但测试设置的准确度

一开始,模型将学习并且(测试训练)准确度将提高,经过大量训练后列车精度将提高(或保持不变)但测试准确度将下降

您可以查看this进一步阅读

我建议你看看k-fold cross validation,我认为这种方法最适合这种情况

答案 1 :(得分:1)

就我个人而言,我将random_state设置为特定数字(通常为42),因此,如果我发现程序准确性存在差异,我知道它是由而不是引起的数据被拆分了。

然而,这可能导致我的网络过度适应特定的分裂。 I.E.我调整我的网络,以便它适用于该分割,但不一定在不同的分割。因此,我认为在提交代码时最好使用随机种子,以便审阅者知道您没有过度适应该特定状态。

要使用sklearn.train_test_split执行此操作,您无法提供random_state,而是会使用np.random随机选择一个。