使用step_naomit进行预测并使用tidymodels保留ID

2023-12-20

在使用随机森林模型进行预测以合并回原始数据帧时,我尝试在行上保留 ID。我在配方中使用了step_naomit,它在烘焙训练数据时删除了缺少数据的行,同时也删除了测试数据上缺少数据的记录。不幸的是,我没有 ID 来轻松知道哪些记录被删除,因此我可以准确地合并回预测。

我尝试向原始数据添加 ID 列,但烘焙会删除公式中未包含的任何变量(并且我不想在公式中包含 ID)。我还认为我也许能够保留原始表中的 row.names 进行合并,但看起来 row.name 在烘焙时也会重置。

我意识到我可以在配方之前删除 NA 值来解决这个问题,但是配方中的 step_naomit 有什么意义呢?我还在step_naomit中尝试了skip=TRUE,但随后在拟合模型时出现丢失数据的错误(仅适用于随机森林)。我觉得我在 tidymodels 中缺少一些东西,可以让我在烘烤之前保留所有行?

参见示例:


## R 3.6.1 ON WINDOWS 10 MACHINE

require(tidyverse)
require(tidymodels)
require(ranger)

set.seed(123)

temp <- iris %>%
    dplyr::mutate(Petal.Width = case_when(
        round(Sepal.Width) %% 2 == 0 ~ NA_real_, ## INTRODUCE NA VALUES
        TRUE ~ Petal.Width))

mySplit <- rsample::initial_split(temp, prop = 0.8)

myRecipe <- function(dataFrame) {
    recipes::recipe(Petal.Width ~ ., data = dataFrame) %>%
        step_naomit(all_numeric()) %>%
        prep(data = dataFrame)
}

myPred <- function(mySplit,myRecipe) {

    train_set <- training(mySplit)
    test_set <- testing(mySplit)

    train_prep <- myRecipe(train_set)

    analysis_processed <- bake(train_prep, new_data = train_set)

    model <- rand_forest(
            mode = "regression",
            mtry = 3,
            trees = 50) %>%
        set_engine("ranger", importance = 'impurity') %>%
        fit(Sepal.Width ~ ., data=analysis_processed)

    test_processed <- bake(train_prep, new_data = test_set)

    test_processed %>%
        bind_cols(myPrediction = unlist(predict(model,new_data=test_processed))) 

}

getPredictions <- myPred(mySplit,myRecipe)

nrow(getPredictions)

##  21 ROWS

max(as.numeric(row.names(getPredictions)))

##  21

nrow(testing(mySplit))

##  29 ROWS

max(as.numeric(row.names(testing(mySplit))))

##  150

为了能够跟踪哪些观察被删除,我们需要给原始数据集一个id多变的。

temp <- iris %>%
    dplyr::mutate(Petal.Width = case_when(
        round(Sepal.Width) %% 2 == 0 ~ NA_real_, ## INTRODUCE NA VALUES
        TRUE ~ Petal.Width),
        id = row_number()) #<<<<

然后我们使用update_role()首先将其指定为“id 变量”,然后将其作为预测变量删除,这样它就不会成为建模过程的一部分。就是这样。其他一切都应该像以前一样工作。下面是完全更新的代码,用 #

require(tidyverse)
#> Loading required package: tidyverse
require(tidymodels)
#> Loading required package: tidymodels
#> Registered S3 method overwritten by 'xts':
#>   method     from
#>   as.zoo.xts zoo
#> ── Attaching packages ───────────────────── tidymodels 0.0.3 ──
#> ✔ broom     0.5.2     ✔ recipes   0.1.7
#> ✔ dials     0.0.3     ✔ rsample   0.0.5
#> ✔ infer     0.5.0     ✔ yardstick 0.0.4
#> ✔ parsnip   0.0.4
#> ── Conflicts ──────────────────────── tidymodels_conflicts() ──
#> ✖ scales::discard() masks purrr::discard()
#> ✖ dplyr::filter()   masks stats::filter()
#> ✖ recipes::fixed()  masks stringr::fixed()
#> ✖ dplyr::lag()      masks stats::lag()
#> ✖ dials::margin()   masks ggplot2::margin()
#> ✖ dials::offset()   masks stats::offset()
#> ✖ yardstick::spec() masks readr::spec()
#> ✖ recipes::step()   masks stats::step()
require(ranger)
#> Loading required package: ranger

