Big-data-analytics-naive-bayes-classifier

提供:Dev Guides
移動先:案内検索

ビッグデータ分析-Naive Bayes Classifier

単純ベイズは、分類器を構築するための確率的手法です。 単純ベイズ分類器の特徴的な仮定は、特定の特徴の値が、クラス変数が与えられた他の特徴の値から独立していると考えることです。

前述の単純化された仮定にもかかわらず、単純なベイズ分類器は、複雑な実世界の状況で良い結果をもたらします。 単純ベイズの利点は、分類に必要なパラメーターを推定するために少量のトレーニングデータのみが必要であり、分類器を段階的にトレーニングできることです。

Naive Bayesは条件付き確率モデルです:分類される問題インスタンスが与えられ、いくつかのn個の特徴(独立変数)を表すベクトル x =(x〜1〜、…、x〜n〜)で表され、これに割り当てられますKの可能な結果またはクラスごとのインスタンス確率。

p(C_k | x_1、.....、x_n)

上記の定式化の問題は、特徴の数nが大きい場合、または特徴が多数の値をとることができる場合、そのようなモデルを確率表に基づいて実行できないことです。 したがって、モデルを再定式化してより単純にします。 ベイズの定理を使用して、条件付き確率は次のように分解できます-

p(C_k | x)= \ frac \ {p(C_k)p(x | C_k)} \ {p(x)}

これは、上記の独立性の仮定の下では、クラス変数Cの条件付き分布が-

p(C_k | x_1、.....、x_n)\:= \:\ frac \ {1} \ {Z} p(C_k)\ prod _ \ {i = 1} ^ \ {n} p( x_i | C_k)

ここで、証拠Z = p( x )はx〜1〜、…、x〜n〜のみに依存するスケーリング係数であり、特徴変数の値がわかっている場合は定数です。 一般的なルールの1つは、最も可能性の高い仮説を選択することです。これは最大事後またはMAP決定ルールとして知られています。 対応する分類器、ベイズ分類器は、次のようにいくつかのkにクラスラベル$ \ hat \ {y} = C_k $を割り当てる関数です-

\ hat \ {y} = argmax \:p(C_k)\ prod _ \ {i = 1} ^ \ {n} p(x_i | C_k)

Rでアルゴリズムを実装するのは簡単なプロセスです。 次の例は、Naive Bayes分類器をトレーニングし、スパムフィルタリング問題の予測に使用する方法を示しています。

次のスクリプトは、 bda/part3/naive_bayes/naive_bayes.R ファイルで利用できます。

# Install these packages
pkgs = c("klaR", "caret", "ElemStatLearn")
install.packages(pkgs)
library('ElemStatLearn')
library("klaR")
library("caret")

# Split the data in training and testing
inx = sample(nrow(spam), round(nrow(spam) * 0.9))
train = spam[inx,]
test = spam[-inx,]

# Define a matrix with features, X_train
# And a vector with class labels, y_train
X_train = train[,-58]
y_train = train$spam
X_test = test[,-58]
y_test = test$spam
# Train the model
nb_model = train(X_train, y_train, method = 'nb',
   trControl = trainControl(method = 'cv', number = 3))

# Compute
preds = predict(nb_model$finalModel, X_test)$class
tbl = table(y_test, yhat = preds)
sum(diag(tbl))/sum(tbl)
# 0.7217391

結果からわかるように、Naive Bayesモデルの精度は72%です。 これは、モデルがインスタンスの72%を正しく分類することを意味します。