尽管设置了随机状态和相同的输入,sklearn RandomForestClassifier.fit() 仍不可重现

2024-06-24

在使用 Scikit-learn 调整随机森林模型时,我注意到即使我使用相同的 RandomForestClassifier 实例和相同的数据作为输入,但在不同的运行后其准确度分数也不同。我尝试了谷歌搜索和 stackExchange 搜索功能,但我能找到的唯一与此有点相似的情况是this https://datascience.stackexchange.com/questions/66345/why-ml-model-produces-different-results-despite-random-state-defined-and-how-to帖子,但问题是在没有适当随机状态的情况下实例化分类器,这不是我的问题的情况。

我正在使用以下代码:

clf = RandomForestClassifier( n_estimators=65, max_features = 9, max_depth= 'sqrt', random_state = np.random.RandomState(123) )

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state = np.random.RandomState(159) )
clf.fit(X_train, y_train)
y_pred=clf.predict(X_test)

X和y是我的数据和相应的标签,但我发现数据集并没有影响问题。当我运行 train_test_split 行时,我每次都会得到相同的分割,因此没有随机性。使用相同的拟合模型运行 Predict() 每次也会给出相同的结果,这表明我的问题与我上面链接的帖子不同。然而,每次运行 fit() 后,predict() 都会给出不同的预测!即使我不碰 X_train 和 y_train 也会发生这种情况。所以只需运行这两行

clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

每次都会给出不同的结果。据我从文档中可以看出 .fit() 不应该做任何随机的事情。如果没有可重复的输出,就不可能调整模型,所以我很确定某个地方存在错误。我缺少什么?以前有人遇到过这种情况,或者有人知道为什么会发生这种情况吗?


不要使用 numpyRandomState如果您要重新运行拟合并期望得到相同的结果,请反对。仅使用一个整数random_state反而。

来自sklearn的Glossary https://scikit-learn.org/stable/glossary.html#term-random_state,使用numpyRandomState:

多次调用该函数将重用同一个实例,并会产生不同的结果。

The RandomState对象被播种(用你的 123 ),但每次调用都会持续存在fit,继续获取新的随机数,而不会被重置。

快速检查:

clf = RandomForestClassifier(random_state=314)
preds = {}
for i in range(10):
    preds[i] = clf.fit(X, y).predict_proba(X)
all(np.allclose(preds[i], preds[i+1]) for i in range(9))
# > True

clf = RandomForestClassifier(random_state=np.random.RandomState(314))
preds = {}
for i in range(10):
    preds[i] = clf.fit(X, y).predict_proba(X)
all(np.allclose(preds[i], preds[i+1]) for i in range(9))
# > False
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尽管设置了随机状态和相同的输入,sklearn RandomForestClassifier.fit() 仍不可重现 的相关文章

