代码之家  ›  专栏  ›  技术社区  ›  Avi

如何在R中从头开始创建随机林(没有randomforest包)

  •  1
  • Avi  · 技术社区  · 8 年前

    这是我想要使用随机林的方式,通过使用 RandomForest

    library (randomForest)
    rf1 <- randomForest(CLA ~ ., dat, ntree=100, norm.votes=FALSE)
    p1 <- predict(rf1, testing, type='response')
    confMat_rf1 <- table(p1,testing_CLA$CLA)
    accuracy_rf1 <- sum(diag(confMat_rf1))/sum(confMat_rf1)
    

    我不想使用 包装。给定数据集( dat )和使用 rpart 和默认值 randomforest 包,我怎么能得到同样的结果?例如,对于100个决策树,我需要运行以下命令:

    for(i in 1:100){
    cart.models[[i]]<-rpart(CLA~ ., data = random_dataset[[i]],cp=-1)
    } 
    

    random_dataset[[i]] 将随机选择默认数量的属性和行。此外 rpart公司 随机森林 ?

    1 回复  |  直到 8 年前
        1
  •  2
  •   kostas    6 年前

    通过在训练集和训练集的特征上使用rpart和引导样本训练多棵树,可以模拟训练随机森林。

    library(rpart)
    library(Metrics)
    library(doParallel)
    library(foreach)
    library(ggplot2)
    
    
    random_forest <- function(train_data, train_formula, method="class", feature_per=0.7, cp=0.01, min_split=20, min_bucket=round(min_split/3), max_depth=30, ntrees = 10) {
    
      target_variable <- as.character(train_formula)[[2]]
      features <- setdiff(colnames(train_data), target_variable)
      n_features <- length(features)
    
      ncores <- detectCores(logical=FALSE)
      cl <- makeCluster(ncores)
      registerDoParallel(cl)
    
      rf_model <- foreach(
        icount(ntrees),
        .packages = c("rpart", "Metrics")
      ) %dopar% {
        bagged_features <- sample(features, n_features * feature_per, replace = FALSE)
        index_bag <- sample(nrow(train_data), replace=TRUE)
        in_train_bag <- train_data[index_bag,]
        out_train_bag <- train_data[-index_bag,]
        trControl <- rpart.control(minsplit = min_split, minbucket = min_bucket, cp = cp, maxdepth = max_depth)
        tree <- rpart(formula = train_formula, 
                      data = in_train_bag, 
                      control = trControl)
    
        oob_pred <- predict(tree, newdata = out_train_bag, type = "class")
        oob_acc <- accuracy(actual = out_train_bag[, target_variable], predicted = oob_pred)
    
        list(tree=tree, oob_perf=oob_acc)
      }
    
      stopCluster(cl)
    
      rf_model
    
    }
    
    train_formula <- as.formula("Species ~ .")
    forest <- random_forest(train_data = iris, train_formula = train_formula)
    
    推荐文章