首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sklearn方法中更改random_state (在调整hyperparams之后)可以提供不同的精度

在sklearn方法中更改random_state (在调整hyperparams之后)可以提供不同的精度
EN

Stack Overflow用户
提问于 2020-10-05 19:21:06
回答 1查看 412关注 0票数 0

我正在学习统计学习/ ML课程,目前正在做一个包括分类任务的项目,我有一些关于random_state参数的新手问题。我的模型的准确性根据random_state的不同而有很大的变化。我目前正在使用逻辑回归(来自sklearn.linear_model.LogisticRegression())。我尝试使用GridSearchCV方法调优超参数。

问题:我得到不同的预测精度,这取决于我使用的random_state。

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

代码语言:javascript
运行
复制
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的不同而有如此大的差异。

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 00:25:03

调优random_state可以为您提供不同的精度。随机状态类似于将数据集随机拆分为训练和测试,而不是根据索引值升序拆分数据集。这导致数据点被分成训练和测试,并且如果测试数据中有任何不存在于训练数据中的点,则这可能导致较差的准确性。处理这个问题的最好方法是使用交叉验证拆分。在这种方法中,随机地将数据拆分成训练和测试,然后执行机器学习建模,并且此步骤重复n次,其中n是拆分的数量(主要是n= 5)。然后我们取所有精度的平均值,并将此精度视为最终结果。您可以执行交叉验证拆分,而不是每次都更改值random_state

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

https://machinelearningmastery.com/k-fold-cross-validation/#:~:text=Cross%2Dvalidation%20is%20a%20resampling,k%2Dfold%20cross%2Dvalidation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64207625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档