Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当有缺失数据时,用R随机林对新数据进行预测_R_Random Forest_R Caret_Predict - Fatal编程技术网

当有缺失数据时,用R随机林对新数据进行预测

当有缺失数据时,用R随机林对新数据进行预测,r,random-forest,r-caret,predict,R,Random Forest,R Caret,Predict,我想预测包含NA行的新数据。 我需要保持这些行在输入数据和预测输出中具有相同的行数。 我怎样才能用一个随机森林模型来训练R插入符号呢? 我为predict函数的参数na.action尝试了不同的值,例如: predictions = predict(RF_model, newdata = newdata, type = "prob", na.action = "na.exclude") 使用na.exclude和na.omit删除行。使用na.pass时

我想预测包含NA行的新数据。 我需要保持这些行在输入数据和预测输出中具有相同的行数。 我怎样才能用一个随机森林模型来训练R插入符号呢? 我为predict函数的参数na.action尝试了不同的值,例如:

predictions = predict(RF_model, newdata = newdata, type = "prob", na.action = "na.exclude")
使用
na.exclude
na.omit
删除行。使用
na.pass
时,我得到一个错误输出“缺少值”


编辑:模型已经过训练,我们正在讨论对全新数据的预测,其中一些预测并不好。我知道我们无法预测这些糟糕的数据,但我需要跟踪这些行。

我想我知道你想要什么。您希望采用经过训练的模型,并对可能缺少值的新数据进行预测。对于那些缺少值的行,您希望预测值为
NA
,而不是插补缺少的值

这里有一种方法可以做到这一点。我甚至可以维持原来的行顺序。假设您的新数据位于名为
new\u data
的data.frame中,而经过训练的随机林模型名为
my\u-forest
。用对象的名称替换这些名称。我还假设了一个回归模型。如果这是一个分类问题,让我知道,我可以修改代码

这里有一个逐步的方法来解释我们正在做什么

library(tidyr)
library(dplyr)
new_data <- new_data %>% rowid_to_column() # add column with rownumber
new_data_na <- new_data %>%
  filter(!complete.cases(.))  # save those rows with NA in separate data.frame
new_data_complete <- new_data %>%
  filter(complete.cases(.))   # keep only those rows with no NA
new_data_complete$predicted <- predict(my_forest, newdata = new_data_complete) # make predictions
new_data_na$predicted <- NA_real # ensure that that NA is the same data type
new_data_predicted <- rbind(new_data_na, new_data_complete)  # bind rows
arrange(new_data_predicted, rowid) # return data to original order

这是数据科学中常见的问题。您要做的是插补缺失值,但有多种策略可供选择。在您的情况下(或任何情况下),哪一个是最好的并不是堆栈溢出的主题,因为这不是一个编程问题。但是,如果您有一种特定的插补方法,您正在努力在R中实现,这是在主题上。不,我不想插补缺失值,我想保留这些缺失值的行,以便用户知道数据不适合预测。所以问题是:如何在预测输出中使用NA。在这里,我的输入和输出有不同的行数,因此我无法绑定数据帧以向用户显示完整的结果。我原以为使用na.exclude可以达到目的,但事实并非如此。它就像一个符咒!非常感谢。
library(dplyr)
new_data %>%
  mutate(predicted = case_when(complete.cases(.) ~ predict(my_forest, newdata = .),
                               TRUE ~ NA_real)