更改CARET k折叠交叉验证分类中的SMOTE参数

5 r classification r-caret

我有一个分类问题,有一个非常偏斜的类来预测(例如90%/ 10%的不平衡二进制变量来预测).

为了解决这个问题,我想使用SMOTE方法对这个类变量进行过采样.但是,正如我在此处所读到的(http://www.marcoaltini.com/blog/dealing-with-imbalanced-data-undersampling-oversampling-and-proper-cross-validation),最好在k-中使用SMOTE折叠循环以避免过度拟合.

当我使用插入包来执行我的分析时,我指的是这个链接(http://topepo.github.io/caret/sampling.html).我完全展现了一切,但最后一部分解释了如何更改SMOTE参数:

smotest <- list(name = "SMOTE with more neighbors!",
            func = function (x, y) {
              library(DMwR)
              dat <- if (is.data.frame(x)) x else as.data.frame(x)
              dat$.y <- y
              dat <- SMOTE(.y ~ ., data = dat, k = 10)
              list(x = dat[, !grepl(".y", colnames(dat), fixed = TRUE)],
                   y = dat$.y)
              },
            first = TRUE)
Run Code Online (Sandbox Code Playgroud)

我根本就不明白这一点.有人在意解释?假设我想要包含SMOTE参数perc.over,k和perc.under,我该怎么做?

非常感谢你.

编辑:

实际上我意识到我可能只是在上面的函数中的"SMOTE"表达式中添加这些参数,例如它会给出类似的东西:

smotest <- list(name = "SMOTE with more neighbors!",
            func = function (x, y) {
              library(DMwR)
              dat <- if (is.data.frame(x)) x else as.data.frame(x)
              dat$.y <- y
              dat <- SMOTE(.y ~ ., data = dat, k = 10, perc.over = 1200, perc.under = 100)
              list(x = dat[, !grepl(".y", colnames(dat), fixed = TRUE)],
                   y = dat$.y)
              },
            first = TRUE)
Run Code Online (Sandbox Code Playgroud)

Pop*_*Pop 1

我不确定是否理解了您不理解的内容,但这里试图澄清这段代码中所做的事情。

该对象被创建为列表,因为它是函数参数必须表示的smotest方式。该列表的第一个元素仅用于显示目的。第二个是实际的采样函数。第三个,,是一个逻辑值,指示采样是否必须在预处理步骤之前或之后完成。samplingtrainControlnamefuncfirst

这里的元素func只是SMOTE函数的包装。在此包装器中,第 3 行位于此处,因为只有 adata.frame可以传递给SMOTE函数。添加第 4 行是因为a中使用的是formulaa 的组合,而不是 Couple 。第 6 行在这里确保返回适当的格式data.frameSMOTEx ytrainControl

并且,回答您的最后一个问题:是的,您可以按照您的建议将其他参数设置为SMOTE