2016-07-28 183 views
2

當我僅使用mtry參數作爲tuingrid時,它工作正常,但是當我添加ntree參數時,錯誤變爲Error in train.default(x, y, weights = w, ...): The tuning parameter grid should have columns mtry。代碼如下:在Caret包中調整隨機森林的兩個參數

require(RCurl) 
require(prettyR) 
library(caret) 
url <- "https://raw.githubusercontent.com/gastonstat/CreditScoring/master/CleanCreditScoring.csv" 
cs_data <- getURL(url) 
cs_data <- read.csv(textConnection(cs_data)) 
classes <- cs_data[, "Status"] 
predictors <- cs_data[, -match(c("Status", "Seniority", "Time", "Age", "Expenses", 
    "Income", "Assets", "Debt", "Amount", "Price", "Finrat", "Savings"), colnames(cs_data))] 

train_set <- createDataPartition(classes, p = 0.8, list = FALSE) 
set.seed(123) 

cs_data_train = cs_data[train_set, ] 
cs_data_test = cs_data[-train_set, ] 

# Define the tuned parameter 
grid <- expand.grid(mtry = seq(4,16,4), ntree = c(700, 1000,2000)) 

ctrl <- trainControl(method = "cv", number = 10, summaryFunction = twoClassSummary,classProbs = TRUE) 

rf_fit <- train(Status ~ ., data = cs_data_train, 
        method = "rf", 
        preProcess = c("center", "scale"), 
        tuneGrid = grid, 
        trControl = ctrl,   
        family= "binomial", 
        metric= "ROC" #define which metric to optimize metric='RMSE' 
       ) 
rf_fit 
+0

非常感謝@ ChirayuChamoli – MYjx

+0

you。很高興它幫助。 –

回答

8

您必須使用隨機森林包創建自定義RF,然後包含要包含的參數。

customRF <- list(type = "Classification", library = "randomForest", loop = NULL) 
customRF$parameters <- data.frame(parameter = c("mtry", "ntree"), class = rep("numeric", 2), label = c("mtry", "ntree")) 
customRF$grid <- function(x, y, len = NULL, search = "grid") {} 
customRF$fit <- function(x, y, wts, param, lev, last, weights, classProbs, ...) { 
    randomForest(x, y, mtry = param$mtry, ntree=param$ntree, ...) 
} 
customRF$predict <- function(modelFit, newdata, preProc = NULL, submodels = NULL) 
    predict(modelFit, newdata) 
customRF$prob <- function(modelFit, newdata, preProc = NULL, submodels = NULL) 
    predict(modelFit, newdata, type = "prob") 
customRF$sort <- function(x) x[order(x[,1]),] 
customRF$levels <- function(x) x$classes 
customRF 

然後,您可以在火車功能中使用[customRF]方法。

-1

你應該改變:

grid <- expand.grid(.mtry = seq(4,16,4),. ntree = c(700, 1000,2000))