在mlr中提取特征子集的CV结果

时间:2018-07-29 13:26:42

标签: r ensemble-learning mlr

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

在这里,最后一个和第二个结果可能很有趣,因为功能不同,但结果几乎相同。我只得到结果,而没有得到不同褶皱的预测/结果。 知道如何提取它们吗?

1 个答案:

答案 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不会使学习者拥有随机的功能子集)。应用功能选择的方式特定于特定的学习者,并且您获得的结果实际上无法转移到另一学习者。如果要在具有特征选择的集合中组合多个学习者,只需将每个具有特征选择的学习者包裹起来,然后将它们放入集合中。这样,您将为每个学习者获得最佳功能。