set.seed(1234)

temp <- iris %>%
    dplyr::mutate(Petal.Width = case_when(
        round(Sepal.Width) %% 2 == 0 ~ NA_real_, ## INTRODUCE NA VALUES
        TRUE ~ Petal.Width),
        id = row_number()) #<<<<

mySplit <- rsample::initial_split(temp, prop = 0.8)

myRecipe <- function(dataFrame) {
    recipes::recipe(Petal.Width ~ ., data = dataFrame) %>%
        update_role(id, new_role = "id variable") %>%  #<<<<
        update_role(-id, new_role = 'predictor') %>%   #<<<<
        step_naomit(all_numeric()) %>%
        prep(data = dataFrame)
}

myPred <- function(mySplit,myRecipe) {

    train_set <- training(mySplit)
    test_set <- testing(mySplit)

    train_prep <- myRecipe(train_set)

    analysis_processed <- bake(train_prep, new_data = train_set)

    model <- rand_forest(
            mode = "regression",
            mtry = 3,
            trees = 50) %>%
        set_engine("ranger", importance = 'impurity') %>%
        fit(Sepal.Width ~ ., data=analysis_processed)

    test_processed <- bake(train_prep, new_data = test_set)

    test_processed %>%
        bind_cols(myPrediction = unlist(predict(model,new_data=test_processed))) 

}

getPredictions <- myPred(mySplit, myRecipe)

getPredictions
#> # A tibble: 23 x 7
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species     id myPrediction
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>    <int>        <dbl>
#>  1          4.6         3.1          1.5         0.2 setosa       4         3.24
#>  2          4.3         3            1.1         0.1 setosa      14         3.04
#>  3          5.1         3.4          1.5         0.2 setosa      40         3.22
#>  4          5.9         3            4.2         1.5 versico…    62         2.98
#>  5          6.7         3.1          4.4         1.4 versico…    66         2.92
#>  6          6           2.9          4.5         1.5 versico…    79         3.03
#>  7          5.7         2.6          3.5         1   versico…    80         2.79
#>  8          6           2.7          5.1         1.6 versico…    84         3.12
#>  9          5.8         2.6          4           1.2 versico…    93         2.79
#> 10          6.2         2.9          4.3         1.3 versico…    98         2.88
#> # … with 13 more rows

# removed ids
setdiff(testing(mySplit)$id, getPredictions$id)
#> [1]   5  28  47  70  90 132

