1

我尝试更多地了解 mlr3filters 的 AUC 过滤器。我使用分类任务 ( task) 和以下代码:

filter = flt("auc")

filter$calculate(task)

result<-as.data.table(filter)

从 mlr3measures::auc() 的文档中,我了解到我需要一个概率向量和一个具有(二进制)因子值的向量以及“真实”类。在我的任务中,我有二进制类(作为“目标”)和许多数字特征,但不在0 和 1 之间,所以我不能将它们解释为概率。那为什么要计算AUC呢?还是有额外的假设?我的问题是我无法从filter$help().

作为一个一般性问题: https://mlr3filters.mlr-org.com/reference/index.html中的函数引用与底层 R 函数之间是否有额外的“解释层” ?例如,我知道 FilterVariance$new() 会生成一个过滤器对象,该对象仅通过使用这些特征并应用 stats::var() 来计算单个特征的方差。但从书中,我也看到我可以指定截止值:

po("filter", mlr3filters::FilterVariance$new(), filter.frac = 0.5)

在哪里可以找到有关此 filter.frac 值的详细信息?filter$help()我在 stats::var()中也找不到它

同样,我知道 FilterCorrelation$new() 生成一个过滤器对象,该对象采用单个特征和目标来计算特征等级。这可能是不言自明的,但我想知道在哪里可以找到有关此类问题的更多详细信息。

我尝试了在这里找到的答案(在 mlr3filters 中过滤 - 我在哪里可以找到有关这些方法的详细信息?),但我在filter$help()

提前感谢初学者$help()

4

1 回答 1

3

虽然 AUC 过滤器的文档表明它类似于mlr3measures::auc,但它实际上并未使用该功能。相反,它使用自己实现计算(“接收器操作特性”)曲线下的面积,它不需要概率值,只需要一个连续值,可用于将样本与截止值分开。

Filter我了解,s 主要用于计算过滤器分数(请参阅基类的文档Filter)。它们与PipeOpFilterfrommlr3pipelines包结合使用最有用,这也是您引用的书中的示例正在做的事情。PipeOps 通常有助于将过滤步骤(或任何类型的预处理)集成到学习过程中(书中的章节mlr3pipelines可能是了解这一点的好点)。但是,这些也可以用于计算步骤,例如从 a 中过滤掉列Task

pof = po("filter", mlr3filters::FilterVariance$new(), filter.frac = 0.5)
task = tsk("iris")
pof_result = pof$train(list(task))
pof_result[[1]]
#> <TaskClassif:iris> (150 x 3)
#> * Target: Species
#> * Properties: multiclass
#> * Features (2):
#>   - dbl (2): Petal.Length, Sepal.Length
pof_result[[1]]$data()
#>        Species Petal.Length Sepal.Length
#>   1:    setosa          1.4          5.1
#>   2:    setosa          1.4          4.9
#>   3:    setosa          1.3          4.7
#>   4:    setosa          1.5          4.6
#>   5:    setosa          1.4          5.0
#>  ---                                    
#> 146: virginica          5.2          6.7
#> 147: virginica          5.0          6.3
#> 148: virginica          5.2          6.5
#> 149: virginica          5.4          6.2
#> 150: virginica          5.1          5.9

看看?PipeOp这个$train()方法(虽然真的书的章节是一个更好的地方开始恕我直言)。?PipeOpFilter记录超filter.frac参数:

Parameters:

[...]

   • ‘filter.nfeat’ :: ‘numeric(1)’
     Number of features to select. Mutually exclusive with ‘frac’
     and ‘cutoff’.

   • ‘filter.frac’ :: ‘numeric(1)’
     Fraction of features to keep. Mutually exclusive with ‘nfeat’
     and ‘cutoff’.

   • ‘filter.cutoff’ :: ‘numeric(1)’
     Minimum value of filter heuristic for which to keep features.
     Mutually exclusive with ‘nfeat’ and ‘frac’.

Note that at least one of ‘filter.nfeat’, ‘filter.frac’, or
‘filter.cutoff’ must be given.

所以它所做的是运行Filter's$calculate()函数并根据结果选择特征$score

要回答关于从哪里获得帮助的更一般的问题:通常,对象类(您通常可以通过调用找到class(object))是一个很好的开始查看;这些类通常继承自更通用的基类,如果它们不熟悉,这些基类也可以解释该过程的某些部分。在这个例子中,PipeOpFilter继承自几个类,其中PipeOp——帮助文件中说明了这一点。除此之外,还有这本书,你知道的。最后,如果一切都失败了,不幸的是,可能有必要查看源代码。

于 2021-03-23T18:54:20.257 回答