R 中的 NearZeroVar 是什么?

Jan*_*ana 6 statistics r variance r-caret

我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 NearZeroVar。但是,我确实很难理解 freqCut 和 uniqueCut 的作用以及它们如何相互影响。我已经阅读了 R 中的解释,但这并没有真正帮助我解决这个问题。如果有人能给我解释一下,我将非常感激!

Stu*_*olf 5

如果一个变量的变化或变化很小,它就像一个常数,对预测没有用处。这将具有接近于零的方差,因此该函数的名称。

这两个参数不会相互影响,它们的作用是处理产生接近零方差的变量的常见场景。该列需要满足两个条件才能被排除。

让我们举个例子:

mat = cbind(1,rep(c(1,2),c(8,1)),rep(1:3,3),1:9)
mat
      [,1] [,2] [,3] [,4]
 [1,]    1    1    1    1
 [2,]    1    1    2    2
 [3,]    1    1    3    3
 [4,]    1    1    1    4
 [5,]    1    1    2    5
 [6,]    1    1    3    6
 [7,]    1    1    1    7
 [8,]    1    1    2    8
 [9,]    1    2    3    9
Run Code Online (Sandbox Code Playgroud)

如果我们使用默认值,即最常见到第二个值和唯一值要求为 95/5,您可以看到仅删除了第一列:

nearZeroVar(mat)
[1] 1
Run Code Online (Sandbox Code Playgroud)

让我们看看第二列,最常见到第二多的是 8/1,它有 2 个唯一值,即 2/9 = 0.22。因此,要过滤掉此内容,您需要更改两个设置:

nearZeroVar(mat,freqCut=7/1,uniqueCut=30)
[1] 1 2
Run Code Online (Sandbox Code Playgroud)

最后,您最可能不应该过滤掉的内容是第 3 列或第 4 列,因此当我们设置一些无意义的内容时,我们将过滤掉该列:

nearZeroVar(mat,freqCut=0.1,uniqueCut=50)
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)