Skip to content

Buổi 6: Cơ bản về Máy học với R

Buổi 6: Cơ bản về Máy học với R

Mục tiêu

Học viên sẽ được giới thiệu về các khái niệm cơ bản của máy học (machine learning) và thực hành triển khai các thuật toán đơn giản trong R. Sau buổi học, học viên sẽ có khả năng:

  • Hiểu sự khác biệt giữa học có giám sát (supervised learning) và học không giám sát (unsupervised learning).
  • Chia dữ liệu thành tập huấn luyện (training) và tập kiểm tra (testing).
  • Xây dựng mô hình phân loại (classification) và cây quyết định (decision tree).
  • Đánh giá hiệu suất mô hình bằng các chỉ số như ma trận nhầm lẫn (confusion matrix), độ chính xác (accuracy), độ nhạy (recall), v.v.

Nội dung chi tiết

1. Giới thiệu về Máy học

Máy học là gì?

Máy học (machine learning) là một nhánh của trí tuệ nhân tạo (AI), tập trung vào việc xây dựng các thuật toán cho phép máy tính học hỏi từ dữ liệu và cải thiện hiệu suất mà không cần lập trình chi tiết. Trong khoa học dữ liệu, máy học được sử dụng để dự đoán hoặc phân loại dựa trên dữ liệu.

Phân loại máy học:

  • Học có giám sát (Supervised Learning): Dữ liệu có nhãn (labels), ví dụ: dự đoán giá nhà (hồi quy) hoặc phân loại email là spam hay không (phân loại).
  • Học không giám sát (Unsupervised Learning): Dữ liệu không có nhãn, ví dụ: phân cụm khách hàng dựa trên hành vi mua sắm.

Các thuật toán phổ biến:

  • Hồi quy (Regression): Dự đoán giá trị liên tục (ví dụ: giá nhà).
  • Phân loại (Classification): Dự đoán nhãn (ví dụ: phân loại hoa iris).
  • Phân cụm (Clustering): Nhóm dữ liệu tương tự (ví dụ: phân cụm khách hàng).

2. Chia dữ liệu (Data Splitting)

Tại sao cần chia dữ liệu?

Để đánh giá hiệu suất của mô hình, chúng ta cần chia dữ liệu thành hai phần:

  • Tập huấn luyện (Training Set): Dùng để huấn luyện mô hình (thường chiếm 70-80% dữ liệu).
  • Tập kiểm tra (Testing Set): Dùng để kiểm tra hiệu suất mô hình (thường chiếm 20-30% dữ liệu).

Cross-validation (Kiểm định chéo):

Cross-validation (ví dụ: k-fold cross-validation) giúp đảm bảo mô hình không bị overfitting (học quá mức trên tập huấn luyện) và có khả năng tổng quát hóa tốt trên dữ liệu mới.

Ví dụ: Chia dữ liệu với base R

Chúng ta sẽ sử dụng tập dữ liệu iris để thực hành. Tập dữ liệu này chứa thông tin về chiều dài, chiều rộng của đài hoa và cánh hoa, cùng với loài hoa (Species).

 # Tải dữ liệu iris data(iris)
Thiết lập seed để kết quả có thể tái lập
set.seed(123)

Tạo chỉ số ngẫu nhiên để chia dữ liệu (80% huấn luyện, 20% kiểm tra)
train_index <- sample(1:nrow(iris), 0.8 * nrow(iris))
train_data <- iris[train_index, ]
test_data <- iris[-train_index, ]

Kiểm tra kích thước
dim(train_data)
dim(test_data)

Kết quả:

  • Tập huấn luyện: 120 hàng.
  • Tập kiểm tra: 30 hàng.

Sử dụng gói caret để chia dữ liệu:

Gói caret cung cấp hàm createDataPartition để chia dữ liệu một cách dễ dàng và cân bằng theo nhãn.

 # Cài đặt và tải gói caret install.packages("caret") library(caret)
Chia dữ liệu với caret
set.seed(123)
train_index <- createDataPartition(iris$Species, p = 0.8, list = FALSE)
train_data <- iris[train_index, ]
test_data <- iris[-train_index, ]

Kiểm tra kích thước
dim(train_data)
dim(test_data)

3. Phân loại với R (Classification)

Phân loại là gì?

Phân loại là một bài toán học có giám sát, trong đó mục tiêu là dự đoán nhãn (label) của một quan sát. Ví dụ: Dự đoán loài hoa (setosa, versicolor, virginica) dựa trên các đặc trưng của hoa.

Triển khai hồi quy logistic (Logistic Regression):

Hồi quy logistic được sử dụng cho bài toán phân loại nhị phân (binary classification). Tuy nhiên, nó cũng có thể được mở rộng cho bài toán đa lớp (multiclass) như trong tập dữ liệu iris.

Ví dụ: Dự đoán loài hoa trong tập dữ liệu iris

 # Xây dựng mô hình hồi quy logistic # Sử dụng hàm glm() với family = "binomial" cho phân loại nhị phân # Tuy nhiên, với iris (multiclass), R sẽ tự động mở rộng thành multinomial logistic regression model_logistic <- glm(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = train_data, family = "binomial")
Dự đoán trên tập kiểm tra
Lưu ý: Với multiclass, chúng ta cần sử dụng predict() và chuyển đổi kết quả
probabilities <- predict(model_logistic, test_data, type = "response")
predictions <- ifelse(probabilities > 0.5, "versicolor", "setosa")  # Ví dụ đơn giản hóa cho nhị phân

