使用Boosted回归树克服完全分离

时间:2016-06-10 06:22:41

标签: machine-learning regression glm cross-validation gbm

我试图使用BRT分析来拟合和测试模型,并且我一直遇到完全分离的错误。我尝试了多种方法来克服这个问题无济于事。我通过logistf使用了一种形式的惩罚回归,在模型上放置了贝叶斯先验,省略了我认为负责过度拟合的变量,使用log1p转换了所有偏斜的预测变量,并根据Coadou,2013完全忽略了它({{3} })建议过度拟合BRT训练模型不会造成大问题。

在她的文章中,她指出,导致训练数据完美拟合的树木对测试样本的最终提升输出贡献很小。然而,即使我忽略了完全分离并试图预测我的评估数据(我试图将我的模型拟合到2000点,并在剩余的11,141点上进行测试),我的情节也是空白的(图2中的Elith等人) .2008)。

我读到的所有文章都没有讨论克服BRT中完全分离的解决方案,这让我觉得可能有一个我不知道的问题的替代解决方案。

我有一个非常大的数据集(13,141分),带有二元响应变量和16个协变量。我还尝试仅使用5个协变量拟合模型并遇到同样的问题。任何帮助都将非常感激。我附上了我的数据头来给你一个想法。

Hotspot_Resp Dist_Build Dist_River Dist_Road Dist_Underpro   Aspect
           0        935       1074     18396           335   303.69
           0        893       1112     18355           299   176.50
           0        884       1133     18335           298   176.50
           0        849       1208     18261           297   175.10
           0        856       1216     18254           310   175.10
           0       1212       1501     18021           827   215.54   
Soil_Type OPP_Class    Elevation   Dist_Forest     Build_Density Dist_Fence
        2         1     3.218876     5.659482           9.360116   8.180601
        2         1     2.995732     5.673323           9.360116   8.179480
        2         1     2.995732     5.730100           9.360116   8.174985
        2         1     2.079442     5.908083           9.360116   8.161090
        2         1     2.079442     5.945421           9.360116   8.156797
        2         1     2.564949     6.523562           9.254766   7.988204
      DistGC       Dist_Clear     Slope Canopy_Cov   No_Canopy
    5.424950               0  1.0152307         0            3
    5.204007               0  1.4678743         0            3
    5.117994               0  1.4678743         0            3 
    4.753590               0  1.5748465         0            3
    4.804021               0  1.5748465         0            3
    5.863631               0  0.9895412         0            3

请原谅嘈杂的变量名称!我的响应变量'Hotspot_Resp'是二进制的; 'Canopy_Cov','No_Canopy','Soil_Type'和'OPP_Class'是分类变量。其中许多变量都是log1p或log变换但为了简单起见,我在这里保留了原始列名。

无论我尝试什么,每次尝试适合以下模型时:

gbm.step(data=training.model1, gbm.x=2:16, gbm.y=1, 
                family="bernoulli", tree.complexity=5, learning.rate=0.01, 
                bag.fraction=0.5)

它运行交叉验证过程,但我得到:

Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

请注意:根据Elith等人的第一步。关于BRT的2008年教程是检查响应变量的总和。我实现这一目标的唯一方法是将Hotspot_Resp设置为numeric,并将其设置为character。当Hotspot_Resp设置为numeric时,我能够成功执行拟合模型(尽管完全分离)。但是,当我设置为factor时,我会收到以下内容:

Error in while (delta.deviance > tolerance.test & n.fitted < max.trees) { : 
  missing value where TRUE/FALSE needed
In addition: There were 44 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In mean.default(y.data) : argument is not numeric or logical: returning NA
2: In Ops.factor(y.data, site.weights) : '*' not meaningful for factors

再次非常感谢您提供的任何帮助或见解!!

0 个答案:

没有答案