随机状态是要调整的参数吗?

机器算法验证 机器学习 scikit-学习
2022-03-04 07:15:56

在我的实验中经常发生的一个问题是,当算法的随机状态发生变化时,模型的性能会发生变化。所以问题很简单,我应该将随机状态作为超参数吗?这是为什么?如果我的模型优于其他具有不同随机状态的模型,我是否应该将模型视为过度拟合特定随机状态?

sklearn 中的决策树日志:(random_rate 应该是随机状态) sklearn 中的决策树日志

2个回答

不,你不应该。

超参数是控制算法行为的某些高级方面的变量。与常规参数相反,超参数不能通过算法本身从训练数据中自动学习。出于这个原因,有经验的用户会根据他的直觉、领域知识和超参数的语义(如果有的话)来选择一个合适的值。或者,可以使用验证集来执行超参数选择。在这里,我们尝试通过在总体样本(验证集)上测试不同的候选值来找到整个数据总体的最佳超参数值。

关于随机状态,在 sklearn 中的许多随机算法中都使用它来确定传递给伪随机数生成器的随机种子。因此,它不控制算法行为的任何方面。因此,在验证集中表现良好的随机状态值与在新的、看不见的测试集中表现良好的随机状态值并不对应。事实上,根据算法的不同,你可能会通过改变训练样本的顺序看到完全不同的结果。

我建议您随机选择一个随机状态值并将其用于所有实验。或者,您可以在一组随机状态下获取模型的平均准确度。

在任何情况下,不要尝试优化随机状态,这肯定会产生乐观偏差的性能度量。

random_state 有什么作用?训练和验证集拆分,还是什么?

如果是第一种情况,我认为您可以尝试找出两种随机状态下的拆分方案之间的差异,这可能会给您的模型带来一些直觉(我的意思是,您可以探索为什么它可以在某些数据上训练模型,并使用训练好的模型来预测一些验证数据,但不能在其他一些数据上训练模型,并预测一些其他验证数据。它们的分布是否不同?)这样的分析可能会给你一些直觉。

顺便说一句,我也遇到了这个问题:),只是不明白。也许我们可以一起研究它。

干杯。