빅 데이터 분석-Naive Bayes 분류기

Naive Bayes는 분류기를 구성하기위한 확률 적 기법입니다. naive Bayes 분류기의 특성 가정은 특정 특성의 값이 클래스 변수가 주어지면 다른 특성의 값과 무관하다고 간주하는 것입니다.

앞서 언급 한 지나치게 단순화 된 가정에도 불구하고 naive Bayes 분류기는 복잡한 실제 상황에서 좋은 결과를 제공합니다. naive Bayes의 장점은 분류에 필요한 매개 변수를 추정하기 위해 소량의 학습 데이터 만 필요하고 분류기를 점진적으로 학습 할 수 있다는 것입니다.

Naive Bayes는 조건부 확률 모델입니다. 분류 할 문제 인스턴스가 주어지면 벡터로 표시됩니다. x= (x 1 ,…, x n ) 일부 n 특성 (독립 변수)을 나타내는 경우 K 개의 가능한 결과 또는 클래스 각각에 대해이 인스턴스 확률에 할당합니다.

$$ p (C_k | x_1, ....., x_n) $$

위 공식의 문제점은 특성의 수 n이 크거나 특성이 많은 수의 값을 가질 수있는 경우 이러한 모델을 확률 테이블에 기반으로하는 것이 불가능하다는 것입니다. 따라서 모델을 더 간단하게 재구성합니다. Bayes 정리를 사용하여 조건부 확률은 다음과 같이 분해 될 수 있습니다.

$$ 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 에만 의존하는 스케일링 인자 이며, 특성 변수의 값이 알려진 경우 상수입니다. 한 가지 일반적인 규칙은 가장 가능성이 높은 가설을 선택하는 것입니다. 이것은 최대 사후 또는 MAP 결정 규칙으로 알려져 있습니다. 대응하는 분류 기인 Bayes 분류기는 다음과 같이 일부 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 %를 올바르게 분류 함을 의미합니다.