问题描述
我不确定对这个问题采取什么方法(我是 R 和统计分析的新手)。我的数据集中有一个高度不平衡的类:
PCL_Sum n
* <dbl> <int>
1 0 300
2 1 25
我意识到我可以对这些数据使用 downSample 来获得一个平衡集,其中包含 25 个随机选择的 0 和我现有的 25 个 1。但是,我想重复这个过程 12 次,以便使用我所有的“0”数据,剩下 12 组数据。
我意识到我可以手动完成 12 次,但我想自动化该过程。有人能给我一个他们将如何解决这个问题的一般想法吗?我意识到那里可能有一个答案,但我无法理解我找到的文档。谢谢!
解决方法
downSample 有什么不好的地方吗?看起来你可以只应用它 12 次,然后从那里开始你的样品。这是一个例子。
data(oil)
table(oilType)
downSample(fattyAcids,oilType)
mysamples <- lapply(1:12,function(x){downSample(fattyAcids,oilType)})
然后您可以为第一组调用 mysamples[[1]]
,依此类推。
> mysamples[[1]]
Palmitic Stearic Oleic Linoleic Linolenic Eicosanoic Eicosenoic Class
1 11.5 5.1 27.8 54.5 0.2 0.4 0.1 A
2 11.4 5.8 34.5 48.3 1.0 0.1 0.1 A
3 6.1 4.1 24.0 64.3 0.1 0.3 0.1 B
4 6.1 4.1 26.7 61.0 0.6 0.3 0.2 B
5 9.7 3.4 59.3 20.5 0.1 1.5 1.2 C
6 9.6 3.3 57.7 20.7 0.2 1.5 1.8 C
7 9.3 2.8 65.0 17.0 3.9 0.5 0.7 D
8 10.9 2.7 76.7 7.9 0.8 0.1 0.1 D
9 10.9 3.6 26.0 52.6 5.5 0.4 0.2 E
10 10.5 4.2 24.4 52.1 7.5 0.4 0.1 E
11 5.4 2.0 53.2 28.9 7.3 0.6 1.3 F
12 5.1 2.3 55.9 27.4 6.8 0.5 0.5 F
13 10.0 2.3 36.9 47.1 2.2 0.5 0.5 G
14 10.7 1.8 30.2 55.5 0.9 0.5 0.3 G
> mysamples[[2]]
Palmitic Stearic Oleic Linoleic Linolenic Eicosanoic Eicosenoic Class
1 13.0 6.2 25.8 55.0 0.8 0.1 0.1 A
2 13.1 5.7 31.7 49.5 0.6 0.1 0.1 A
3 5.6 4.2 25.7 58.9 1.7 2.8 0.9 B
4 6.1 4.1 24.0 64.3 0.1 0.3 0.1 B
5 9.6 3.3 57.7 20.7 0.2 1.5 1.8 C
6 10.0 3.3 60.0 21.3 0.2 1.5 1.3 C
7 9.3 2.8 65.0 17.0 3.9 0.5 0.7 D
8 14.9 2.6 68.2 12.8 0.6 0.4 0.3 D
9 10.9 3.6 26.0 52.6 5.5 0.4 0.2 E
10 9.7 3.9 25.1 54.2 5.9 0.1 0.1 E
11 5.1 2.3 55.9 27.4 6.8 0.5 0.5 F
12 5.5 1.7 59.0 21.3 9.3 0.6 1.5 F
13 10.7 1.8 30.2 55.5 0.9 0.5 0.3 G
14 10.0 2.3 36.9 47.1 2.2 0.5 0.5 G
编辑独特的样本:
df <- data.frame(class = c(rep("A",25),rep("B",300)),value = 1:325)
mysamples <- lapply(1:12,function(x){df[c(1:25,(x * 25 + 1) : ((x+1) * 25)),]})
这将取样本 1 中多数类的前 25 个,样本 2 中的后 25 个,依此类推,直到第 12 个样本。
,我们也可以使用 replicate
library(caret)
out <- replicate(12,downSample(fattyAcids,oilType),simplify = FALSE)