如何在 R 中重复 downSample?
How to repeat downSample in R?
我不确定该用什么方法来解决这个问题(我对 R 和统计分析都不熟悉)。我的数据集中有一个高度不平衡的 class:
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 中多数 class 的前 25 个,样本 2 中接下来的 25 个,等等,直到第 12 个样本。
我们也可以使用replicate
library(caret)
out <- replicate(12, downSample(fattyAcids, oilType), simplify = FALSE)
我不确定该用什么方法来解决这个问题(我对 R 和统计分析都不熟悉)。我的数据集中有一个高度不平衡的 class:
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 中多数 class 的前 25 个,样本 2 中接下来的 25 个,等等,直到第 12 个样本。
我们也可以使用replicate
library(caret)
out <- replicate(12, downSample(fattyAcids, oilType), simplify = FALSE)