Machine learning 在sklearn方法中更改随机_状态(在调整超参数后)可提供不同的精度

Machine learning 在sklearn方法中更改随机_状态(在调整超参数后)可提供不同的精度,machine-learning,scikit-learn,random-seed,Machine Learning,Scikit Learn,Random Seed,我正在学习stat learning/ML课程,目前正在做一个包括分类任务的项目,我有一些关于random_state参数的新手问题。我的模型的准确性随着随机状态的变化而变化。我目前正在处理逻辑回归(来自sklearn.linear\u model.LogisticRegression())。我尝试使用GridSearchCV方法调整hyperparameter 问题是: 我得到不同的预测精度,这取决于我使用的随机状态 我所尝试的: 我尝试将random_state参数设置为全局状态(使用np.

我正在学习stat learning/ML课程,目前正在做一个包括分类任务的项目,我有一些关于random_state参数的新手问题。我的模型的准确性随着随机状态的变化而变化。我目前正在处理逻辑回归(来自sklearn.linear\u model.LogisticRegression())。我尝试使用GridSearchCV方法调整hyperparameter

问题是: 我得到不同的预测精度,这取决于我使用的随机状态

我所尝试的: 我尝试将random_state参数设置为全局状态(使用np.random.seed(randomState)并在脚本顶部将randomState设置为整数)。此外,我使用

train_test_split(X, y, test_size=0.2, random_state=randomState)
具有相同的(全局)整数随机状态。此外,我想预成型GridSearchCV以优化hyperparameters。因此,我指定了一个param_网格,并在此网格上执行GridSearchCV。从中,我找到了最好的估计量,并选择它作为我的模型。然后,我使用我的模型进行预测,并打印结果的分类报告。通过改变随机状态,我从10次跑步中取平均值

示例:我使用randomState=1执行此过程,并从GridSearchCV:model_1中找到最佳模型。我得到了84%的准确率。如果Im更改为randomState=2,…,10,并且仍然使用模型_1,则平均准确度将变为80.5%。 我使用randomState=42执行此过程,并从GridSearchCV中找到最佳模型:model_42。我得到了77%的准确率。如果Im更改为randomState=41、40、39、…、32,并且仍然使用模型_42,则平均准确率将变为78.7%


我很困惑,为什么精度会因随机状态的不同而变化如此之大。

调整随机状态会提供不同的精度。随机状态类似于将数据集随机拆分为训练和测试,而不是根据索引的升序值拆分数据集。这将导致将数据点分为列车和试验,如果试验数据中有任何一点不在列车数据中,则可能导致精度差。处理此问题的最佳方法是使用交叉验证拆分。在这种方法中,随机将数据分割为训练和测试,然后执行机器学习建模,该步骤重复n次,其中n为分割数(大部分为n=5)。然后我们取所有精度的平均值,并将这个精度作为最终结果。而不是每次执行交叉验证拆分时都更改值random_状态

您可以在以下链接中找到对此的参考: