尽管 "na.action" 已设置为 "na.roughfix",但仍出现缺失值错误
Missing Value Error although "na.action" was set to "na.roughfix"
我想用插入符号创建一个随机森林模型。由于训练集中存在缺失值,我在寻找可能的解决方案时遇到了“randomForest”包中的选项“na.roughfix”。如果加载了 randomForest 库,则此选项可以用作插入符号的训练函数中参数“na.action”的参数。在训练函数中,我使用 5 倍 CV 并调整为最佳 ROC 值。我这样做是为了确保其他模型之间的可比性。我为随机森林选择的方法是“游侠”。
但是现在发生了一些奇怪的事情:当我触发train函数时,开始计算,但是例如出现以下错误消息:
Fold5 的模型拟合失败:mtry=7,splitrule=gini,min.node.size=5 错误:列中缺少数据:...
“...”代表出现缺失值的列。此外,无论 mtry 的折叠或值如何,都会出现此错误消息。
我很清楚这些列中有缺失值……这就是我使用 na.roughfix 的原因。我也删除了 NZV,但这也无济于事。
如果有解释甚至解决方案,我会非常高兴!
很多问候
Edit.: 我现在看到,如果我想在 train 函数中选择“na.action”参数,它不会自动出现,它通常会这样做。它似乎以某种方式丢失了......也许这就是插入符号不使用 na.roughfix ...
的原因
编辑。 2: 我想这是问题的一部分。 train 的行为总是不同的,这取决于之前的参数。在我的火车功能中,我使用食谱包中的食谱来删除 NZV。一旦我删除了食谱,na.action 参数就会再次可用。但是,现在 preProcess 参数消失了,这意味着我无法再删除 NZV。这真是一团糟:-/ 是否有可能同时应用 na.action 和 preProcess 参数或针对我的 Missing-Values-NZV 问题的任何其他解决方案?
编辑。 3: 应用户误用的希望,我尝试提供一个代码expamle给你。很遗憾,我的数据比较敏感,无法提供给您,感谢您的理解。
首先,我创建了一个“蓝图”,并将其交给训练函数。在这里,我删除了近零方差变量。
blueprint <- recipe(target ~ ., data = train_data) %>%
step_nzv(all_predictors())
在下一步中,我定义了 trainControl
train_control <- trainControl(method = "cv",
number = 5,
classProbs = TRUE,
summaryFunction = twoClassSummary,
verboseIter = TRUE)
和一个网格:
hyper_grid <- expand.grid(mtry=c(1:(ncol(train_data)-1)),
splitrule = c("gini", "extratrees"),
min.node.size = c(1, 3, 5, 7, 10))
最后,我把它们都放在了训练函数中:
tuned_rf <- train(
blueprint,
data = train_data,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
na.action = na.roughfix
)
在这里,R 没有建议参数 na.action,这意味着它不可用。这会在开头的问题中抛出错误消息。但是,如果我删除蓝图并像这样编写模型:
tuned_rf <- train(
target ~ .,
data = train_data,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
na.action = na.roughfix
)
na.action可用,na.roughfix可用。但是,现在缺少预处理。如果我想添加参数“preProcess =”以删除 NZV,R 不建议这样做,这意味着它不再可用。因此,我必须用 training_data X 和响应变量 y 替换公式和数据。现在,preProcess 再次可用...但是 na.action 已经消失,因此我无法使用 na.roughfix.
tuned_rf <- train(
X,
Y,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
preProcess = "nzv"
)
当然我可以先识别 NZV 并手动删除它们 - 但如果我想应用进一步的步骤,整个过程会变得复杂。
我希望,我的问题现在更容易理解了...
来自 ?randomForest::na.roughfix
just performs median/mode imputation you can replace it when using a recipe with step_impute_median
and step_impute_mode
的帮助
您的蓝图如下所示:
library(recipes)
blueprint <- recipe(target ~ ., data = train_data) %>%
step_nzv(all_predictors()) %>%
step_impute_median(all_numeric()) %>%
step_impute_mode(all_nominal())
或许也试试
blueprint <- recipe(target ~ ., data = train_data) %>%
step_impute_median(all_numeric()) %>%
step_impute_mode(all_nominal()) %:%
step_nzv(all_predictors())
取决于 step_nzv
处理缺失值的方式。
我还会使用其他估算函数检查性能,例如
我想用插入符号创建一个随机森林模型。由于训练集中存在缺失值,我在寻找可能的解决方案时遇到了“randomForest”包中的选项“na.roughfix”。如果加载了 randomForest 库,则此选项可以用作插入符号的训练函数中参数“na.action”的参数。在训练函数中,我使用 5 倍 CV 并调整为最佳 ROC 值。我这样做是为了确保其他模型之间的可比性。我为随机森林选择的方法是“游侠”。
但是现在发生了一些奇怪的事情:当我触发train函数时,开始计算,但是例如出现以下错误消息:
Fold5 的模型拟合失败:mtry=7,splitrule=gini,min.node.size=5 错误:列中缺少数据:...
“...”代表出现缺失值的列。此外,无论 mtry 的折叠或值如何,都会出现此错误消息。
我很清楚这些列中有缺失值……这就是我使用 na.roughfix 的原因。我也删除了 NZV,但这也无济于事。
如果有解释甚至解决方案,我会非常高兴!
很多问候
Edit.: 我现在看到,如果我想在 train 函数中选择“na.action”参数,它不会自动出现,它通常会这样做。它似乎以某种方式丢失了......也许这就是插入符号不使用 na.roughfix ...
的原因编辑。 2: 我想这是问题的一部分。 train 的行为总是不同的,这取决于之前的参数。在我的火车功能中,我使用食谱包中的食谱来删除 NZV。一旦我删除了食谱,na.action 参数就会再次可用。但是,现在 preProcess 参数消失了,这意味着我无法再删除 NZV。这真是一团糟:-/ 是否有可能同时应用 na.action 和 preProcess 参数或针对我的 Missing-Values-NZV 问题的任何其他解决方案?
编辑。 3: 应用户误用的希望,我尝试提供一个代码expamle给你。很遗憾,我的数据比较敏感,无法提供给您,感谢您的理解。
首先,我创建了一个“蓝图”,并将其交给训练函数。在这里,我删除了近零方差变量。
blueprint <- recipe(target ~ ., data = train_data) %>%
step_nzv(all_predictors())
在下一步中,我定义了 trainControl
train_control <- trainControl(method = "cv",
number = 5,
classProbs = TRUE,
summaryFunction = twoClassSummary,
verboseIter = TRUE)
和一个网格:
hyper_grid <- expand.grid(mtry=c(1:(ncol(train_data)-1)),
splitrule = c("gini", "extratrees"),
min.node.size = c(1, 3, 5, 7, 10))
最后,我把它们都放在了训练函数中:
tuned_rf <- train(
blueprint,
data = train_data,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
na.action = na.roughfix
)
在这里,R 没有建议参数 na.action,这意味着它不可用。这会在开头的问题中抛出错误消息。但是,如果我删除蓝图并像这样编写模型:
tuned_rf <- train(
target ~ .,
data = train_data,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
na.action = na.roughfix
)
na.action可用,na.roughfix可用。但是,现在缺少预处理。如果我想添加参数“preProcess =”以删除 NZV,R 不建议这样做,这意味着它不再可用。因此,我必须用 training_data X 和响应变量 y 替换公式和数据。现在,preProcess 再次可用...但是 na.action 已经消失,因此我无法使用 na.roughfix.
tuned_rf <- train(
X,
Y,
method = "ranger",
metric = "ROC",
trControl = train_control,
tuneGrid = hyper_grid,
preProcess = "nzv"
)
当然我可以先识别 NZV 并手动删除它们 - 但如果我想应用进一步的步骤,整个过程会变得复杂。
我希望,我的问题现在更容易理解了...
来自 ?randomForest::na.roughfix
just performs median/mode imputation you can replace it when using a recipe with step_impute_median
and step_impute_mode
您的蓝图如下所示:
library(recipes)
blueprint <- recipe(target ~ ., data = train_data) %>%
step_nzv(all_predictors()) %>%
step_impute_median(all_numeric()) %>%
step_impute_mode(all_nominal())
或许也试试
blueprint <- recipe(target ~ ., data = train_data) %>%
step_impute_median(all_numeric()) %>%
step_impute_mode(all_nominal()) %:%
step_nzv(all_predictors())
取决于 step_nzv
处理缺失值的方式。
我还会使用其他估算函数检查性能,例如