随机状态值的变化会改变模型的准确性

Posted

技术标签:

【中文标题】随机状态值的变化会改变模型的准确性【英文标题】:Change in random state value changes the model accuracy 【发布时间】:2018-09-07 08:48:51 【问题描述】:

在测试我的线性回归模型时,我发现更改train_test_split 中的random_state 参数会改变模型的准确性。

详细来说,我的火车测试拆分如下:

boston_data = load_boston()
X = pd.DataFrame(boston_data.data, columns=boston_data.feature_names)
y = pd.DataFrame(boston_data.target, columns=['MEDV'])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

而我的模型如下:

steps = [
    ('regr', Lasso())
]
pipeline = Pipeline(steps)

parameters = 
    'regr__alpha': np.logspace(-4, -0.5, 40)


grid = GridSearchCV(pipeline, param_grid=parameters, cv=10, n_jobs=-1)
grid.fit(X_train, y_train)
grid.score(X_test, y_test)

现在,例如,对于当前场景(random_state = 42),测试分数为 0.725。但是,如果我将其更改为 43,则测试分数会下降到 0.7。

我知道random_state 表示测试和训练集中的数据集。话虽如此,我想知道,是否有办法获得稳定的结果?

谢谢!

【问题讨论】:

我不明白 - 如果你不改变random_state - 它会给你稳定的结果不是吗? 嗨@MaxU,再次感谢您的回答! :) 但是,我问这个问题的原因是:坚持哪个随机状态?以及如何确定我的实际模型精度是多少,当它仅通过更改测试集而不断变化时? 我认为改变测试集是正常的......除非你有准确的1.0,这是因为data leakage而发生的 - 你绝对不想要这种情况...... 感谢您的信息! 【参考方案1】:

这个问题被问到已经有一段时间了,但我会提供一个答案,因为目前还没有一个随机状态,一开始我有点困惑。

当您将数据拆分为机器学习模型的训练和测试时,这是随机进行的,以避免出现潜在的选择偏差。虽然这有利于获得无偏见的结果,但也意味着结果可能因运行而异。

为了避免这种情况,可以使用随机状态来确保具有相同数据的结果在运行之间是固定的。当您在模型中进一步更改变量或参数时,这很有帮助,因为如果您将随机状态保持为固定数字,那么您知道模型准确性的任何变化都是由于您所做的更改,而不是因为不同的拆分在数据中。训练模型后,可以移除随机状态,并且可以多次运行模型,取所有结果的平均值,以真实反映模型的质量。

因此,在训练机器学习模型时,最好在机器学习过程的任何时间点将随机状态保持为固定数字,直到得到适当的训练。所以,在回答这个问题时,没有应该选择的随机状态数,但是在机器学习过程中随机状态可用的所有点选择任何随机状态将确保整个过程中的稳定结果。

【讨论】:

以上是关于随机状态值的变化会改变模型的准确性的主要内容,如果未能解决你的问题,请参考以下文章

Yarn状态机框架分析

SpringBoot技术专题-StateMachine状态机设计

如何以面向对象的思想设计有限状态机

机器学习 —— 概率图模型(推理:连续时间模型)

马尔科夫模型与隐马尔科夫模型

reactjs入门到实战---- state详解