1

tl;df R::ranger 或 h2o.ai::randomForest 中的什么设置可以解释完全相同数据的非常不同的性能?

背景:
我正在尝试使用一个有些严重不平衡的数据集进行分类,并且正在考虑的优度是 Kappa(来自插入符号)。我有大约 70k 行和大约 400 列,大约 99.3% 是“0”类,而大约 0.7% 是“1”类。

这是游侠输入的片段:

  est_ranger <- ranger(y~., data=df, 
                       num.trees = 100, 
                       max.depth = 20, 
                       min.node.size = 5, 
                       mtry = sqrt(ncol(df)) %>% round(), 
                       splitrule = "gini", 
                       sample.fraction = 0.632)

这是 h2o.ai randomForest 输入的片段:

  est_h2o <- h2o.randomForest(x=2:ncol(df1), y=1,
                              training_frame = "df1.hex",
                              ntrees = 100, 
                              max_depth = 20,
                              min_rows = 5, 
                              sample_rate = 0.632, 
                              mtries = sqrt(ncol(df1)) %>% round())

注意:我尝试将它们都设置为最大深度 12,但没有帮助。我尝试将它们都发送到最大深度 20,但并没有改变。我尝试将最大深度设置为空,但这也无济于事。

当我运行 10 个 train-predict-evaluate 循环时,我得到了 ranger 的 kappa 值:

> summary(perf_ranger)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.2134  0.2261  0.2458  0.2410  0.2564  0.2633 

我得到了 h2o.ai randomForest 的 kappa 值:

> summary(perf_h2o)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5408  0.5575  0.6264  0.6182  0.6727  0.6922 

在我看来,h2o.randomForest 上的 kappa 的平均 kappa 比 ranger 高约 2.56 倍。

问题:那个游侠不是水在做什么?

想法:

  • h2o.ai 中可能存在动态学习率元素
  • h2o.ai 中的这个“直方图”和“箱”可能有一些东西

更新(9 月 23 日):

  • 尝试在 ecdf 域上使用 paa 来人为地压缩直方图,这大大降低了 ranger 的 kappa。结论是,去除列中的多样性会影响系统的性能。
  • 尝试强制平衡课程(一些统计数据的人说这很糟糕)并且 kappa 对他们两个都变得更好(见下文)。还将最小行数更改为 1。

这是护林员:

summary(store1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5113  0.5192  0.5252  0.5262  0.5299  0.5494 

这是h2o.ai:

summary(store2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.9377  0.9512  0.9571  0.9550  0.9595  0.9662 

不平衡数据的平均 kappa 差异为 0.377,而平衡类的平均 kappa 差异为 0.428。仍然存在差距,但对重采样数据的训练会产生更好的测试集性能。

Ranger 有 2 种平衡类别的方法,一种是通过重采样,另一种是通过“权重”,我认为(我疯狂猜测)与计算最佳分割的位置有关。

以下是 ranger 为加权驱动的类平衡提供的内容:

summary(store1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.3491  0.3896  0.4051  0.4079  0.4381  0.4520

以下是它为重采样驱动的类平衡提供的内容:

summary(store1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5170  0.5239  0.5310  0.5332  0.5425  0.5559 

这是我在使用它们时得到的结果:

summary(store1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5113  0.5212  0.5275  0.5295  0.5393  0.5544

前两个不重叠,一个显然更好。当它们都被使用时,与仅使用重采样时相比,减少非常轻微(可能可以忽略不计),因此在没有网格搜索和微调的情况下,使用基于重采样的平衡似乎更好。

当我尝试使用“extratrees”而不是“gini”时,这是一种与 h2o 不一致但近似于列子采样的拆分规则,摘要大幅上升:

summary(store1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.6267  0.6431  0.6500  0.6473  0.6535  0.6578 

这是我目前最好的,但这仍然是猜测。

4

0 回答 0