varimp (R 方) 仅返回零

  • 本文关键字:返回 varimp r party
  • 更新时间 :
  • 英文 :


我对派对包中varimp()函数的行为感到困惑。

我正在使用条件随机森林来获得 Strobl 等人 2009 年建议的可变重要性。

它适用于我的所有数据集,除了一个。我必须对我的观察进行子集化。但是,即使条件随机森林在完整数据集上正常运行,它也只为子集返回零......并且似乎根本没有运行,但没有生成错误。

我想知道预测因子

的数量是否对于只有少数观察值来说太多了,并且只尝试使用有限数量的预测因子,但它给了我相同的结果。它似乎也没有链接到变量类型,因为它在其他情况下被指出......

我显然错过了一些东西,但我只是想不通是什么......

如果有人知道我应该看的方向,我将不胜感激。

我的数据在这里。

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)

您的子样本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))

对于此林,您将获得非零变量重要性。不过,这是否会导致在如此小的样本上产生特别好/可靠的结果是一个不同的问题。

最后一点:尝试通过设置种子使计算可重现是好的,非常有用。但是,对随机种子使用(不可重现的)随机数会破坏整个事情......

最新更新