r - 从模型性能计算中排除缺失值

标签 r missing-data r-caret imputation

我有一个数据集,我想建立一个模型,最好使用 caret包裹。我的数据实际上是一个时间序列,但问题并非特定于时间序列,只是我与 CreateTimeSlices 一起工作用于数据分区。

我的数据有一定数量的缺失值NA ,我将它们与 caret 分开估算代码。我还记录了他们的位置:

# a logical vector same size as the data, which obs were imputed NA
imputed=c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE)
imputed[imputed] <- NA; print(imputed)
#### [1] FALSE FALSE FALSE    NA FALSE FALSE

我知道 Caret 中有一个选项 train函数来排除 NA或者用不同的技术来估算它们。那不是我想要的。我需要在已经估算的数据集上构建模型,但 我想从错误的计算中排除插补点 指标(RMSE、MAE、...)。

我不知道如何在插入符号中做到这一点。在我的第一个脚本中,我尝试手动进行整个交叉验证,然后我有一个自定义的错误度量:
actual = c(5, 4, 3, 6, 7, 5)
predicted = c(4, 4, 3.5, 7, 6.8, 4)
Metrics::rmse(actual, predicted) # with all the points
#### [1] 0.7404953
sqrt(mean( (!imputed)*(actual-predicted)^2 , na.rm=T)) # excluding the imputed
#### [1] 0.676757

我该如何处理 caret 中的这种做法?还是有另一种方法可以避免手动编码所有内容?

最佳答案

我不知道您是否正在寻找这个,但这里有一个通过创建函数的简单解决方案。

i=which(imputed==F) ## As you have index for NA values

metric_na=function(fun, actual, predicted, index){
    fun(actual[index], predicted[index])
}

metric_na(Metrics::rmse, actual, predicted, index = i)
0.676757
metric_na(Metrics::mae, actual, predicted, index = i)
0.54

您也可以在计算所需指标时直接使用索引。
Metrics::rmse(actual[i], predicted[i])

关于r - 从模型性能计算中排除缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39893077/

相关文章:

r - 如何从R中的confusionMatrix检索整体精度值?

r - 如何在变异后将 t.test() 应用于多对列

r - R中日期直方图的轴颜色

haskell - 在 Haskell 中有效处理稀疏缺失的数据

python - 有没有办法在 Pandas DataFrame 的列中查找模式

r - 插入符号 : Error in table(y) : attempt to make a table with >= 2^31 elements

r - 从列表和子列表中提取 xts 对象

R:键应该在 data.table 中以这种方式运行吗?

r - 边缘化 Stan 中缺失的离散响应数据

r - caretEnsemble 错误 : Error in FUN(X[[i]], ...) : { . ... 不是 TRUE