随机推荐

  • 如何在Python中检查字符串中的某个字母?

    我如何告诉Python检查下面的字母x然后打印 Yes 以下是我迄今为止所拥有的 dog xdasds if x is in dog print Yes Use the in关键字不带is if x in dog print Yes 如果您
  • SocketAsyncEventArgs.Completed 在 Windows 8 中不会触发

    当我在安装了 Windows 7 Ultimate 和 NET 4 的计算机上编译此代码时 它工作得很好 但当我在安装了 Windows 8 RTM 和 NET 4 5 的计算机上尝试它时 Complete 事件永远不会触发 class P
  • Nuget包安装错误--无效的URI:无法解析权限/主机

    我在 Visual Studio 2017 中使用 NuGet 尝试在较旧的 Web 窗体项目上安装包 但失败并出现以下错误 Invalid URI The Authority Host could not be parsed 仅当尝试在
  • 之间的区别?

    请你解释一下两者之间的区别好吗
  • 基于 Java 的 Swing 浏览器应支持 JavaScript

    在我的公司 我正在实现一个基于java的html浏览器 我发现很多工具只能在 Swing 中生成完整的浏览器 它们看起来像 Mozilla 但我没能找到支持 JavaScript 的浏览器 我将实现的浏览器应该在 HTML 端执行 Java
  • 何时使用 Kotlin suspend 关键字?

    fun startAsyncFunc launch asyncFunc1 asyncFunc2 fun asyncFunc1 suspend fun asyncFunc2 我可以完成工作 无需suspend它甚至使测试变得更容易 可以在不添
  • 在函数式编程中画UML类图有什么意义吗?

    我被要求在一个学校项目中展示UML我使用的图表 如果我这样做的话 实现该项目 但我正在做的项目是用 C 语言编写的 并且已经进行了功能编程 因此 我想证明 在不使用面向对象语言的情况下使用类图是没有意义的 但我担心这不是真的 并且无法证实这
  • 通过 PHPcurl 发布文件[重复]

    这个问题在这里已经有答案了 可能的重复 不使用表单将文件上传到服务器 https stackoverflow com questions 6036799 upload a file to server without using a for
  • 为什么安装某些 CPAN 模块需要 root 权限?

    我需要在没有 root 权限的 Linux 机器上安装一些 CPAN 模块 安装Spreadsheet WriteExcel http search cpan org perldoc Spreadsheet WriteExcel进行得很顺利
  • log4net - 在哪里可以找到诸如 log4net.Appender.FileAppender 配置之类的 XML DTD 或架构参考? [复制]

    这个问题在这里已经有答案了 在哪里可以找到诸如 log4net Appender FileAppender 配置之类的 XML DTD 或架构参考 In this question https stackoverflow com quest
  • Visual Studio 2017 - 无法安装

    我正在尝试安装 Visual Studio 2017 Community 因为我拥有的最后一个版本是同一版本的预发行版 但现在我无法继续使用该程序 因为它迫使我更新到新程序 I found 这个问题 https stackoverflow
  • 如何在Java中创建大尺寸的自定义光标?

    我正在为屡获殊荣的密码保护系统开发一个 Java Swing 应用程序 我需要一个大型自定义光标 80 x 80 您可能会问为什么这么大 您可以查看一个在线网络演示以了解原因需要这么大 http gatecybertech net http
  • C++ 初始化列表的元素少于结构体

    当我使用初始值设定项列表创建结构体 但初始值设定项列表包含的元素少于我的结构体时 我看到其余元素均用零初始化 这是未定义的行为吗 我看到零是因为我的编译器 VS2015 决定为我将内存清零吗 或者有人可以向我指出解释 C 中这种行为的文档吗
  • 非本地包中的本地导入

    我知道应该避免本地进口 但在这种情况下有特殊情况需要 这是一个私人仓库 heroku buildpack 在go get 由于服务器上缺少私钥 与绝对 URL 一起使用时会出现此阶段 现在我得到这个错误local import in non
  • AWS API Gateway 基于 URI 的版本控制

    我很难理解 AWS API Gateway 希望我如何组织 API 以使版本控制变得简单 例如 假设我有一个简单的 API 用于从字典中获取单词 可以选择通过查询参数过滤结果 我希望在以下位置提供此版本的 v1 https
  • 如何自动使我的 TortoiseSVN 项目保持最新?

    我正在使用 TortoiseSVN 作为保存在 USB 驱动器上的 Subversion 存储库 当我从一台电脑转移到另一台电脑时 是否有一种方法可以自动识别文件是否已过期 无需使用 检查修改 菜单 如果能够看到我的硬盘驱动器上的文件夹与存
  • 如何在Python中打开和编辑现有文件?

    一段时间以来 我一直在开发各种不同的程序来练习我的 Python 其中最引人注目的是我的 选择你自己的冒险 游戏 到目前为止它已经超过 1000 行 最近 我一直在尝试在 Python 中编辑文件 但我似乎无法弄清楚 例如 如果我将变量设置
  • 节点 - 告诉请求的来源

    是否可以区分直接来自浏览器中 URL 的请求与从远程网页调用的资源之间的区别 例如 当有人直接访问我的 URL 输入http mywebsite com http mywebsite com 在网络浏览器中 但是当用户通过来自单独域的 ur
  • 运行 shell 命令从 Android 应用程序复制文件

    我正在尝试启动一个应用程序 以便将我的应用程序备份到 SD 卡 我跑 Process p Runtime getRuntime exec su Process c Runtime getRuntime exec cp data app co
  • 尽管设置了随机状态和相同的输入,sklearn RandomForestClassifier.fit() 仍不可重现

    在使用 Scikit learn 调整随机森林模型时 我注意到即使我使用相同的 RandomForestClassifier 实例和相同的数据作为输入 但在不同的运行后其准确度分数也不同 我尝试了谷歌搜索和 stackExchange 搜索