我试图使用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
再次非常感谢您提供的任何帮助或见解!!