Created on 2019-11-26 by the reprex package https://reprex.tidyverse.org (v0.3.0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用step_naomit进行预测并使用tidymodels保留ID 的相关文章

  • 重复测量引导统计数据,按多个因素分组

    我有一个看起来像这样的数据框 但显然还有更多行等 df lt data frame id c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 cond c A A B B A A B B A A B B A A B B co
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • 如何在 R 或 Python 中制作旭日图?

    到目前为止 我一直无法找到一个可以创建旭日图的 R 库约翰 斯塔斯科 http www cc gatech edu gvu ii sunburst 有人知道如何在 R 或 Python 中实现这一点吗 在极坐标投影中使用 matplotli
  • R 中用于调用 sed、rsync、ssh 等的 system() 的替代方案:函数是否存在,我应该编写自己的函数,还是我错过了重点?

    最近 我发现了base files命令 与其他命令一起使用 例如getwd write lines file show dir等等 似乎有许多 bash 函数的 R 等价物 我还在 R 中编写了一些函数来简化对ssh and rsync通过
  • 投资决策:R中的NPV、IRR、PB计算

    我正在尝试计算不同数量项目的净现值 NPV 内部收益率 IRR 和投资回收期 PB 时间 以评估哪个投资项目提供最佳回报 到目前为止 我可以为每个项目单独计算几行代码 但我想做的是 编写一个函数 它接受一个包含许多不同项目及其现金流的矩阵
  • 如何从 R 读取 PDF 元数据

    我们很好奇 有没有一种方法可以从 R 读取 PDF 元数据 例如下面显示的信息 通过搜索我对此无能为力 r pdf metadata在当前的问题库中 非常欢迎任何指点 我想不出纯 R 的方法来执行此操作 但您可能可以安装您最喜欢的 PDF
  • shap.TreeExplainer 和 shap.Explainer 条形图之间的区别

    对于下面给出的代码 我得到了不同的条形图shap values 在此示例中 我的数据集为 1000train样本有 9 个类别和 500 个test样品 然后 我使用随机森林作为分类器并生成模型 当我开始生成shap条形图在这两种情况下得到
  • 以编程方式将字符串宽度值插入到 sprintf() 中

    我正在尝试以编程方式将字符串宽度值插入到sprintf 格式 期望的结果是 sprintf 20s hello 1 hello 但我想插入20在同一通话中即时进行 因此它可以是任何号码 我努力了 sprintf ds 20 hello 1
  • 任意列中包含字符串的子集行

    我有一个如下所示的数据集 Col1 Col2 Col3 abckel NA 7 jdmelw njabc NA 8 jdken jdne 如何对数据集进行子集化 使其仅保留包含字符串 abc 的行 最终预期输出 Col1 Col2 Col3
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大

