我知道random_state
用于各种sklearn算法,以打破具有相同度量值的不同预测变量(树)之间的联系(例如在GradientBoosting
中)。但是文档没有澄清或详细说明。喜欢
1)这些种子用于随机数生成的其他地方?比如RandomForestClassifier
,随机数可用于查找一组随机要素来构建预测变量。使用子采样的算法可以使用随机数来获得不同的子样本。可以/是同一种子(random_state
)在多个随机数生成中起作用吗?
我主要关心的是
2)此random_state变量的影响有多远。 ?这个值能否在预测(分类或回归)方面产生很大的不同。如果是,我应该关注哪种数据集?或者更多的是关于稳定性而不是结果的质量?
3)如果它可以产生很大的不同,那么如何最好地选择random_state?没有直觉,很难做GridSearch。特别是如果数据集是这样的,一个CV可能需要一个小时。
4)如果动机只是在重复运行中只有稳定的模型结果/评估和交叉验证分数,如果我在使用任何算法之前设置random.seed(X)
,它是否会产生相同的效果(和使用random_state
作为无)。
5)假设我在GradientBoosted分类器上使用random_state
值,并且我正在交叉验证以找到我的模型的优点(每次在验证集上得分)。一旦满意,我将在整个训练集上训练我的模型,然后将其应用于测试集。现在,完整的训练集比交叉验证中的较小训练集具有更多的实例。因此,与cv循环中发生的情况相比,random_state
值现在可以导致完全不同的行为(特征和个体预测变量的选择)。类似于min sample样本等等也可能导致较差的模型,因为设置是w.r.t CV中的实例数,而实际的实例数更多。这是正确的理解吗?防范这种情况的方法是什么?
答案 0 :(得分:4)
是的,随机种子的选择会影响您的预测结果,正如您在第四个问题中指出的那样,影响并不是真正可预测的。
防止偶然发生好坏的预测的常用方法是训练几个模型(基于不同的随机状态)并以有意义的方式平均预测。同样,您可以将交叉验证视为估算" true"通过对多个训练/测试数据分割的性能进行平均来表现模型。
答案 1 :(得分:1)
1)这些种子用于随机数生成的其他地方?比如对于RandomForestClassifier,随机数可用于查找一组随机特征来构建预测器。使用子采样的算法可以使用随机数来获得不同的子样本。可以/是同一种子(random_state)在多个随机数生成中发挥作用吗?
random_state
is used wherever randomness is needed:
如果您的代码依赖于随机数生成器,则不应使用
numpy.random.random
或numpy.random.normal
等函数。这种方法可能导致单元测试中的重复性问题。相反,应该使用numpy.random.RandomState
对象,该对象是根据传递给类或函数的random_state
参数构建的。
2)此random_state变量的影响有多远。 ?这个值能否在预测(分类或回归)方面产生很大的不同。如果是,我应该关注哪种数据集?或者更多的是关于稳定性而不是结果的质量?
好的问题不应过分依赖于random_state
。
3)如果它可以产生很大的不同,那么如何最好地选择random_state?没有直觉,很难做GridSearch。特别是如果数据集是这样的,一个CV可能需要一个小时。
不要选择它。相反,尝试优化分类的其他方面以获得良好的结果,无论random_state
。
4)如果动机只是在重复运行中只有稳定的结果/评估我的模型和交叉验证分数,如果我在使用任何算法之前设置random.seed(X),它是否具有相同的效果(并使用random_state作为None)。
从Should I use `random.seed` or `numpy.random.seed` to control random number generation in `scikit-learn`?开始,sklearn不使用random.seed(X)
。如果您需要对此进行控制,则可以设置np.random.seed()
。
5)假设我在GradientBoosted分类器上使用random_state值,并且我正在交叉验证以找到我的模型的优点(每次在验证集上得分)。一旦满意,我将在整个训练集上训练我的模型,然后将其应用于测试集。现在,完整的训练集比交叉验证中的较小训练集具有更多的实例。因此,与cv循环中发生的情况相比,random_state值现在可以导致完全不同的行为(特征和个体预测变量的选择)。类似于min sample样本等等也可能导致较差的模型,因为设置是w.r.t CV中的实例数,而实际的实例数更多。这是正确的理解吗?防范这种情况的方法是什么?
How can I know training data is enough for machine learning的答案主要表明数据越多越好。
如果您进行了大量的模型选择,也许Sacred也可以提供帮助。除此之外,每个评估的sets和log随机种子,f.ex。:
>>./experiment.py with seed=123