ในบทความนี้ เราจะมาทำความรู้กับ Naïve Bayes และดูวิธีสร้าง Naïve Bayes classifier ในภาษา R ด้วย naivebayes package กัน
- 👼 Naïve Bayes คืออะไร?
- 🧑💻 วิธีสร้าง NB Classifer ด้วย naivebayes Package
- 😺 GitHub
- 📃 References
- ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา
👼 Naïve Bayes คืออะไร?
Naïve Bayes (NB) เป็น machine learning algorithm ประเภท supervised learning สำหรับทำนายกลุ่มของข้อมูล (classification)
NB ทำนายข้อมูล โดยวิเคราะห์ความน่าจะเป็นที่ 2 เหตุการณ์ (ตัวแปรต้นและตัวแปรตาม) จะเกิดขึ้นคู่กัน
ยกตัวอย่างเช่น การอนุมัติสินเชื่อ (อนุมัติ/ไม่อนุมัติ) ที่เกิดขึ้นอยู่กับ:
- รายได้: รายได้มาก -> อนุมัติ
- อายุ: อายุน้อย -> อนุมัติ
- ประวัติการขอสินเชื่อ: เคยขอแล้วผ่าน -> อนุมัติ
NB คำนวณความน่าจะเป็นของแต่ละปัจจัยต่อตัวแปรตาม (การอนุมัติ) โดยอนุมานว่า แต่ละปัจจัยเกิดแยกกัน (independent) แม้ว่าในความเป็นจริงหลายปัจจัยจะเกิดขึ้นร่วมกัน (dependent; เช่น อายุมาก -> รายได้มาก) ก็ตาม
เนื่องจาก NB มีการมองโลกอย่างง่าย จึงได้ชื่อว่า “naïve” หรือไร้เดียงนั่นเอง
แม้ว่า NB จะมีการมองโลกที่ไร้เดียงสา แต่ก็เป็น algorithm ที่:
- เข้าใจได้ง่าย (เพราะไร้เดียงสา)
- รวดเร็ว (เพราะใช้การวิเคราะห์อย่างง่าย)
- น่าเชื่อถือ (มักจะทำนายได้แม่นยำ แม้จะมีมุมมองที่ไม่ตรงกับความเป็นจริง)
🧑💻 วิธีสร้าง NB Classifer ด้วย naivebayes Package
วิธีการสร้าง NB classifier ด้วย naivebayes package มี 5 ขั้นตอน ได้แก่:
- Install and load the package
- Load and preview the dataset
- Split the dataset
- Create a NB model
- Evaluate the model
.
1️⃣ Step 1. Install & Load the Package
ในขั้นแรก เราต้องติดตั้งและเรียกใช้งาน naivebayes package:
# Install and load the package
## Install
install.packages("naivebayes")
## Load
library(naivebayes)
Note: เราทำการติดตั้งแค่ครั้งแรกครั้งเดียว แต่การเรียกใช้ต้องทำทุกครั้งทุกเริ่ม session ใหม่
.
2️⃣ Step 2. Load & Preview the Dataset
ในขั้นที่สอง ให้เราโหลด dataset ที่จะใช้งาน
โดยในบทความนี้ เราจะใช้ built-in dataset ในภาษา R ชื่อ iris dataset
iris dataset มีกลีบดอกของข้อมูลดอกไม้ 3 ชนิด ได้แก่:
- Iris setosa
- Iris virginica
- Iris versicolor
เป้าหมายของเรา คือ ทำนายประเภทของดอกไม้จากความกว้างและความยาวกลีบดอก
เนื่องจากเป็น built-in dataset เราสามารถโหลด iris dataset ด้วยคำสั่ง data():
# Load
data(iris)
จากนั้น เราสามารถใช้คำสั่ง head() เพื่อ preview ข้อมูล:
# Preview
head(iris)
ผลลัพธ์:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Note: จะเห็นว่า iris dataset มีข้อมูลทั้งหมด 5 columns คือ ความยาวและความกว้างของกลีบดอกชั้นนอก (sepal) และความยาวและความกว้างของกลีบดอกชั้นใน (petal) รวมทั้งประเภทดอกไม้ (species)
เนื่องจาก NB classifier ต้องการตัวแปรตามที่เป็น factor เราต้องเช็กได้ว่า Species เป็น data type ไหนด้วยคำสั่ง str():
# Preview
str(iris)
ผลลัพธ์:
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
จะเห็นได้ว่า Species เป็น factor อยู่แล้ว และพร้อมที่ใช้สร้าง NB classifier
.
3️⃣ Step 3. Split the Dataset
ในขั้นที่สาม เราจะแบ่งข้อมูลเป็น 2 ชุด:
- Training set เพื่อสร้าง NB classifier
- Test set เพื่อทดสอบประสิทธิภาพของ NB classifier
ขั้นแรกในการแบ่งข้อมูล ให้เราสุ่มเลือก row index ที่จะอยู่ใน training set:
# Set seed for reproducibility
set.seed(2025)
# Create a training index
training_index <- sample(1:nrow(iris),
0.7 * nrow(iris))
จากนั้น ใช้ row index ที่ได้แบ่งข้อมูลเป็น 2 ชุด:
# Split the dataset
train_set <- iris[training_index, ]
test_set <- iris[-training_index, ]
.
4️⃣ Step 4. Create a NB Model
ในขั้นที่สี่ เราจะสร้าง NB classifier โดยใช้ naive_bayes() จาก naivebayes package
naive_bayes() ต้องการ input 2 อย่าง:
- Formula: ตัวแปรต้นและตัวแปรตามที่ต้องการใช้สร้าง model โดยในกรณีนี้ คือ ทำนาย
Speciesด้วยข้อมูลที่เหลือทั้งหมด (.) - Data: dataset ที่จะใช้สร้าง model ซึ่งในกรณีนี้ คือ
train_set
# Create a NB model
nb <- naive_bayes(Species ~ .,
data = train_set)
เมื่อเราได้ NB classifier มาแล้ว เรามาลองใช้ model ทำนายประเภทดอกไม้กัน:
# Predict the outcomes
pred <- predict(nb,
newdata = test_set[, 1:4],
type = "class")
print(pred)
ผลลัพธ์:
[1] setosa setosa setosa setosa setosa
[6] setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa
[16] virginica versicolor versicolor versicolor versicolor
[21] virginica versicolor versicolor versicolor versicolor
[26] versicolor virginica versicolor versicolor versicolor
[31] versicolor versicolor versicolor versicolor virginica
[36] virginica virginica virginica virginica virginica
[41] virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
.
5️⃣ Step 5. Evaluate the Model
ในขั้นสุดท้าย เราจะประเมินประสิทธิภาพของ model ด้วยการคำนวณ accuracy หรือ สัดส่วนของคำตอบที่ model ตอบถูก:
Accuracy = Correct predictions / Total predictions
เราสามารถหาค่า accuracy ได้โดยเริ่มสร้าง confusion matrix ก่อน:
# Create a confusion matrix
cm <- table(Predicted = pred,
Actual = test_set$Species)
print(cm)
ผลลัพธ์:
Actual
Predicted setosa versicolor virginica
setosa 15 0 0
versicolor 0 16 0
virginica 0 3 11
จากนั้น นำจำนวนคำตอบที่ถูกต้องและจำนวนคำตอบทั้งหมดมาหาค่า accuracy:
# Calculate the accuracy
accuracy <- sum(diag(cm)) / sum(cm)
cat("Accuracy:", round(accuracy, 2))
ผลลัพธ์:
Accuracy: 0.93
จะเห็นได้ว่า NB classifier ที่เป็น model ไร้เดียงสาของเรา มีความแม่นยำในการทำนายสูงถึง 93%
😺 GitHub
ดู code ทั้งหมดในบทความนี้ได้ที่ GitHub
📃 References
- Supervised Learning in R: Classification
- What are Naïve Bayes classifiers?
- naive_bayes: Naive Bayes Classifier
- naiveBayes: Naive Bayes Classifier
- Naive Bayes Classifier in R Programming
- Naive Bayes Classification in R
- Introduction to naivebayes package
- Package ‘naivebayes’
- Naive Bayes Classification Tutorial using Scikit-learn
- Naïve Bayes Classification
✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา
📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆
🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล
💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน
ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:
- Correlation
- t-tests
- ANOVA
- Reliability
- Factor analysis
🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ
แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂↕️
👉 สนใจดูรายละเอียดหนังสือได้ที่ meb:

Leave a comment