【问题标题】:Using partialPlot after fitting a Random Forest model in caret在插入符号中拟合随机森林模型后使用 partialPlot
【发布时间】:2015-07-14 04:45:15
【问题描述】:

使用 train() 函数拟合 randomForest 后,我​​在调用 partialPlot() 和 plotmo() 时遇到问题。这是一些可重现的代码:

library(AER)
library(caret)

data(Mortgage)

fitControl <- trainControl(method = "repeatedcv"
                           ,number = 5
                           ,repeats = 10
                           ,allowParallel = TRUE)

library(doMC)

registerDoMC(cores=10)

Final.rfModel <- train(form=networth ~ ., data=Mortgage, method = "rf", metric='RMSE', trControl = fitControl, tuneLength=10, importance = TRUE)

#### partial plots fail
partialPlot(Final.rfModel$finalModel, Mortgage, "liquid")

library(plotmo)
plotmo(Final.rfModel$finalModel)

【问题讨论】:

    标签: random-forest r-caret


    【解决方案1】:

    有些函数(包括randomForesttrain)处理虚拟变量的方式有些不一致。 R 中使用公式方法的大多数函数会将因子预测变量转换为虚拟变量,因为它们的模型需要数据的数字表示。例外情况是基于树和规则的模型(可以根据分类预测变量进行拆分)、朴素贝叶斯和其他一些模型。

    所以randomForest 不会在您使用randomForest(y ~ ., data = dat) 时创建虚拟变量,但train(和大多数其他人)会使用train(y ~ ., data = dat) 之类的调用。

    发生错误是因为ratemarried 和其他一些预测变量是因素。 train 创建的虚拟变量名称不同,因此 partialPlot 找不到它们。

    train 使用非公式方法会将因子预测变量传递给randomForest,一切都会正常进行。

    TL;DR

    在这种情况下使用train 的非公式方法:

    Final.rfModel <- train(form=networth ~ ., data=Mortgage, 
                           method = "rf", 
                           metric='RMSE', 
                           trControl = fitControl, 
                           tuneLength=10, 
                           importance = TRUE)
    

    最大

    【讨论】:

    • 你能展示一个火车中的非公式方法的例子吗?你的例子仍然有一个公式。
    • 嗨@williamchiu。你是对的,看起来 Max 无意中使用了基于公式的方法。我相信你已经想通了,非公式(或默认)方法是简单地声明 x 和 y 从而为类 'default' 声明 S3 方法: train((x, y, method = "rf", preProcess =空,...,
    猜你喜欢
    • 2017-08-11
    • 2016-04-10
    • 2016-05-11
    • 2017-05-14
    • 2015-02-10
    • 2016-08-10
    • 2016-03-01
    • 2015-10-08
    • 2020-07-23
    相关资源
    最近更新 更多