【发布时间】:2016-02-25 21:23:55
【问题描述】:
我有一个分类问题,需要预测一个非常倾斜的类(例如,要预测 90% / 10% 不平衡的二元变量)。
为了解决这个问题,我想使用 SMOTE 方法对这个类变量进行过采样。但是,正如我在此处 (http://www.marcoaltini.com/blog/dealing-with-imbalanced-data-undersampling-oversampling-and-proper-cross-validation) 所读到的,最佳做法是在 k-fold 循环中使用 SMOTE 以避免过度拟合。
由于我使用 caret 包来执行我的分析,我指的是这个链接 (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)
我只是不明白这一点。有人愿意解释吗?假设我想包含 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)
【问题讨论】:
标签: r classification r-caret