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

时间:2018-03-28 15:22:39

标签: python scikit-learn cross-validation train-test-split

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

详细说明,我的火车测试分组如下:

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表示测试和培训集中的数据集。话虽如此,我想知道,如果有办法获得稳定的结果?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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