बिग डेटा एनालिटिक्स - Naive Bayes Classifier

क्लासीफायर के निर्माण के लिए Naive Bayes एक संभाव्य तकनीक है। अनुभवहीन बेयस क्लासिफायर की विशेषता धारणा यह है कि किसी विशेष विशेषता का मूल्य वर्ग चर को देखते हुए किसी अन्य सुविधा के मूल्य से स्वतंत्र है।

पहले बताई गई ओवरसिम्प्लीफाइड मान्यताओं के बावजूद, भोले बेयस क्लासिफायर के पास जटिल वास्तविक दुनिया की स्थितियों में अच्छे परिणाम हैं। भोले की खाड़ी का एक लाभ यह है कि वर्गीकरण के लिए आवश्यक मापदंडों का अनुमान लगाने के लिए केवल थोड़ी मात्रा में प्रशिक्षण डेटा की आवश्यकता होती है और क्लासिफायर को आकस्मिक रूप से प्रशिक्षित किया जा सकता है।

Naive Bayes एक सशर्त प्रायिकता मॉडल है: वर्गीकृत होने के लिए एक समस्या का उदाहरण दिया जाता है, जिसका प्रतिनिधित्व वेक्टर द्वारा किया जाता है x= (x 1 ,…, x n ) कुछ 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 | Ckk) | $$

जहाँ सबूत Z = p (x) एक स्केलिंग कारक है जो केवल x 1 ,…, x n पर निर्भर करता है, यह एक स्थिरांक है यदि फीचर वैरिएबल के मान ज्ञात हैं। एक सामान्य नियम यह है कि परिकल्पना को चुनना सबसे संभावित है; इसे अधिकतम पोस्टीरियर या एमएपी निर्णय नियम के रूप में जाना जाता है। इसी क्लासिफायरियर, बाय्स क्लासिफायर, वह फ़ंक्शन है जो क्लास लेबल $ \ हैट {y} = C_k $ को कुछ k के लिए निम्नानुसार असाइन करता है -

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

आर में एल्गोरिथ्म को लागू करना एक सीधी प्रक्रिया है। निम्न उदाहरण दर्शाता है कि एक 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% उदाहरणों को सही ढंग से वर्गीकृत करता है।