如何在不平衡数据上设置随机森林的样本大小
How to set sampsize for random-forest on unbalanced data
我想使用随机森林构建物种分布模型:
我的训练数据包括 971 个物种存在 (71)/不存在 (900) 的记录和系统采样点(4*4 米,随机起点)的三个环境变量。
训练数据:
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 ...
型号:
model <- randomForest(presence ~ v1 + v2 + v3, data = train)
因为我的数据不平衡 (71/900),所以我尝试将 sampsize=(c(71,71))
包含在随机森林模型中。但是,它会导致 Error in randomForest.default(m, y, ...) : sampsize should be of length one
- 我做错了什么?
你的class/target变量是数值型的,你需要用as.factor
把它转换成一个因子,这个道理可以理解为它处理列为数字,但一旦将其更改为因子,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 Size(s) of sample to draw. For classification, if sampsize
is a vector of the length the number of strata, then sampling is
stratified by strata, and the elements of sampsize indicate the
numbers to be drawn from the strata.
我想使用随机森林构建物种分布模型:
我的训练数据包括 971 个物种存在 (71)/不存在 (900) 的记录和系统采样点(4*4 米,随机起点)的三个环境变量。
训练数据:
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 ...
型号:
model <- randomForest(presence ~ v1 + v2 + v3, data = train)
因为我的数据不平衡 (71/900),所以我尝试将 sampsize=(c(71,71))
包含在随机森林模型中。但是,它会导致 Error in randomForest.default(m, y, ...) : sampsize should be of length one
- 我做错了什么?
你的class/target变量是数值型的,你需要用as.factor
把它转换成一个因子,这个道理可以理解为它处理列为数字,但一旦将其更改为因子,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 Size(s) of sample to draw. For classification, if sampsize is a vector of the length the number of strata, then sampling is stratified by strata, and the elements of sampsize indicate the numbers to be drawn from the strata.