Trong ví dụ này, chúng ta sử dụng mô hình SVM với kernel RBF để phân loại hai lớp dữ liệu giả dạng vòng tròn không tuyến tính, thể hiện rõ khả năng xử lý các bài toán có biên quyết định phức tạp của kernel SVM.
🛠 Cài đặt & Thư viện
# install.packages("e1071")
library(e1071) # Dùng để huấn luyện mô hình SVM
library(ggplot2) # Dùng để vẽ đồ thị
🎲 Tạo dữ liệu giả lập
set.seed(42) # Đặt seed để kết quả tái tạo được
n <- 300 # Số điểm dữ liệu
theta <- runif(n, 0, 2*pi) # Góc ngẫu nhiên
r <- c(rep(0.3, n/2), rep(1, n/2)) + rnorm(n, 0, 0.1) # Bán kính với nhiễu
x <- r * cos(theta)
y <- r * sin(theta)
class <- factor(c(rep(1, n/2), rep(0, n/2))) # Hai lớp: 0 và 1
📌 Tạo dữ liệu theo dạng hình tròn đồng tâm (ring-shaped) – một lớp ở gần tâm, lớp kia ở xa hơn.
📦 Tạo dataframe và chia tập train/test
data <- data.frame(x = x, y = y, class = class)
train_index <- sample(1:n, size = 0.7*n) # 70% dữ liệu để huấn luyện
train_data <- data[train_index, ]
test_data <- data[-train_index, ]
🤖 Huấn luyện mô hình SVM với kernel RBF (Radial Basis Function)
model <- svm(class ~ ., data = train_data, kernel = "radial")
✅ Kernel RBF dùng để xử lý các bài toán phân loại phi tuyến.
🔍 Dự đoán và đánh giá độ chính xác
pred <- predict(model, test_data)
accuracy <- mean(pred == test_data$class)
print(paste("Accuracy:", round(accuracy, 2)))
🎯 So sánh kết quả dự đoán với nhãn thực tế → tính độ chính xác.
📊 Trực quan hóa phân loại của mô hình
ggplot(test_data, aes(x = x, y = y, color = pred)) +
geom_point(size = 2) +
ggtitle("SVM với kernel RBF - Phân loại") +
theme_minimal()
📌 Biểu đồ hiển thị phân loại dựa trên mô hình SVM với màu sắc biểu diễn nhãn được dự đoán.
