我对派对包中varimp()
函数的行为感到困惑。
我在Strobl等人之后使用条件随机森林来获得变量重要性。 2009年的建议。
它适用于我的所有数据集但只有一个。我必须对这一点进行观察。 但是,即使条件随机森林在整个数据集上正常运行,它也只返回子集的零...并且似乎根本没有运行但是没有生成错误。
我想知道预测变量的数量是否太少,只有少数观测值,并且仅使用有限数量的预测变量,但它给出了相同的结果。 它似乎不是链接到变量类型,因为它在其他情况下被指出......
我显然缺少一些东西,但我无法弄清楚是什么......
如果有人对我应该关注的方向有所了解,我将非常感激。
我的数据here。
VarforCRF <- read.csv("Data.csv",sep=";",dec=",",row.names=1)
library(party)
set.seed(round(runif(1,0,1)*10000))
# Run just fine with the entire dataset
cRF <- cforest(Syrph_pred~.,data = VarforCRF, control = cforest_unbiased(ntree=100))
varimp(object = cRF,conditional = T)
CRF_West <- subset(VarforCRF,Sector == "West")
# Does not seem to run at all with subset and return zeros
cRF_W <- cforest(Syrph_pred~.,data = CRF_West, control = cforest_unbiased(ntree=100))
varimp(object = cRF_W,conditional = T)
答案 0 :(得分:0)
您的子样本CRF_West
太小,无法在森林树木中产生任何分裂。该数据具有23个观察结果,从中为每棵树绘制约2/3的自举样本。但是,用于拆分的节点的最小尺寸是20个观测值,最小节点尺寸为7个观测值,请参阅?ctree_control
。
要强制树/林分割,可以使用较小的值,例如
cRF_W <- cforest(Syrph_pred~.,data = CRF_West,
control = cforest_unbiased(ntree=100, minsplit = 15, minbucket = 5))
对于此林,您将获得非零变量重要性。然而,这是否会在如此小的样本上产生特别好/可靠的结果是一个不同的问题。
最后的评论:尝试通过设置种子使计算可重现是好的,非常有用。然而,对随机种子使用(不可再现的)随机数会破坏整个事物......