如何使用R-caret对回归问题中的不平衡类进行子采样?

问题描述 投票:-1回答:1

我是堆栈溢出和预测建模的新手。我试图根据光谱学预测叶片大小。然而,叶片大小(连续变量)取决于植物的生命形式(在我的例子中,3个分类)。这些课程严重失衡。最重要的是,我想知道光谱学如何预测每个类别中的叶片大小。目前,我不确定如何拆分我的数据集,我在网上找到的大多数例子都是严格的分类问题,我不确定它是否适用于这种情况。我是否必须为每个班级构建一个单独的训练集,或者这是对训练集进行二次取样(向下,向上等)然后执行回归的正确方法?我正在使用R上的插入包,因为我也正在构建机器学习方法的集合,并且插入符号似乎是最用户友好的方式。我的数据集包括1647个预测变量和1500个观测值。到目前为止,我正在为每个类构建单独的模型,但它似乎不是正确的方法。

library(caret)
library(dplyr)
#data
 str(df,10)
'data.frame':   1648 obs. of  1904 variables:
$ life_form: Factor w/ 3 levels "","herbaceous",..
$ leaf_size: num  120.4 73.6 85.4 60.1 108.7 ...
$ X601     : num  0.0847 0.1065 0.1286 0.084 0.0967 ...
$ X602     : num  0.0844 0.1062 0.1284 0.0837 0.0964 ...
$ X603     : num  0.0841 0.1058 0.1281 0.0833 0.0961 ...
$ X604     : num  0.0837 0.1053 0.1277 0.0829 0.0957 ...
$ X605     : num  0.0833 0.1049 0.1273 0.0824 0.0953 ...
$ X606     : num  0.0828 0.1044 0.1269 0.0819 0.0948 ...
$ X607     : num  0.0823 0.1039 0.1265 0.0814 0.0943 ...
$ X608     : num  0.0818 0.1033 0.1259 0.0809 0.0937 ...
 ....
$ X2500    : num  0.0853 0.1072 0.129 0.0847 0.0972 ...

  df %>% 
  group_by(life_form) %>% 
  summarise(n = n())

# A tibble: 
1 ""             4
2 grass        564
3 herbaceous   227
4 woody        853

#Filtering per class
woody = df %>% dplyr::filter(life_form =="woody")

# Data partition
index <- createDataPartition(woody$leaf_size, p = 0.7, list = FALSE)
train_data <- woody[index, ]
test_data  <- woody[-index, ]

control = trainControl(method ="cv",number= 10, repeat=5,   selectionFunction = "oneSE")
set.seed(1234)
mod1 <- train(tam_folha ~ ., data = train_data,
method = "pls",
metric = "RMSE",
tuneLength = 10,
trControl = control)

### Repeat to other life form classes
r machine-learning regression r-caret
1个回答
1
投票

你似乎有点困惑;显然,你没有阶级不平衡问题。

类不平衡仅适用于分类设置(您处于回归模式);它与类(结果,即你想要预测的结果)有关,而与你的情况不同。教科书示例是当您遇到二进制分类问题(0/1)时,例如,99%的样本属于0级,并且您需要采用特定技术以防止分类器获得99%的准确率通过天真​​地预测0级的所有内容,即忽略1级(通常,它恰好是感兴趣的类,代表例如故障,患者等)。

以上任何内容均不适用于您的情况。

话虽如此,根据life_form功能的值将数据集分成较小的数据集并不是一种无效的方法,一般来说(但不是由于类不平衡,这里不存在)。确定是否应该这样做的最安全的方法是很好的反复试验:尝试一下,并尝试使用整个数据集。原则上,没有理由为什么典型的ML算法不能处理这些特征中的不平衡。

© www.soinside.com 2019 - 2024. All rights reserved.