トレーニング データは 2 つのファイルから読み込まれます。1 つは独立変数のみ (df.train) で、もう 1 つは実際の対応するクラス値のみ (df.churn) です。これらの値は -1 と 1 のみです。次に、すべて NA の列を削除し、見つかった重複列を削除します。
2 つのデータ セットを独立したクラス値を持つ 1 つのデータ フレームにアセンブルし、エラーなしで naiveBayes() を実行します。
naiveBayes によって生成されたモデルを使用して、predict() を実行すると、type = "raw" の出力が妥当なデータのように見えることに注意してください。ほとんどの場合、これらの確率は比較的 0 または 1 に近くなります。最初の 6 つの要素を以下に示します。
ROC プロットと AUC 値を取得する目的で、prediction() への入力の実際の予測クラス値を探しています。type = "class" を指定して predict() を再度実行しましたが、ここでは基本的に何も得られません。
df.train <- read.csv('~/projects/kdd_analysis/data/train_table.csv', header=TRUE, sep=',')
df.churn <- read.csv('~/projects/kdd_analysis/data/sm_churn_labels.csv', header=TRUE, sep=',')
df.train <- df.train[,colSums(is.na(df.train))<nrow(df.train)]
df.train <- df.train[!duplicated(lapply(df.train,c))]
df.train_C <- cbind(df.train, df.churn)
mod_C <- naiveBayes(V1~., df.train_C, laplace=0.01)
pre_C <- predict(mod_C, df.train ,type="raw", threshold=0.001)
興味深いと思ったので、意図的にトレーニング データに対して predict() を実行しています。以下では、predict() からの値は、私には「合理的」に見えます...つまり、少なくとも完全なナンセンスのようには見えません。それらを実際の値とまだ比較していませんが、そのために predict() によって指定された明示的なクラス値を使用することを期待しています。
head(pre_C)
-1 1
[1,] 9.996934e-01 3.066321e-04
[2,] 9.005501e-07 9.999991e-01
[3,] 1.000000e+00 3.468739e-11
[4,] 9.362914e-01 6.370858e-02
[5,] 9.854649e-01 1.453510e-02
[6,] 9.997680e-01 2.320003e-04
したがって、これは同一のモデルに対して再度実行される predict() です。何も返さない可能性がある理由がわかりません。
> pre_C <- predict(mod_C, df.train ,type="class", threshold=0.001)
> pre_C
factor(0)
Levels: