我正在学习统计学习/ ML课程,目前正在做一个包括分类任务的项目,我有一些关于random_state参数的新手问题。我的模型的准确性根据random_state的不同而有很大的变化。我目前正在使用逻辑回归(来自sklearn.linear_model.LogisticRegression())。我尝试使用GridSearchCV方法调优超参数。
问题:我得到不同的预测精度,这取决于我使用的random_state。
我尝试过的方法:我尝试将random_state参数设置为全局状态(使用np.random.seed( randomState )并在脚本顶部将randomState设置为整数)。此外,我使用
train_test_split(X, y, test_size=0.2, random_state=randomState)具有相同的(全局)整数randomState。此外,我希望预置GridSearchCV以调优超参数。因此,我指定了一个param_grid并在其上预制了一个GridSearchCV。从这里,我找到了最好的估计器,并选择这个作为我的模型。然后,我使用我的模型进行预测,并打印结果的分类报告。我通过更改randomState将10次运行的平均值取了出来。
例如:我用randomState=1做了这个过程,从GridSearchCV: model_1找到了最好的模型。我得到了84%的准确率。如果将I改为randomState = 2,...,10,并且仍然使用model_1,则平均准确率为80.5%。我用randomState=42完成了这个过程,并从GridSearchCV中找到了最好的模型: model_42。我得到了77%的准确率。如果将I改为randomState = 41,40,39,..,32,并且仍然使用model_42,则平均准确率为78.7%。
我很困惑为什么精确度会因random_state的不同而有如此大的差异。
发布于 2020-10-06 00:25:03
调优random_state可以为您提供不同的精度。随机状态类似于将数据集随机拆分为训练和测试,而不是根据索引值升序拆分数据集。这导致数据点被分成训练和测试,并且如果测试数据中有任何不存在于训练数据中的点,则这可能导致较差的准确性。处理这个问题的最好方法是使用交叉验证拆分。在这种方法中,随机地将数据拆分成训练和测试,然后执行机器学习建模,并且此步骤重复n次,其中n是拆分的数量(主要是n= 5)。然后我们取所有精度的平均值,并将此精度视为最终结果。您可以执行交叉验证拆分,而不是每次都更改值random_state
您可以在以下链接中找到对此的参考:
https://stackoverflow.com/questions/64207625
复制相似问题