R 使用插入符号获取预测的行号

R 使用插入符号获取预测的行号,r,r-caret,predict,R,R Caret,Predict,我在R中经常使用插入符号来完成机器学习任务,我非常喜欢它 但我面临以下问题: 我用插入符号训练一个模型,比如用lm()进行线性回归 当我想给新数据打分时,我会:predict(model,new_data) 当new_data在我的预测值中包含缺失值时,predict不返回预测值,而不是说NA 是否可以: 当不可能或不可能时,返回新_数据中所有行的预测值,预测值为NA 返回预测+预测对应的数据帧的行号 例如,与mlr软件包一样,它使用id列显示预测对应的行: 以下是指向mlr预测页面的

我在R中经常使用插入符号来完成机器学习任务,我非常喜欢它

但我面临以下问题:

  • 我用插入符号训练一个模型,比如用
    lm()进行线性回归
  • 当我想给新数据打分时,我会:
    predict(model,new_data)
  • new_data
    在我的预测值中包含缺失值时,predict不返回预测值,而不是说
    NA
是否可以:

  • 当不可能或不可能时,返回新_数据中所有行的预测值,预测值为
    NA
  • 返回预测+预测对应的数据帧的行号
例如,与mlr软件包一样,它使用id列显示预测对应的行:

以下是指向mlr预测页面的链接,其中包含更多详细信息:


非常感谢您的帮助

在运行
插入符号::train()
之前,您可以通过使用数据集中的行名称创建一个新列来识别缺少值的情况,因为这些列默认为数据框中的行号

使用
mlbench
软件包中的
Sonar
数据集作为说明:

library(mlbench)
data(Sonar)
library(caret)
set.seed(95014)

# add row numbers
Sonar$rowId <- rownames(Sonar)
# create training & testing data sets

inTraining <- createDataPartition(Sonar$Class, p = .75, list=FALSE)
training <- Sonar[inTraining,]
testing <- Sonar[-inTraining,]
# set column 60 to NA for some values in test data
testing[48:51,60] <- NA
testing[!complete.cases(testing),"rowId"]
然后可以对测试数据集中具有完整案例的行运行
predict()
。再次使用带有随机森林模型和3倍交叉验证的
Sonar
数据集加快处理:

fitControl <- trainControl(method = "cv",number = 3)
fit <- train(x,y, method="rf",data=Sonar,trControl = fitControl)
predicted <- predict(fit,testing[complete.cases(testing),])

fitControl嘿,谢谢你的回答!使用complete.cases当然是一个选项,但有时我的数据集包含包含缺少值的列,但这些列不用于培训。所以我需要先删除这些列,然后才能使用您的解决方案。我希望知道给定的数据集A,在不更改基础数据集的情况下,A预测中的行数对应于哪一行。@Christoph-您可以在输出模型上使用
colnames()
对测试数据集中的列进行子集化,然后使用
complete.cases()
,以避免从测试数据集中删除缺少模型中不存在的列的情况。嘿,请稍后回复。是的,我可以这样做,但这需要相当多的额外代码,并且需要我提前筛选缺少的行,否则我可能无法正确匹配,例如,日期列与所做的预测。我宁愿在不可能预测的情况下获得与NAs输入数据长度相同的预测向量,或者获得显示预测对应于哪一行的ID。@Christoph-您可以在caret Github存储库的顶部请求caret中的新功能。如果这个特性真的很重要,您可以从中派生源代码并自己编写。我会的。我担心该功能已经存在,我只是无法找到它。。。谢谢你的帮助!
fitControl <- trainControl(method = "cv",number = 3)
fit <- train(x,y, method="rf",data=Sonar,trControl = fitControl)
predicted <- predict(fit,testing[complete.cases(testing),])