0

在测试我的线性回归模型时,我发现更改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表示测试和训练集中将包含哪些数据集。话虽如此,我想知道,是否有办法获得稳定的结果?

谢谢!

4

1 回答 1

1

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

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

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

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

于 2021-01-28T16:25:11.450 回答