サーチ…


ゼロまたはゼロに近い分散を持つフィーチャを削除する

分散がゼロに近いフィーチャが削除の候補になります。

独自のしきい値以下の数値分散を手動で検出することができます。

data("GermanCredit")
variances<-apply(GermanCredit, 2, var)
variances[which(variances<=0.0025)]

または、キャレット・パッケージを使用して、ゼロ分散に近い値を見つけることができます。ここでの利点は、分散の数値計算ではなく、むしろ希少性の関数としてゼロ分散に近い値を定義することです。

"nearZeroVarは、1つの固有の値(すなわち分散差の予測値)を持つ予測子または以下の特性の両方を持つ予測子を診断します。これらの予測子は、サンプル数および最も一般的な値の頻度の比2番目の最も一般的な値の頻度には大きいです... "

library(caret)
names(GermanCredit)[nearZeroVar(GermanCredit)]

高いNAのフィーチャを削除する

機能に大部分のデータが欠落している場合は、削除の候補になります。

library(VIM)
data(sleep)
colMeans(is.na(sleep))

   BodyWgt   BrainWgt       NonD      Dream      Sleep       Span       Gest 
0.00000000 0.00000000 0.22580645 0.19354839 0.06451613 0.06451613 0.06451613 
      Pred        Exp     Danger 
0.00000000 0.00000000 0.00000000 

この場合、それぞれが約20%の欠損値を持つNonDとDreamを削除することができます(カットオフは異なる場合があります)

密接に関連する機能の削除

密接に関連づけられたフィーチャは、モデルに分散を追加し、相関ペアの1つを削除すると、そのフィーチャを減らすのに役立ちます。相関を検出する方法はたくさんあります。ここに1つあります:

library(purrr) # in order to use keep()

# select correlatable vars
toCorrelate<-mtcars %>% keep(is.numeric)

# calculate correlation matrix
correlationMatrix <- cor(toCorrelate)

# pick only one out of each highly correlated pair's mirror image
correlationMatrix[upper.tri(correlationMatrix)]<-0  

# and I don't remove the highly-correlated-with-itself group
diag(correlationMatrix)<-0 

# find features that are highly correlated with another feature at the +- 0.85 level
apply(correlationMatrix,2, function(x) any(abs(x)>=0.85))

  mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb 
 TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

私は、MPGがどんなに強く相関しているのかを見て、何を保持し、何を投げるべきかを決めたいと思うでしょう。 cylとdispと同じです。あるいは、強く相関する機能を組み合わせる必要があるかもしれません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow