Trong ví dụ này, chúng ta sẽ sử dụng Decision Tree (cây quyết định) để phân loại loài hoa từ bộ dữ liệu nổi tiếng iris. Dưới đây là phần giải thích chi tiết các bước
📦 Cài đặt và tải thư viện cần thiết
# install.packages("rpart")
# install.packages("rpart.plot")
library(rpart) # Xây dựng cây quyết định
library(rpart.plot) # Trực quan hóa cây quyết định
🌸 Tải dữ liệu mẫu Iris
data(iris)
📌 Dữ liệu gồm 150 mẫu của 3 loài hoa: setosa, versicolor, và virginica với 4 đặc trưng (chiều dài/rộng của cánh và lá).
🔄 Chia dữ liệu thành tập huấn luyện và kiểm tra
set.seed(42)
sample_index <- sample(1:nrow(iris), 0.7 * nrow(iris))
train_data <- iris[sample_index, ]
test_data <- iris[-sample_index, ]
📊 Dùng 70% dữ liệu để huấn luyện, 30% để kiểm tra. set.seed()
giúp kết quả không thay đổi mỗi lần chạy.
🌳 Huấn luyện mô hình cây quyết định
model <- rpart(Species ~ ., data = train_data, method = "class")
🔍 Dự đoán biến phụ thuộc Species
dựa vào tất cả các đặc trưng còn lại (.
). method = "class"
là để phân loại.
🎯 Dự đoán và đánh giá độ chính xác
pred <- predict(model, test_data, type = "class")
accuracy <- sum(pred == test_data$Species) / nrow(test_data)
print(paste("Độ chính xác trên tập test:", round(accuracy, 2)))
📈 So sánh dự đoán với giá trị thực để tính accuracy (tỷ lệ dự đoán đúng).
🖼️ Vẽ sơ đồ cây quyết định
rpart.plot(model)
🌿 Vẽ cây giúp trực quan hóa logic ra quyết định: tại mỗi nút, mô hình kiểm tra giá trị của một đặc trưng để phân nhánh.
kết quả

Giải thích kết quả:
🌸 Ý nghĩa của từng nút trong cây
- Nút gốc (root):
Petal.Length < 2.4
→ Đây là bước phân chia đầu tiên. Nếu chiều dài cánh hoa < 2.4cm thì hoa là Setosa, và độ chính xác là 100%. - Nhánh ‘No’ (Petal.Length ≥ 2.4):
Tiếp tục phân chia bằngPetal.Width < 1.7
:- Nếu Petal.Width < 1.7 → phân loại là Versicolor
→ Xác suất: Versicolor 92%, Virginica 8%, Setosa 0% - Nếu Petal.Width ≥ 1.7 → phân loại là Virginica
→ Xác suất: Virginica 97%, Versicolor 3%, Setosa 0%
- Nếu Petal.Width < 1.7 → phân loại là Versicolor
📐 Ý nghĩa tỷ lệ phần trăm và xác suất
- Mỗi nút lá hiển thị xác suất mô hình dự đoán một loài cụ thể trong số các mẫu dữ liệu rơi vào nút đó.
- Ví dụ:
- Nhánh có
Petal.Length < 2.4
→ toàn bộ 36% mẫu → là Setosa 100% - Nhánh
Petal.Width < 1.7
→ chứa 35% mẫu → mô hình dự đoán chủ yếu là Versicolor - Nhánh
Petal.Width ≥ 1.7
→ chứa 29% mẫu → dự đoán chủ yếu là Virginica
- Nhánh có
🔍 Tóm tắt cách cây quyết định hoạt động
Điều kiện kiểm tra | Nếu đúng (“Yes”) | Nếu sai (“No”) |
---|---|---|
Petal.Length < 2.4 | 🌼 Setosa (100%) | Kiểm tra tiếp Petal.Width |
Petal.Width < 1.7 | 🌼 Versicolor (92%) | 🌼 Virginica (97%) |