1. ホーム
  2. r

[解決済み] RのNearZeroVarとは何ですか?

2022-02-16 03:56:03

質問

巨大なデータセットがあり、その中から分散の小さい列を除外したいので、NearZeroVarという言葉を使いたいと思います。しかし、freqCutとuniqueCutが何をするのか、そしてそれらがどのようにお互いに影響し合っているのかを理解するのに苦労しています。私はすでにRの説明を読みましたが、それはこの件に関してはあまり役に立ちません。 もし誰かが私にそれを説明することができれば、私は非常に感謝します!

どのように解決するのですか?

変数の変化や変動がほとんどない場合、それは定数のようなもので、予測には役に立ちません。この場合、分散がゼロに近くなるため、この関数の名前になりました。

2つのパラメータは互いに影響し合うことはなく、ゼロに近い分散の変数を生じさせる一般的なシナリオに対処するために存在します。列が除外されるには、両方の基準を満たさなければなりません。

例で説明しましょう。

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

もしデフォルトで、最も一般的な値から2番目とユニークな値に対して95/5を要求すると、1番目のカラムだけが取り出されるのがわかります。

nearZeroVar(mat)
[1] 1

2列目を見てみましょう。最も一般的な値から2番目に多い値は8/1で、ユニークな値は2つあり、2/9 = 0.22となります。したがって、これをフィルタリングするためには、2つの設定を変更する必要があります。

nearZeroVar(mat,freqCut=7/1,uniqueCut=30)
[1] 1 2

最後に、フィルタリングしない方がいいのは3列目か4列目なので、無意味なものを設定するときにフィルタリングする列です。

nearZeroVar(mat,freqCut=0.1,uniqueCut=50)
[1] 1 2 3