mlr软件包提供了将学习者与随机特征子集融合的机会。不相关的子集可能有助于进行投票合奏/平均合奏。如果要素因不同的要素工程程序而部分冗余,或者只是因为不同的子集给出不相关(但相似)的结果,这可能会很有趣。 为了使用它,我必须计算CV结果之间的相关性,但是我不知道如何提取它们。
这是GitHub页面上的一个小示例:
ctrl = makeFeatSelControlRandom(maxit = 5L)
rdesc = makeResampleDesc("CV", iters = 10)
sfeats = selectFeatures(learner = "classif.randomForest",
task = iris.task,
resampling = rdesc,
control = ctrl)
print(sfeats)
With control class: FeatSelControlRandom
Imputation value: 1
[FeatSel-x] 1: 0101 (2 bits)
[FeatSel-y] 1: mmce.test.mean=0.0733333; time: 0.0 min
[FeatSel-x] 1: 1001 (2 bits)
[FeatSel-y] 1: mmce.test.mean=0.0466667; time: 0.0 min
[FeatSel-x] 1: 1001 (2 bits)
[FeatSel-y] 1: mmce.test.mean=0.0466667; time: 0.0 min
[FeatSel-x] 1: 0000 (0 bits)
[FeatSel-y] 1: mmce.test.mean=0.6333333; time: 0.0 min
[FeatSel-x] 1: 0110 (2 bits)
[FeatSel-y] 1: mmce.test.mean=0.0533333; time: 0.0 min
[FeatSel] Result: Sepal.LengthPetal.Width (2 bits)
FeatSel result:
Features (2): Sepal.Length, Petal.Width
mmce.test.mean=0.0466667
在这里,最后一个和第二个结果可能很有趣,因为功能不同,但结果几乎相同。我只得到结果,而没有得到不同褶皱的预测/结果。 知道如何提取它们吗?
答案 0 :(得分:0)
您可以通过opt路径获取有关功能选择过程中发生的情况的详细信息:
cbind(getOptPathX(sfeats$opt.path), getOptPathY(sfeats$opt.path))
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 1 1 0 1
2 0 1 0 1
3 1 0 1 0
4 1 0 0 0
5 0 0 0 0
getOptPathY(sfeats$opt.path)
1 0.05333333
2 0.06666667
3 0.06000000
4 0.28000000
5 0.63333333
但是,不会保存单个预测。
不过,我真的不太了解您要怎么做(而且mlr不会使学习者拥有随机的功能子集)。应用功能选择的方式特定于特定的学习者,并且您获得的结果实际上无法转移到另一学习者。如果要在具有特征选择的集合中组合多个学习者,只需将每个具有特征选择的学习者包裹起来,然后将它们放入集合中。这样,您将为每个学习者获得最佳功能。