1

嗨,我正在使用机器学习模型中的特征工程配方。但是,当我使用 step_dummy 时,虚拟变量被视为数值变量,而不是因子。我认为当我们使用随机森林或其他树模型时,这可能会出现问题。我们怎样才能改变这一点?PDP 显示虚拟预测器被视为数字。所以 X 轴有 0.25, 0.5....... 这应该只有 0 和 1(因为 dummy)。

library(modeldata)
library(recipes)
library(caret)
library(ranger)
library(ggplot2)
library(pdp)

data(okc)
okc <- okc[complete.cases(okc),]

rec <- recipe(~ diet + age + height, data = okc)

dummies <- rec %>% step_dummy(diet)
dummies <- prep(dummies, training = okc)

dummy_data <- bake(dummies, new_data = okc)
summary(dummy_data)
dummy_data<-na.omit(dummy_data )
dummy_data<-dummy_data[1:2000,]

dummy_data$diet_strictly.anything<-factor(dummy_data$diet_strictly.anything)%>% factor(labels = c("No", "Yes"))

myTrainingControl <- trainControl(method = "cv", 
                                  number = 5, 
                                  savePredictions = TRUE, 
                                  classProbs = TRUE,
                                  summaryFunction = twoClassSummary,
                                  verboseIter = F)

fit_rf <- caret::train(diet_strictly.anything ~ .,   
                       data =dummy_data, 
                       method = "ranger",
                       tuneLength = 2,     
                       importance = "permutation",
                       trControl = myTrainingControl)


# Define a prediction function wrapper which requires two arguments
predict.function <- function(object, newdata) {
        predict(object, newdata, type="prob")[,2] %>% as.vector()
}

plt_ICE <- pdp::partial(fit_rf, 
                        pred.var = "diet_mostly.vegetarian", 
                        pred.fun = predict.function, 
                        train = dummy_data) %>% autoplot(alpha = 0.1)
plt_ICE

在此处输入图像描述

4

1 回答 1

0

step_dummy文档中:

step_dummy 创建一个配方步骤的规范,它将名义数据(例如字符或因子)转换为原始数据级别的一个或多个数字二进制模型项。

在这种情况下,该函数似乎按预期工作,通过将分类变量diet(存储为数据中的character类型okc)转换为一组对应于diet.

如果您将变量视为结果(即试图预测某人是否有特定类型的饮食),那么虚拟变量不应编码为数字是正确的。如果您有兴趣将“饮食”假人改回因素,那么一个整洁的方法可能是:

library(tidyverse)
dummy_data <- dummy_data %>%
  mutate_at(vars(starts_with('diet')), list(as.factor))

如果您使用这些虚拟变量作为预测变量,R(我主要使用rpart和)中的基于树的建模工具可以将虚拟变量作为编码为数字的预测randomForest变量处理,并且变量重要性度量的解释与变量被编码为 2 水平因子或逻辑变量。ranger

于 2020-02-29T15:16:59.510 回答