我想使用随机森林构建物种分布模型:
我的训练数据包括971个物种存在记录(71)/缺失(900)和系统采样点(4 * 4m,随机起点)的三个环境变量。
培训数据:
res.set('Access-Control-Allow-Headers', '*');
模型:
str(train)
'data.frame': 971 obs. of 4 variables:
$ presence: num 0 0 0 0 0 0 0 0 0 0 ...
$ v1 : num 0.18 0.18 0.24 0.24 0.75 0.7 0.27 0 0.29 0.77 ...
$ v2 : num 10 110 19 99 97 71 64 45 54 74 ...
$ v3 : Factor w/ 3 levels "cat1","cat2",..: 1 1 1 1 2 2 2 3 1 2 ...
由于我的数据不平衡(71/900),我尝试在随机森林模型中包含model <- randomForest(presence ~ v1 + v2 + v3, data = train)
。但是,它会导致sampsize=(c(71,71))
- 我做错了什么?
答案 0 :(得分:0)
您的类/目标变量是数字的,您需要使用as.factor
将其转换为因子,推理可以理解,它可以在将列视为列时获得层次数字,但一旦您将其更改为因子,sampsize
将了解您想要获取每个staratum的值。
另请注意,如果sampsize值高于频率,则sampsize值必须等于或小于每个类别的频率。它仍会抛出larger than class frequency
(我假设你想在这里进行分类)
例如,以下赢了:
model <- randomForest(am ~ mpg + disp , data = mtcars,sampsize = c(10,10))
这将有效:
model <- randomForest(as.factor(am) ~ mpg + disp , data = mtcars,sampsize = c(10,10))
来自randomForest
sampsize要绘制的样本的大小。对于分类,如果是sampsize 是一个长度为向量数的向量,然后是采样 按层次分层,sampsize的元素表示 从阶层中抽取的数字。