随机推荐

  • 如何在asp.net mvc中回发后清除字段?

    我想知道如何在 ASP NET MVC 回发后清除字段 就像现在 当发生验证错误时 字段会保留用户输入的内容 不过 这很好 当没有发生验证错误时 我希望清除所有字段并显示一条消息 所以现在我使用 ViewData 成功显示 但不确定如何清除
  • Kotlin 多平台:JobCancellationException:父作业已完成

    我尝试编写一个使用 ktor 的 kotlin 多平台库 android 和 ios 因此 我在 kotlins 协程方面遇到了一些问题 When writing tests I always get kotlinx coroutines
  • 通过构建管道将 ASP.NET 应用程序部署到 Azure 应用服务

    我继承了一个 ASP NET 4 7 2 应用程序 它在我的计算机上成功运行和启动 我现在尝试通过 Azure DevOps Pipeline 将其部署到 Azure 应用服务 为了尝试做到这一点 我创建了一个 Azure 构建管道 其中包
  • mod_rewrite 在 URL 中带有尾随句点

    我的 Apache 上有一个 RewriteRule 以使 URL 变得友好 RewriteRule log script php u 1 QSA 这使得http example com log 用户名 http example com l
  • gzipped Parquet 文件在 HDFS for Spark 中可拆分吗?

    在互联网上搜索和阅读有关此主题的答案时 我收到了令人困惑的消息 有人可以分享他们的经验吗 我知道 gzipped csv 不是这样的事实 但也许 Parquet 的文件内部结构是这样的 Parquet 与 csv 的情况完全不同 使用 GZ
  • 通过斯坦福解析器提取所有名词、形容词形式和文本

    我试图通过斯坦福解析器从给定文本中提取所有名词和形容词 我当前的尝试是在 Tree Object 的 getChildrenAsList 中使用模式匹配来定位以下内容 NN paper NN algorithm NN information
  • 从 vscode 的集成终端中打开新的集成终端的命令是什么?

    我正在尝试设置一系列任务 每个任务都需要一个终端 为此 我需要使用一个命令从以前的集成终端打开一个新的集成终端选项卡 有没有办法在vs code集成终端中做到这一点 在 mac 中我会使用 open a Terminal 或者类似的东西tt
  • 在 pika / RabbitMQ 中处理长时间运行的任务

    我们正在尝试建立一个基本的定向队列系统 其中生产者将生成多个任务 一个或多个消费者将一次获取一个任务 处理它并确认消息 问题是 处理过程可能需要 10 20 分钟 而且我们当时没有回复消息 导致服务器与我们断开连接 这是我们消费者的一些伪代
  • 通知本地化不起作用

    我想本地化通知 并且我发现有这样的属性 例如 title loc key body loc key 用于本地化 I18N 通知标题和正文的 FCM 字段不起作用 例如 android priority normal notification
  • 结合来自 T-SQL 的 XML

    我有两个单独的表 TV 和 Receiver 我正在使用 FOR XML PATH 命令来构建 XML 我的问题是 我想将 TV XML Build 的输出与 Receiver XML Build 的输出结合起来 以创建一个 XML 输出
  • DataStax DDC 服务无法启动

    我刚刚安装了 DataStax Community Edition 但是当尝试运行以下命令时 C gt net start DataStax DDC Server 我得到以下回复 Thanks 我自己也遇到了同样的问题 请尝试以下操作 打开
  • Dagger:如果我每次都*想要*一个新实例怎么办?

    有趣的是 这个答案是多么难以找到 我已经使用 Dagger Android 一段时间了 并且已经设置了整个依赖关系图 我正在使用范围 限定符以及所有这些好东西 我不再是 Dagger 新手 但可以说我一直在 Android 设置中以相当标准
  • 检查是否为空[重复]

    这个问题在这里已经有答案了 这是一个非常简单的问题 但是因为我只做了这门语言一周 所以我还没有找到答案 以下两行之间出现错误 因为Regex随机为空 但我如何检查它是否为空 这样它就不会抛出错误 var Regex span class c
  • 我正在使用两个不同的 jQuery 函数,其中一个似乎抵消了另一个

    我正在尝试使用两块 jquery 作为灯箱和一个滚动条来构建我正在构建的单页网站 它们单独工作都很好 但是当我将它们放在同一页面上时 滚动条似乎取消了灯箱 使其无效 这是灯箱代码 这是滚动条代码
  • 如何在 C++ 中正确返回 null/空对象?

    我是一名 Java 开发人员 试图解决一个简单的 C 任务 在 Java 中 如果我想返回一个空 null 对象 以指示未找到该对象 我只需返回 null 例子 Person getGetByName String name for int
  • iOS5中如何将旧的emoji编码转换为最新的编码?

    遗憾的是 在 iOS5 最终发布后 我收到用户的报告称他们无法登录 因为名字里有emoji符号 苹果改变了emoji的编码 那么用户名包含旧版本的表情符号 我如何将它们转换为新的编码 thanks 具体来说 一个表情符号 老虎 在iOS5中
  • django 注释框架:distinct() 不起作用?

    在评论模型的任何字段上运行distinct 总是返回所有记录 Comment objects values user distinct 用户 1 用户 0 用户 0 用户 0 用户 0 用户 1 用户 1 用户 1 用户 1 Comment
  • 如何获取要从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行的命令?

    我有一个Dockerfile and a Dockerfile aws json AWSEBDockerrunVersion 1 Ports ContainerPort 5000 HostPort 5000 Volumes HostDire
  • 列出 RestEasy 服务的所有公开/可用端点?

    是否可以以简单的方式列出 RestEasy 服务的所有公开 可用端点 有一个 RestEasy 插件 stats 它公开了 resteasy registry 它需要注册在web xml
  • 使用step_naomit进行预测并使用tidymodels保留ID

    在使用随机森林模型进行预测以合并回原始数据帧时 我尝试在行上保留 ID 我在配方中使用了step naomit 它在烘焙训练数据时删除了缺少数据的行 同时也删除了测试数据上缺少数据的记录 不幸的是 我没有 ID 来轻松知道哪些记录被删除 因