我有一个相当庞大的数据集,我想排除方差较低的列,所以我想使用“NearZeroVar”短语。但是,我确实有些困难理解freqCut和uniqueCut的作用以及它们如何相互影响。我已经阅读了R中的说明,但这对我并没有什么帮助。 如果有人能够向我解释一下,我将非常感谢!
我有一个相当庞大的数据集,我想排除方差较低的列,所以我想使用“NearZeroVar”短语。但是,我确实有些困难理解freqCut和uniqueCut的作用以及它们如何相互影响。我已经阅读了R中的说明,但这对我并没有什么帮助。 如果有人能够向我解释一下,我将非常感谢!
如果一个变量变化很小或变化不大,它就像一个常数,对于预测是没有用的。这将具有接近零的方差,因此该函数得名。
这两个参数互不影响,它们存在是为了处理导致接近零方差变量的常见情况。列需要同时不满足这两个标准才会被排除。
让我们使用一个示例:
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
nearZeroVar(mat)
[1] 1
让我们看看第二列,最常见的到第二常见的是8/1,它有2个独特的值,使得它为2/9 = 0.22。因此,要将其过滤掉,您需要更改这两个设置:
nearZeroVar(mat,freqCut=7/1,uniqueCut=30)
[1] 1 2
nearZeroVar(mat,freqCut=0.1,uniqueCut=50)
[1] 1 2 3
new <- c(1,1,3700,1,1,1,1,1,1,2600,1,1,3000,1,1,1,1,1,1,1,1,1)
。现在设置NearZeroVar(df, freqCut = 18/4, uniqueCut = 15),据我所知,这意味着如果有超过18个值相等且您的唯一值少于2个(2/22 = 0.091),则应将该列留出。我错在哪里了? - Janacounts = sort(table(new),decreasing=TRUE); counts[1]/counts[2]
这将给出19,因此18/4已经足够了。唯一的切割是总数中独特值的数量,即length(counts)/sum(counts)
这将给出0.181。所以您需要类似于0.2的东西。 - StupidWolfnearZeroVar(data.frame(new),freqCut = 18,uniqueCut = 20)
请执行上述代码。 - StupidWolf