【问题标题】:does randomForest [R] not accept logical variable as response, but accept it as predictor?randomForest [R] 不接受逻辑变量作为响应,而是接受它作为预测变量?
【发布时间】:2016-03-07 19:40:54
【问题描述】:

您好,我在 R 中使用 randomForest,它不接受逻辑变量作为响应 (Y),但似乎接受它作为预测变量 (X)。我有点惊讶 b/c 我认为逻辑本质上是 2 类因素......

我的问题是:randomForest 是否接受逻辑作为预测变量,而不是作为响应?为什么会这样? 其他常见模型(glmnet、svm、...)是否接受逻辑变量?

感谢任何解释/讨论。谢谢

N = 100

data1 = data.frame(age = sample(1:80, N, replace=T),
                   sex = sample(c('M', 'F'), N, replace=T),
                   veteran = sample(c(T, F), N, replace=T),
                   exercise = sample(c(T, F), N, replace=T))

sapply(data1, class)
#       age       sex   veteran  exercise 
# "integer"  "factor" "logical" "logical" 

# this doesnt work b/c exercise is logical
rf = randomForest(exercise ~ ., data = data1, importance = T)
# Warning message:
#         In randomForest.default(m, y, ...) :
#         The response has five or fewer unique values.  Are you sure you want to do regression?

# this works, and veteran and exercise (logical) work as predictors
rf = randomForest(sex ~ ., data = data1, importance = T)
importance(rf)
#                   F         M MeanDecreaseAccuracy MeanDecreaseGini
# age      -2.0214486 -7.584637            -6.242150         6.956147
# veteran   4.6509542  3.168551             4.605862         1.846428
# exercise -0.1205806 -6.226174            -3.924871         1.013030

# convert it to factor and it works
rf = randomForest(as.factor(exercise) ~ ., data = data1, importance = T)

【问题讨论】:

    标签: r random-forest


    【解决方案1】:

    这种行为的原因是 randomForest 也能够进行回归(除了分类)。你也可以在你得到的警告信息中观察到:

    响应具有五个或更少的唯一值。您确定要进行回归吗?

    该函数根据给定响应向量的类型在回归和分类之间做出决定。如果是因子分类,则进行回归(这是有道理的,因为回归响应向量永远不会是因子/分类变量)。

    关于您的问题:在输入数据集(预测器)中使用逻辑变量是没有问题的,randomForest 能够按照您的预期完美处理。

    training_data <- data.frame(x = rep(c(T,F), times = 1000)) # training data with logical
    response <- as.factor(rep(c(F,T), times = 1000)) # inverse of training data
    randomForest(response ~ ., data = training_data) # returns 100% accurate classifier
    

    编辑:

    为什么他们不在源代码中包含这种强制(逻辑因素)?

    这是推测,但可能是为了一致性和简单性。他们将不得不从

    更改文档

    如果是因子,则假设分类,否则回归 假设

    如果是因子或逻辑向量,则假设分类,否则回归 假设

    然后人们可能会出现要求角色... 如果您的逻辑响应向量仅包含 TRUE 或 FALSE 值,您也可能会遇到问题。如果您强制这样一个向量分解,它将只有一个级别。 (尽管在结果始终为 FALSE 的数据集上训练模型并没有真正意义)

    但如果作者包含了这种更“智能”的强制,他们将不得不处理这些问题并定义这些边境案件中的行为,并记录下来。

    【讨论】:

    • 感谢@Gerd Marvin - 猜猜他们为什么不在源代码中包含这种强制(逻辑因素)?
    • 感谢@Gerd Marvin 的讨论。您提到“如果您的逻辑响应向量仅包含 TRUE 或 FALSE 值,您也可能会遇到问题。” -- 但是一个因子变量只能有一个值...
    • @YZhang 你是对的。我把它混合在那里,因为我曾经遇到过一个问题,当时我将我的训练数据强制转换为水平不完整的因素......
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多