Với multiclass, cần sử dụng gói như caret để xử lý tốt hơn

Lưu ý:iris là bài toán phân loại đa lớp, chúng ta sẽ chuyển sang sử dụng caret để xây dựng mô hình phân loại chính xác hơn.

 # Sử dụng caret để xây dựng mô hình hồi quy logistic set.seed(123) model_logistic_caret <- train(Species ~ ., data = train_data, method = "multinom", trControl = trainControl(method = "cv", number = 5))
Dự đoán trên tập kiểm tra
predictions <- predict(model_logistic_caret, test_data)

Xem kết quả dự đoán
head(predictions)

4. Cây Quyết định (Decision Trees)

Cây quyết định là gì?

Cây quyết định là một thuật toán học có giám sát, sử dụng cấu trúc cây để đưa ra quyết định. Nó chia dữ liệu thành các nhánh dựa trên các điều kiện (ví dụ: nếu Petal.Length > 2.5 thì thuộc loài setosa).

Triển khai cây quyết định với gói rpart:

 # Cài đặt và tải gói rpart install.packages("rpart") library(rpart)
Xây dựng mô hình cây quyết định
model_tree <- rpart(Species ~ ., data = train_data, method = "class")

Dự đoán trên tập kiểm tra
predictions_tree <- predict(model_tree, test_data, type = "class")

Xem kết quả dự đoán
head(predictions_tree)

Trực quan hóa cây quyết định với rpart.plot:

 # Cài đặt và tải gói rpart.plot install.packages("rpart.plot") library(rpart.plot)
Vẽ cây quyết định
rpart.plot(model_tree, main = "Cây Quyết định cho Phân loại Hoa Iris")

Kết quả sẽ hiển thị một cây quyết định trực quan, cho thấy các điều kiện phân chia (ví dụ: Petal.Length < 2.5 → setosa).

5. Đánh giá Mô hình (Model Evaluation)

Các chỉ số đánh giá:

  • Ma trận nhầm lẫn (Confusion Matrix): Hiển thị số lượng dự đoán đúng và sai cho từng lớp.
  • Độ chính xác (Accuracy): Tỷ lệ dự đoán đúng trên tổng số dự đoán.
  • Độ nhạy (Recall): Tỷ lệ dự đoán đúng cho một lớp cụ thể.
  • Độ chính xác lớp (Precision): Tỷ lệ dự đoán đúng trong số các dự đoán được gán cho một lớp.
  • F1-Score: Trung bình điều hòa của precision và recall.

Đánh giá mô hình cây quyết định:

 # Tạo ma trận nhầm lẫn conf_matrix <- table(Predicted = predictions_tree, Actual = test_data$Species) print(conf_matrix)
Tính độ chính xác với caret
confusionMatrix(predictions_tree, test_data$Species)

Kết quả mẫu:

 Actual Predicted setosa versicolor virginica setosa 10 0 0 versicolor 0 9 1 virginica 0 1 9
Accuracy : 0.9333

Giải thích:

  • Độ chính xác (Accuracy) = 0.9333 → Mô hình dự đoán đúng 93.33% các trường hợp.
  • Ma trận nhầm lẫn cho thấy mô hình nhầm lẫn 1 mẫu versicolor thành virginica và 1 mẫu virginica thành versicolor.

6. Bài tập Thực hành

Yêu cầu:

  • Xây dựng một mô hình phân loại trên tập dữ liệu iris bằng cả hồi quy logistic và cây quyết định.
  • Đánh giá hiệu suất của cả hai mô hình và so sánh kết quả.

Hướng dẫn chi tiết:

1. Chia dữ liệu và xây dựng mô hình: (Đã thực hiện ở trên).

2. So sánh hiệu suất:

 # Đánh giá mô hình hồi quy logistic conf_matrix_logistic <- confusionMatrix(predictions, test_data$Species) print(conf_matrix_logistic)
Đánh giá mô hình cây quyết định
conf_matrix_tree <- confusionMatrix(predictions_tree, test_data$Species)
print(conf_matrix_tree)

So sánh độ chính xác
cat("Độ chính xác của hồi quy logistic:", conf_matrix_logistic$overall["Accuracy"], "\n")
cat("Độ chính xác của cây quyết định:", conf_matrix_tree$overall["Accuracy"], "\n")

Kết quả mong đợi:

  • Học viên sẽ thấy rằng cả hai mô hình đều có độ chính xác cao trên tập dữ liệu iris (thường >90%), nhưng cây quyết định có thể dễ giải thích hơn nhờ cấu trúc trực quan.

Công cụ/Gói sử dụng

  • caret: Để xây dựng và đánh giá mô hình.
  • rpart: Để xây dựng cây quyết định.
  • rpart.plot: Để trực quan hóa cây quyết định.
  • dplyr: Để xử lý dữ liệu (nếu cần).

Tóm tắt buổi học

Buổi 6 giới thiệu các khái niệm cơ bản về máy học, từ việc chia dữ liệu, xây dựng mô hình phân loại (hồi quy logistic, cây quyết định), đến đánh giá hiệu suất mô hình. Học viên được thực hành trên tập dữ liệu iris, một tập dữ liệu kinh điển để học máy học. Đây là bước đầu tiên để làm quen với các thuật toán máy học trước khi chuyển sang các kỹ thuật nâng cao ở các buổi sau.

Leave a Reply

Your email address will not be published. Required fields are marked *