我开始学习机器学习。我看到的所有示例,创建 ML 模型的人使用随机状态或随机种子来阻止过程的随机性。但是,在现实生活中,当您尝试将机器学习模型应用到公司的实际项目中时,您应该使用任何随机状态或种子吗?为机器学习模型设置随机状态并产生可重复的结果是否正确(在数据科学术语中)?
您应该在机器学习模型中使用随机状态还是随机种子?
数据挖掘
机器学习
交叉验证
数据科学模型
2021-09-27 02:09:28
3个回答
你的直觉是正确的。您可以random_state
出于以下几个原因设置 or 种子:
- 为了可重复性,如果您想发布您的结果或与其他同事共享它们
- 如果您正在调整模型,在实验中,您通常希望保持所有变量不变,但要调整的变量除外。
我通常random_state
在调整或开发时设置变量,而不是随机种子,因为这是一种更直接的方法。当您投入生产时,您应该删除random_state
and/orrandom_seed
设置,或设置为None
,然后进行一些交叉验证。这将为您的模型提供更真实的结果。
设置种子或固定随机状态控制随机性。当您想做“受控实验”时,您需要在一定程度上控制随机性以实现可重现(并且由此也具有可比性)的结果。
您应该清楚需要控制随机性的地方:例如,当您使用线性回归或逻辑回归时,结果将始终相同(前提是您使用相同的数据和模型规范)。但是,当您随机拆分数据集进行测试和训练时,随机性会影响您的测试/训练拆分。
现在假设您想比较线性回归的不同模型规格以查看最佳模型是什么,并且您使用测试/训练集。为了比较不同的线性模型规格,您应该使用相同的数据进行训练/测试。因此,在这种情况下,您需要在测试/训练拆分中设置种子。否则 - 如果您不设置种子 - 模型中的更改可能来自两个来源。A) 更改的模型规范和 B) 更改的测试/训练拆分。
还有一些模型在学习过程中受到随机性的影响。如果您不设置种子,神经网络或增强模型 - 例如 - 在每个模型运行后会产生一些不同的结果。同样在这种情况下,例如,当您进行超参数调整以找到最佳模型时,控制随机性有助于确保不同模型运行的结果具有可比性。
在实验过程中,为了调整和再现性,您暂时固定随机状态,但您以不同的随机状态重复实验并取结果的平均值
# Set a Random State value
RANDOM_STATE = 42
# Set Python random a fixed value
import random
random.seed(RANDOM_STATE)
# Set numpy random a fixed value
import numpy as np
np.random.seed(RANDOM_STATE)
# Set other library like TensorFlow random a fixed value
import tensorflow as tf
tf.set_random_seed(RANDOM_STATE)
# Eventually don't forget to set random_state parameter in function like
RandomizedSearchCV(random_state = RANDOM_STATE, ...)
对于生产系统,您可以通过将其设置为 None 来删除随机状态
# Set a Random State value
RANDOM_STATE = None
其它你可能感兴趣的问题