【问题标题】:How to run a gbm simulation over probabilities using caret package model results如何使用插入符号包模型结果对概率运行 gbm 模拟
【发布时间】:2017-06-22 18:11:43
【问题描述】:

我不确定这是否是正确的方法,我很乐意得到纠正。

拟合模型

我在 R 环境中使用 caret 包拟合了一个 gbm 模型,作为示例,我将在不进行任何参数调整并使用 iris 数据集的情况下进行此操作:

library(caret)
data(iris)
gbmFit <- train(Species ~ ., data = iris, method = "gbm")

如果我在 iris 数据集中进行了 4 次测量,这让我可以将一朵花所属的物种分类。

我有兴趣使用type = "prob" 中的predict 函数的结果来运行模拟。

使用 predict 得到每个物种的概率

由于这只是一个例子,我没有新数据,所以我将使用与新数据相同的数据,我使用预测函数来获得每朵花属于一个物种的概率:

PROBS <- predict(gbmFit4, iris[,1:4], type="prob")

这是结果示例

head(PROBS)
     setosa   versicolor    virginica
1 0.9999989 1.087268e-06 1.679813e-10
2 0.9999998 1.689137e-07 1.404242e-09
3 0.9999995 5.381312e-07 3.131823e-10
4 0.9999996 4.335414e-07 3.912857e-10
5 0.9999989 1.087268e-06 1.679813e-10
6 0.9999987 1.278968e-06 1.679813e-10

为一朵花运行模拟

我知道如何对一朵花进行模拟,我使用 PROB 数据框给我一朵花属于每个物种的概率,然后使用 sample 来模拟给定概率的分类,让比如说 1000000 个分类,我使用第 107 行,因为它不太确定:

set.seed(123)
summary(as.factor(sample(c("setosa", "versicolor", "virginica"), size = 100000, replace = TRUE, prob = PROBS[107,])))

导致

versicolor  virginica 
     14731      85269 

每次观察如何做

我的目标是使用新数据运行这样的模拟并获得以下结果:平均每个模拟的每个物种中分类了多少花(av_class_species);以及每个物种的最小值和最大值是多少(min_class_species、max_class_species),例如我制作了这个假数据框(数据集中有 150 朵花):

av_class_setosa  max_class_setosa min_class_setosa av_class_versicolor...
       24.4         35                 12                30.2

任何帮助将不胜感激

【问题讨论】:

    标签: r simulation r-caret gbm


    【解决方案1】:

    找到我自己的答案,虽然如果有人找到更有效的方法我会很高兴,这是用于运行 100 次模拟:

    SIMUL <- list()
    
    for(i in 1:100){
      species <- list()
      for(j in 1:nrow(PROBS)){
        species[[j]] <- sample(c("setosa", "versicolor", "virginica"), size = 1, replace = TRUE, prob = PROBS[j,])
      }
      SIMUL[[i]] <- as.data.frame(table(unlist(species)))
    }
    
    SIMUL <- do.call("rbind", SIMUL)
    
    SIMUL <- dplyr::group_by(SIMUL, Var1)
    SIMUL <- dplyr::summarise(SIMUL, MEAN_class = mean(Freq), MIN_Class = min(Freq), MAX_Class = max(Freq))
    

    这将导致:

    SIMUL
    
    Source: local data frame [3 x 4]
    
            Var1 MEAN_class MIN_Class MAX_Class
          (fctr)      (dbl)     (int)     (int)
    1     setosa       50.0        50        50
    2 versicolor       49.7        47        53
    3  virginica       50.3        47        53
    

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 2015-12-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2021-06-22
      • 1970-01-01
      相关资源
      最近更新 更多