我正在使用party包使用cforest((函数创建一个随机林模型。然而,当我尝试使用varimp函数查看模型的可变重要性值时,varimp功能会为我的特征产生不同的值。有什么办法解决这个问题吗?
对于任何使用随机值的进程,例如创建随机森林模型,或使用随机排列查找变量重要性,每次运行都会出现轻微变化。
如果你想";锁定";其中一个值,例如,为了使分析可复制,可以使用set.seed(<any number>)
。下面是一个例子:
library(party)
# Create model
mod <- cforest(hp ~ ., mtcars)
# Without seed we get different values each time
varimp(mod)[1]
#> mpg
#> 498.8208
varimp(mod)[1]
#> mpg
#> 513.8174
# However, if we set the seed, we get the same result each time
set.seed(1)
varimp(mod)[1]
#> mpg
#> 464.639
set.seed(1)
varimp(mod)[1]
#> mpg
#> 464.639
更新
请注意,set.seed()
在重复调用随机函数时仍然会给出不同的值,但是以可预测的方式。例如,如果我调用rnorm(1)
两次,我会得到两个不同的值。但对于相同的种子,每次重置种子时都会得到相同的两个值。
set.seed(1)
rnorm(1)
#> [1] -0.6264538
rnorm(1)
#> [1] 0.1836433
set.seed(1)
rnorm(1)
#> [1] -0.6264538
rnorm(1)
#> [1] 0.1836433
您可以通过在脚本中多次调用set.seed()
来重置种子,或者在运行脚本之前重新启动R会话(Windows的快捷键为CTRL + SHIFT + F10
(。