Trong ví dụ này, chúng ta sẽ sử dụng thuật toán K-Nearest Neighbors (KNN) để phân loại hoa từ tập dữ liệu Iris. Dưới đây là phần giải thích chi tiết từng bước:
📦 1. Tải thư viện và dữ liệu
library(class)
data(iris)
library(class)
: Gọi thư viện chứa hàmknn()
.data(iris)
: Tải dữ liệu Iris có sẵn trong R. Gồm 150 mẫu hoa với 4 đặc trưng: chiều dài và chiều rộng của đài hoa và cánh hoa, cùng nhãn loại hoa (Setosa, Versicolor, Virginica).
✂️ 2. 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.8 * nrow(iris))
train_data <- iris[sample_index, ]
test_data <- iris[-sample_index, ]
- Dữ liệu được chia ngẫu nhiên thành 80% huấn luyện và 20% kiểm tra.
set.seed(42)
: Đảm bảo kết quả chia luôn giống nhau mỗi lần chạy.
📊 3. Tách đặc trưng và nhãn
train_features <- train_data[, 1:4]
train_labels <- train_data[, 5]
test_features <- test_data[, 1:4]
test_labels <- test_data[, 5]
- Chọn 4 đặc trưng đầu làm dữ liệu đầu vào (
features
) và cột thứ 5 làm nhãn (labels
).
🤖 4. Chạy KNN với k = 3
k <- 3
knn_pred <- knn(train = train_features, test = test_features, cl = train_labels, k = k)
- Dự đoán loại hoa cho từng mẫu trong tập kiểm tra bằng cách tìm 3 mẫu huấn luyện gần nhất (theo khoảng cách Euclidean).
📈 5. Đánh giá độ chính xác
accuracy <- sum(knn_pred == test_labels) / length(test_labels)
cat(sprintf("Độ chính xác của KNN trên dữ liệu test: %.2f%%\n", accuracy * 100))
- Tính tỷ lệ phần trăm mẫu được dự đoán đúng.
cat()
hiển thị kết quả chính xác.
🧪 6. Dự đoán một mẫu hoa mới
new_sample <- data.frame(Sepal.Length=5.1, Sepal.Width=3.5, Petal.Length=1.4, Petal.Width=0.2)
new_pred <- knn(train = train_features, test = new_sample, cl = train_labels, k = k)
cat("Dự đoán mẫu mới thuộc loại hoa:", as.character(new_pred), "\n")
- Tạo một mẫu mới với các đặc trưng cụ thể.
- Dự đoán nó thuộc loại hoa nào (ví dụ:
"setosa"
).
Kết quả
Độ chính xác của KNN trên dữ liệu test: 96.67%
Dự đoán mẫu mới thuộc loại hoa: setosa