2016-09-23 5 views
2

なぜe1071はNaive Bayesクラシファイア予測のためのNAsを私に与えますか?

library(e1071) 

train.x <- data.frame(
    B=c(0,1,0), 
    C=c(0,0,0), 
    D=c(0,0,1), 
    Z=c(1,0,0) 
) 

classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE)), laplace=1) # use laplace (i.e. alpha) of nearly 0 
predict(classifier, train.x, type="raw") 

    FALSE TRUE 
[1,] NA NA 
[2,] NA NA 
[3,] NA NA 

に失敗し、少なくとも2 TRUE 2 FALSEケースがある場合にのみ機能しているかのように

train.x <- data.frame(
    B=c(0,1,0,1), 
    C=c(0,0,0,1), 
    D=c(0,0,1,1), 
    Z=c(1,0,0,1) 
) 

classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE, FALSE)), laplace=1) # use laplace (i.e. alpha) of nearly 0 
predict(classifier, train.x, type="raw") 

       FALSE   TRUE 
[1,] 0.000000002761 0.999999997239 
[2,] 0.000000002761 0.999999997239 
[3,] 0.997729292055 0.002270707945 
[4,] 0.999999994295 0.000000005705 

はそうWORKS。

+0

私の推測です:最初のケースでは、#独立変数>#訓練の例と関係があるかもしれません。 –

答えて

0

数値変数の場合、naiveBayesは、各変数の平均および標準偏差を使用して、各クラスの各変数の確率を計算します。 3つのトレーニング例しかないので、少なくとも1つのクラスの標準偏差は未定義でなければなりません(2つのトレーニング例を提供したクラスは問題ありません)。あなたは、平均値と標準偏差を示している、あなたの分類器のtables属性を調べることであることを確認することができます。

> classifier$tables 
$B 
          B 
factor(c(TRUE, TRUE, FALSE)) [,1]  [,2] 
         FALSE 0.0  NA 
         TRUE 0.5 0.7071068 

$C 
          C 
factor(c(TRUE, TRUE, FALSE)) [,1] [,2] 
         FALSE 0 NA 
         TRUE  0 0 

$D 
          D 
factor(c(TRUE, TRUE, FALSE)) [,1] [,2] 
         FALSE 1 NA 
         TRUE  0 0 

$Z 
          Z 
factor(c(TRUE, TRUE, FALSE)) [,1]  [,2] 
         FALSE 0.0  NA 
         TRUE 0.5 0.7071068 

naiveBayes数値カテゴリ変数を区別し、カテゴリ変数の確率が標準なしで動作します偏差。あなたは論理にデータを変換するのであれば、それは動作しますので、

train.x <- sapply(train.x, as.logical) 
classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE)), laplace=1) 
predict(classifier, train.x, type="raw") 
     FALSE  TRUE 
[1,] 0.4705882 0.52941176 
[2,] 0.4705882 0.52941176 
[3,] 0.9142857 0.08571429 

、はい、クラスごとに少なくとも2つの例が必要です。カテゴリ変数を使用しない限り。

関連する問題