我理解随机状态如何用于随机将数据分成训练和测试集。正如预期的那样,我的算法每次更改时都会给出不同的准确度。现在我必须在我的大学提交报告,我无法理解在那里提到的最终准确性。我应该选择最高精度吗?或者我应该使用不同的RandomStates运行它然后取其平均值?或其他什么?
答案 0 :(得分:2)
最好的方法是取平均准确度......但是 如果你根据特定的数据集进行训练模型以获得最佳分类(可能被视为过度拟合),你可以采取最佳准确度让我详细说明:
您可以训练模型几次迭代,测试和列车设置的准确度会有所不同,但会采取上行趋势(准确度会上升) 你可以训练模型进行大量的迭代,只有在这次迭代时精度更好才能更新你的权重,从而构建出最好的模型...
但您应该注意观察测试集的准确性,以避免过度拟合,即当模型能够以非常高精度进行预测时超过列车设置,但测试设置的低准确度
一开始,模型将学习并且(测试和训练)准确度将提高,经过大量训练后列车精度将提高(或保持不变)但测试准确度将下降
您可以查看this进一步阅读
我建议你看看k-fold cross validation,我认为这种方法最适合这种情况
答案 1 :(得分:1)
就我个人而言,我将random_state
设置为特定数字(通常为42
),因此,如果我发现程序准确性存在差异,我知道它是由而不是引起的数据被拆分了。
然而,这可能导致我的网络过度适应特定的分裂。 I.E.我调整我的网络,以便它适用于该分割,但不一定在不同的分割。因此,我认为在提交代码时最好使用随机种子,以便审阅者知道您没有过度适应该特定状态。
要使用sklearn.train_test_split
执行此操作,您无法提供random_state
,而是会使用np.random
随机选择一个。