1 Tổng quan về gói caret và các khái niệm cơ bản

1.1 Giới thiệu về gói caret

Trong bối cảnh khoa học dữ liệu và học máy ngày càng phát triển, việc xây dựng và tối ưu hóa các mô hình dự báo trở thành một yêu cầu quan trọng đối với các nhà nghiên cứu và phân tích dữ liệu. Trong R, gói caret (Classification and Regression Training) được xem là một trong những công cụ hỗ trợ mạnh mẽ nhất giúp đơn giản hóa quá trình huấn luyện, đánh giá và tối ưu hóa các mô hình học máy.

Gói caret cung cấp một giao diện nhất quán giúa nhiều thuật toán học máy khác nhau, bao gồm hồi quy tuyến tính, hồi quy logistic, mô hình cây quyết định, random forest, SVM, và deep learning. Nhờ vào khả năng tự động hóa quá trình tiền xử lý dữ liệu, chia tập dữ liệu, tìm kiếm tham số tối ưu (hyperparameter tuning) và đánh giá hiệu suất, caret giúp giảm thiểu công sức khi xây dựng các mô hình học máy phức tạp.

Tuy nhiên, việc áp dụng gói caret vào thực tế yêu cầu người dùng hiểu rõ về các quy trình huấn luyện, kiểm định mô hình và các kỹ thuật tiền xử lý dữ liệu. Bài tiểu luậu này sẽ tìm hiểu chi tiết về cách thức gói caret hoạt động, các bước cơ bản để áp dụng nó và minh họa thông qua một số mô hình hồi quy trên bộ dữ liệu mtcars. Lý do chọn đề tài này xuất phát từ những yếu tố sau:

1.Tính ứng dụng cao: Gói caret được sử dụng rộng rãi trong nhiều lĩnh vực như tài chính, y tế, marketing và khoa học xã hội để xây dựng các mô hình dự báo và phân loại dữ liệu.

2.Đơn giản hóa quy trình phân tích: Caret giúp giảm thiểu thời gian và công sức trong việc xử lý dữ liệu, huấn luyện mô hình và đánh giá kết quả, từ đó giúp nhà nghiên cứu tập trung vào việc diễn giải ý nghĩa của mô hình.

3.Tích hợp nhiều thuật toán học máy: Thay vì phải sử dụng nhiều gói khác nhau, caret cho phép người dùng dễ dàng tiếp cận và so sánh hiệu suất của nhiều mô hình khác nhau trong một giao diện thống nhất.

4.Hỗ trợ tự động hóa: Các tính năng như lựa chọn tham số tối ưu, kiểm tra chéo (cross-validation), và tiền xử lý dữ liệu giúp cải thiện chất lượng mô hình một cách hiệu quả.

1.2 Nguồn gốc và phát triển

Gói caret (Classification and Regression Training) được phát triển bởi Max Kuhn và lần đầu tiên được giới thiệu vào năm 2007. Mục tiêu chính của caret là cung cấp một giao diện nhất quán giúp người dùng dễ dàng xây dựng, kiểm định và so sánh nhiều mô hình học máy khác nhau. Hiện nay, caret đã trở thành một trong những gói R quan trọng nhất trong lĩnh vực học máy và phân tích dữ liệu.

Gói caret liên tục được cập nhật và duy trì bởi cộng đồng khoa học dữ liệu, đồng thời nó cũng tích hợp với nhiều thư viện khác để mở rộng khả năng xử lý dữ liệu và huấn luyện mô hình.

1.3 Các mô hình hỗ trợ trong caret

1. Mô hình tuyến tính (Linear Models):

  • Hồi quy tuyến tính (Linear Regression):
    • Dùng để dự đoán giá trị của một biến liên tục dựa trên một hoặc nhiều biến đầu vào.
    • Phù hợp cho các bài toán hồi quy khi có mối quan hệ tuyến tính giữa các biến.
  • Hồi quy logistic (Logistic Regression):
    • Dùng để dự đoán xác suất của một sự kiện nhị phân (có/không, đúng/sai).
    • Phù hợp cho các bài toán phân loại nhị phân.
  • Generalized Linear Models (GLMs):
    • Mở rộng của hồi quy tuyến tính, cho phép mô hình hóa các mối quan hệ phi tuyến tính và các loại biến mục tiêu khác nhau.

2. Mô hình dựa trên cây (Tree-Based Models):

Cây quyết định (Decision Trees): * Xây dựng một cấu trúc cây phân cấp để đưa ra quyết định dựa trên các đặc trưng của dữ liệu. * Dễ hiểu và giải thích, nhưng có thể bị overfitting. Random Forest: * Tập hợp của nhiều cây quyết định, giúp giảm overfitting và cải thiện độ chính xác. * Hiệu quả cho cả bài toán phân loại và hồi quy. * Gradient Boosting Machines (GBM): * Xây dựng mô hình bằng cách kết hợp các cây quyết định một cách tuần tự, tập trung vào việc sửa lỗi của các cây trước đó. * Đạt hiệu suất cao trong nhiều bài toán, nhưng có thể tốn thời gian huấn luyện. * C5.0: * Là một thuật toán được sử dụng để phân loại, nó tạo ra một cây quyết định hoặc một tập hợp các quy tắc. C5.0 mạnh mẽ và hiệu quả trong việc xử lý dữ liệu lớn.

3. Mô hình dựa trên vector hỗ trợ (Support Vector Machines - SVM):

  • SVM:
    • Tìm siêu phẳng tối ưu để phân tách các lớp dữ liệu.
    • Hiệu quả cho các bài toán phân loại và hồi quy, đặc biệt là khi dữ liệu có số chiều cao.
  • Support Vector Machines with Radial Basis Function Kernel (SVM RBF):
    • Đây là một loại SVM có sử dụng Kernel RBF, nó giúp cho SVM xử lý tốt các dữ liệu phi tuyến.

4. Mô hình láng giềng gần nhất (K-Nearest Neighbors - KNN):

  • KNN:
    • Dự đoán nhãn của một điểm dữ liệu mới dựa trên nhãn của k điểm dữ liệu gần nhất.
    • Đơn giản và dễ thực hiện, nhưng có thể tốn thời gian tính toán cho dữ liệu lớn.

5. Mạng nơ-ron (Neural Networks):

  • Neural Networks:
    • Mô hình được lấy cảm hứng từ cấu trúc của não bộ con người, bao gồm các lớp nơ-ron kết nối với nhau.
    • Có khả năng học các mối quan hệ phức tạp trong dữ liệu, nhưng có thể khó huấn luyện và giải thích.
  • Deep Learning (học sâu):
    • Là một nhánh của mạng nơ ron với nhiều lớp ẩn, có thể học các biểu diễn phức tạp của dữ liệu.
    • Đạt được những kết quả vượt trội trong nhiều lĩnh vực, như xử lý ảnh và ngôn ngữ tự nhiên.

6. Các mô hình khác:

  • Ngoài ra, caret còn hỗ trợ nhiều thuật toán khác như Naive Bayes, Linear Discriminant Analysis (LDA), Quadratic Discriminant Analysis (QDA), và các mô hình ensemble khác.

Lựa chọn siêu tham số (Hyperparameter Tuning):

  • caret cung cấp các công cụ mạnh mẽ để tối ưu hóa siêu tham số của các mô hình, giúp cải thiện hiệu suất của chúng.
  • Các phương pháp như grid search, random search, và Bayesian optimization đều được hỗ trợ.

1.4 Các tính năng chính của caret

1. Tiền xử lý dữ liệu (Data Preprocessing):

  • Chuẩn hóa và co giãn (Scaling and Centering):
    • caret cung cấp các hàm để chuẩn hóa dữ liệu số, đưa chúng về cùng thang đo. Điều này rất quan trọng đối với các mô hình nhạy cảm với thang đo của biến, ví dụ như KNN hoặc SVM.
    • Các phương pháp như z-score standardization (trừ trung bình và chia cho độ lệch chuẩn) hoặc min-max scaling (đưa dữ liệu về khoảng [0, 1]) đều được hỗ trợ.
  • Chuyển đổi biến (Variable Transformation):
    • Xử lý các biến lệch (skewed variables) bằng cách áp dụng các phép biến đổi như log transformation hoặc Box-Cox transformation.
    • Chuyển đổi các biến phân loại (categorical variables) thành dạng số (ví dụ: one-hot encoding hoặc dummy variables).
  • Xử lý dữ liệu thiếu (Handling Missing Data):
    • caret cung cấp các phương pháp để xử lý dữ liệu thiếu, bao gồm thay thế bằng giá trị trung bình, trung vị, hoặc sử dụng các thuật toán phức tạp hơn như KNN imputation.
  • Chọn đặc trưng (Feature Selection):
    • Loại bỏ các đặc trưng không liên quan hoặc dư thừa để cải thiện hiệu suất mô hình và giảm thời gian huấn luyện.
    • Các phương pháp như lọc (filtering), bao bọc (wrapping), và nhúng (embedding) đều được hỗ trợ.
    • Ví dụ, bạn có thể sử dụng các phương pháp như Recursive Feature Elimination (RFE) để chọn ra tập đặc trưng tối ưu.

2. Chia tập dữ liệu (Data Splitting):

  • caret giúp bạn dễ dàng chia dữ liệu thành tập huấn luyện, tập kiểm tra, và tập xác thực (validation set).
  • Các phương pháp chia tập như simple random sampling, stratified sampling (đảm bảo phân phối lớp trong các tập là tương đương), và time series splitting (cho dữ liệu chuỗi thời gian) đều được hỗ trợ.

3. Tìm kiếm tham số tối ưu (Hyperparameter Tuning):

  • Grid Search và Random Search:
    • caret tự động hóa quá trình tìm kiếm tham số tối ưu bằng cách thử nhiều tổ hợp tham số khác nhau.
    • Grid Search thử tất cả các tổ hợp tham số trong một lưới đã định nghĩa, trong khi Random Search thử một số lượng ngẫu nhiên các tổ hợp tham số.
  • Kiểm tra chéo (Cross-Validation):
    • Sử dụng các phương pháp kiểm tra chéo như k-fold cross-validation hoặc repeated cross-validation để đánh giá hiệu suất mô hình một cách khách quan và giảm thiểu rủi ro overfitting.

4. Đánh giá mô hình (Model Evaluation):

  • Nhiều chỉ số đánh giá:
    • caret cung cấp nhiều chỉ số đánh giá hiệu suất mô hình, phù hợp với các bài toán phân loại và hồi quy.
    • Ví dụ, đối với bài toán phân loại, bạn có thể sử dụng accuracy, precision, recall, F1-score, AUC-ROC, v.v.
    • Đối với bài toán hồi quy, bạn có thể sử dụng RMSE, MAE, R-squared, v.v.
  • Ma trận nhầm lẫn (Confusion Matrix):
    • Hiển thị ma trận nhầm lẫn để phân tích chi tiết kết quả dự đoán của mô hình phân loại.
  • Đường cong ROC và Precision-Recall:
    • Vẽ các đường cong ROC và Precision-Recall để đánh giá khả năng phân loại của mô hình.

5. Hỗ trợ tích hợp với nhiều gói khác:

  • caret được thiết kế để hoạt động trơn tru với nhiều gói khác trong R, tạo ra một hệ sinh thái mạnh mẽ cho việc phân tích dữ liệu và học máy.
  • Ví dụ, bạn có thể sử dụng ggplot2 để trực quan hóa kết quả, dplyr để thao tác dữ liệu, randomForestxgboost để xây dựng các mô hình mạnh mẽ.

1.5 Giới thiệu chi tiết về bộ dữ liệu mtcars

Bộ dữ liệu mtcars (Motor Trend Car Road Tests) là một tập dữ liệu kinh điển trong R, lấy từ tạp chí Motor Trend US năm 1974. Bộ dữ liệu này chứa thông tin về 32 mẫu xe khác nhau, chủ yếu tập trung vào các thông số kỹ thuật liên quan đến hiệu suất động cơ, tiêu thụ nhiên liệu và thiết kế cơ khí của xe. Mô tả chi tiết các biến số trong bộ dữ liệu mtcars

  • mpg (Miles per Gallon - Mức tiêu thụ nhiên liệu)
    • Biến liên tục thể hiện lượng nhiên liệu tiêu thụ (dặm/gallon).
    • Xe có giá trị mpg càng cao thì càng tiết kiệm nhiên liệu.
  • cyl (Số xi-lanh của động cơ)
    • Giá trị phổ biến: 4, 6, 8 xi-lanh.
    • Xe có nhiều xi-lanh hơn thường mạnh hơn nhưng tiêu hao nhiên liệu nhiều hơn.
  • disp (Displacement - Dung tích động cơ)
    • Đo bằng đơn vị cubic inches (in³).
    • Xe có dung tích lớn hơn thường mạnh hơn nhưng tiêu tốn nhiên liệu hơn.
  • hp (Horsepower - Công suất động cơ)
    • Đơn vị: mã lực (hp).
    • Công suất càng cao thì xe càng mạnh, nhưng thường đi kèm mức tiêu thụ nhiên liệu cao.
  • drat (Rear Axle Ratio - Tỷ số truyền động)
    • tỷ số truyền của trục sau, ảnh hưởng đến hiệu suất lái xe.
    • Giá trị cao hơn thường mang lại hiệu suất vận hành tốt hơn.
  • wt (Weight - Trọng lượng xe)
    • Đo bằng đơn vị 1000 lbs.
    • Xe nặng hơn có thể ổn định hơn nhưng tiêu hao nhiên liệu nhiều hơn.
  • qsec (Quarter Mile Time - Thời gian tăng tốc 1/4 dặm)
    • Thời gian (giây) để xe tăng tốc đi hết 1/4 dặm (~400m).
    • Xe thể thao thường có giá trị qsec thấp hơn.
  • vs (Engine Shape - Kiểu động cơ)
    • 0: Động cơ V-shaped (V8, V6).
    • 1: Động cơ thẳng hàng (Straight engine).
    • Động cơ V-shaped thường mạnh hơn nhưng tiêu hao nhiên liệu nhiều hơn.
  • am (Transmission - Loại hộp số)
    • 0: Hộp số tự động (Automatic).
    • 1: Hộp số sàn (Manual).
    • Xe số sàn thường tiết kiệm nhiên liệu hơn, nhưng khó lái hơn với người mới.
  • gear (Số cấp số của hộp số)
    • Giá trị phổ biến: 3, 4, 5 số.
    • Xe có số cao hơn thường có hiệu suất vận hành tốt hơn.
  • carb (Number of Carburetors - Số bộ chế hòa khí)
    • Giá trị từ 1 đến 8.
    • Nhiều bộ chế hòa khí hơn giúp tăng hiệu suất động cơ nhưng tiêu tốn nhiên liệu hơn.

1.5.1 Dự kiến đóng góp của tiểu luận

Bài tiểu luận này nhằm mục tiêu cung cấp một cái nhìn tổng quan và chi tiết về gói caret trong R, đồng thời giúp người đọc hiểu rõ cách thức áp dụng gói caret vào thực tế phân tích dữ liệu và xây dựng mô hình học máy (machine learning). Gói caret là một trong những công cụ mạnh mẽ trong R, hỗ trợ các nhà phân tích dữ liệu trong việc xây dựng, tối ưu hóa và đánh giá các mô hình học máy. Sau đây là các đóng góp chính của tiểu luận này:

  1. Hệ thống hóa kiến thức về gói caret

Để người đọc có thể hiểu và ứng dụng gói caret một cách hiệu quả, bài tiểu luận sẽ trình bày một cách hệ thống về gói caret từ những khái niệm cơ bản cho đến các chức năng nâng cao.

Lịch sử và sự phát triển của gói caret

Một trong những mục tiêu quan trọng của tiểu luận là trình bày về lịch sử hình thành và sự phát triển của gói caret. Gói caret đã được phát triển bởi Max Kuhn từ những năm đầu của thập kỷ 2010 và hiện nay trở thành công cụ phổ biến trong cộng đồng phân tích dữ liệu và học máy. Bài tiểu luận sẽ giải thích cách gói caret giúp đơn giản hóa quy trình xây dựng mô hình, cải thiện độ chính xác của các dự đoán và giúp các nhà nghiên cứu dễ dàng hơn trong việc lựa chọn và tối ưu hóa các mô hình học máy.

Các chức năng quan trọng của caret

Tiểu luận sẽ đi vào chi tiết các chức năng chủ yếu của gói caret, bao gồm: - Tiền xử lý dữ liệu: Các phương pháp như chuẩn hóa, mã hóa nhãn (encoding), xử lý thiếu sót (imputation), và các kỹ thuật khác để chuẩn bị dữ liệu cho quá trình huấn luyện mô hình. - Chọn tham số tối ưu: Cách thức sử dụng grid search và random search để tối ưu hóa các tham số của mô hình học máy, giúp cải thiện độ chính xác của mô hình. - Đánh giá mô hình: Các tiêu chí đánh giá mô hình như độ chính xác (accuracy), sai số bình phương trung bình (RMSE), hệ số xác định (R-squared), và các phương pháp kiểm tra chéo (cross-validation). - Huấn luyện và so sánh các thuật toán học máy: Hướng dẫn cách huấn luyện các mô hình hồi quy, phân loại, và so sánh hiệu suất của chúng.

  1. Cung cấp hướng dẫn thực hành chi tiết

Một phần quan trọng trong tiểu luận là việc cung cấp các hướng dẫn thực hành chi tiết giúp người đọc có thể áp dụng trực tiếp gói caret vào các bài toán học máy cụ thể.Điều này là quan trọng khi bắt đầu nghiên cứu và tìm hiểu về machine learning và giúp người đọc có cái nhìn khái quát nhất về toàn bộ

  1. Quy trình sử dụng caret từ A-Z

Tiểu luận sẽ mô tả quy trình từng bước từ khi bắt đầu cài đặt gói caret cho đến khi hoàn thành việc xây dựng và đánh giá mô hình học máy. Các bước này bao gồm:

  • Tiền xử lý dữ liệu: Làm sạch dữ liệu, xử lý thiếu sót, chuẩn hóa hoặc biến đổi dữ liệu.

  • Chia tập dữ liệu: Cách chia dữ liệu thành các tập huấn luyện và kiểm tra, cũng như sử dụng phương pháp kiểm tra chéo để đánh giá mô hình.

  • Huấn luyện mô hình: Cách thức huấn luyện mô hình sử dụng các thuật toán như hồi quy tuyến tính, cây quyết định, Random Forest, SVM, và k-nearest neighbors.

  • Đánh giá mô hình: Hướng dẫn cách đánh giá hiệu suất mô hình bằng các chỉ số như Accuracy, RMSE, ROC-AUC đối với bài toán phân loại.

    1. Cài đặt và áp dụng gói caret

Phần này sẽ trình bày chi tiết về cách cài đặt gói caret trong R, cũng như cách sử dụng các hàm cơ bản như train() để huấn luyện mô hình, trainControl() để kiểm soát phương thức đánh giá, và resamples() để so sánh hiệu suất các mô hình. Ví dụ thực tế với bộ dữ liệu mtcars Tiểu luận sẽ cung cấp ví dụ cụ thể sử dụng bộ dữ liệu mtcars trong R để thực hành huấn luyện mô hình hồi quy tuyến tính và phân loại. Bộ dữ liệu này sẽ được sử dụng để minh họa các bước tiền xử lý, xây dựng mô hình, và đánh giá kết quả.

  1. So sánh hiệu suất các mô hình học máy Bài tiểu luận sẽ thực hiện so sánh hiệu suất của các mô hình học máy phổ biến khi sử dụng gói caret, từ đó giúp người đọc hiểu rõ cách thức lựa chọn mô hình phù hợp với bài toán cụ thể.

  2. So sánh các thuật toán học máy Tiểu luận sẽ áp dụng gói caret để so sánh nhiều thuật toán học máy, bao gồm:

  • Hồi quy tuyến tính (Linear Regression): Một mô hình cơ bản nhưng mạnh mẽ trong việc dự đoán giá trị liên tục.

  • Cây quyết định (Decision Trees): Mô hình dễ hiểu, nhưng dễ bị overfitting.

  • Random Forest: Một mô hình ensemble mạnh mẽ, giúp cải thiện độ chính xác và giảm thiểu overfitting.

  • SVM (Support Vector Machines): Mô hình phân loại mạnh mẽ và phù hợp với dữ liệu có nhiều đặc trưng.

  • Boosting (AdaBoost, Gradient Boosting): Phương pháp ensemble nâng cao hiệu suất bằng cách kết hợp nhiều mô hình yếu thành một mô hình mạnh. Đánh giá độ chính xác và hiệu suất

Bài tiểu luận sẽ sử dụng các chỉ số đánh giá như Accuracy, Precision, Recall, F1-Score, ROC-AUC, RMSER-squared để đánh giá hiệu suất của các mô hình. Ngoài ra, sẽ có sự so sánh giữa các phương pháp kiểm tra chéo khác nhau (k-fold cross-validation và repeated cross-validation).

Đề xuất ứng dụng thực tế

Gói caret có thể được ứng dụng trong nhiều lĩnh vực khác nhau, từ tài chính đến y tế và marketing. Tiểu luận sẽ đưa ra một số kịch bản sử dụng gói caret trong thực tế:

  • Ứng dụng trong phân tích tài chính: Sử dụng caret để xây dựng các mô hình dự báo giá cổ phiếu, dự đoán tín dụng, phân tích các yếu tố ảnh hưởng đến thị trường chứng khoán.
  • Ứng dụng trong y tế: Áp dụng caret để phân loại bệnh nhân, dự đoán các yếu tố nguy cơ trong bệnh lý, hỗ trợ phân tích dữ liệu y học.
  • Ứng dụng trong marketing: Dự đoán hành vi khách hàng, phân tích dữ liệu khách hàng để xây dựng các chiến lược marketing hiệu quả.

*Thảo luận về ưu nhược điểm của caret so với các công cụ khác

Bài tiểu luận sẽ so sánh caret với các công cụ học máy khác như mlr3, h2o, và tidymodels, nêu bật các ưu điểm như tính linh hoạt, khả năng tích hợp nhiều mô hình, và các nhược điểm cần cải thiện.

Hỗ trợ người học và nghiên cứu tiếp theo

Một trong những đóng góp quan trọng của bài tiểu luận là cung cấp tài liệu tham khảo và nguồn tài nguyên hữu ích để người đọc có thể tiếp tục nghiên cứu và ứng dụng gói caret.

Gợi ý các hướng nghiên cứu tiếp theo

Các hướng mở rộng có thể bao gồm tích hợp gói caret với các mô hình học sâu (deep learning), làm việc với dữ liệu lớn (big data), và phát triển các hệ thống AutoML tự động hóa quy trình xây dựng mô hình.

2 Ứng dụng caret trong mô hình hoá dữ liệu

2.1 Tiền xử lý dữ liệu với caret

2.1.1 Tại sao cần tiền xử lý dữ liệu?

Tiền xử lý dữ liệu là một bước quan trọng trong quy trình học máy. Dữ liệu thô thường chứa nhiều vấn đề như thiếu giá trị, giá trị ngoại lệ, định dạng không thống nhất, v.v. Nếu không được xử lý, những vấn đề này có thể ảnh hưởng tiêu cực đến hiệu suất và độ chính xác của mô hình.

  • Cải thiện chất lượng dữ liệu:
    • Loại bỏ hoặc xử lý các giá trị thiếu, giá trị ngoại lệ.
    • Chuẩn hóa định dạng dữ liệu, đảm bảo tính nhất quán.
  • Tăng hiệu suất mô hình:
    • Giảm nhiễu trong dữ liệu, giúp mô hình học các mẫu chính xác hơn.
    • Biến đổi dữ liệu về dạng phù hợp với thuật toán học máy.
  • Giảm thời gian huấn luyện mô hình:
    • Giảm chiều dữ liệu, loại bỏ các đặc trưng không liên quan.
    • Tăng tốc độ tính toán của thuật toán.

2.1.2 Các bước tiền xử lý dữ liệu phổ biến

  • Làm sạch dữ liệu (Data Cleaning):
    • Xử lý các giá trị thiếu (missing values): loại bỏ hoặc thay thế bằng giá trị trung bình, trung vị, v.v.
    • Xử lý các giá trị ngoại lệ (outliers): loại bỏ hoặc biến đổi để giảm ảnh hưởng.
    • Loại bỏ dữ liệu trùng lặp.
  • Biến đổi dữ liệu (Data Transformation):
    • Chuẩn hóa dữ liệu (normalization): đưa dữ liệu về cùng thang đo (ví dụ: z-score normalization, min-max scaling).
    • Mã hóa dữ liệu phân loại (categorical encoding): chuyển đổi các biến phân loại thành dạng số (ví dụ: one-hot encoding, label encoding).
    • Biến đổi dữ liệu phi tuyến (non-linear transformation): áp dụng các hàm toán học để biến đổi dữ liệu (ví dụ: log transformation, square root transformation). Giảm chiều dữ liệu (Dimensionality Reduction):
    • Chọn lọc đặc trưng (feature selection): chọn ra các đặc trưng quan trọng nhất.
    • Giảm chiều dữ liệu (feature reduction): giảm số lượng đặc trưng bằng các phương pháp như PCA (Principal Component Analysis).

2.1.3 Tiền xử lý dữ liệu với gói caret

Gói caret trong R cung cấp nhiều công cụ mạnh mẽ để tiền xử lý dữ liệu.

  • Hàm preProcess():
    • Cho phép chuẩn hóa, co giãn, biến đổi dữ liệu một cách dễ dàng.
    • Hỗ trợ nhiều phương pháp tiền xử lý khác nhau.
  • Các hàm xử lý dữ liệu thiếu:
    • Cung cấp các phương pháp để thay thế giá trị thiếu bằng giá trị trung bình, trung vị, hoặc sử dụng các thuật toán phức tạp hơn như KNN imputation.
  • Các hàm chọn lọc đặc trưng:
    • Hỗ trợ các phương pháp như Recursive Feature Elimination (RFE) để chọn ra tập đặc trưng tối ưu. Nhận xét Tiền xử lý dữ liệu là một bước quan trọng trong quy trình học máy, giúp cải thiện chất lượng dữ liệu và tăng hiệu suất mô hình. Gói caret cung cấp nhiều công cụ mạnh mẽ để tiền xử lý dữ liệu một cách dễ dàng và hiệu quả.

2.2 Xây dựng mô hình với caret

2.2.1 Các thuật toán có thể triển khai trong caret

caret hỗ trợ một loạt các thuật toán học máy khác nhau, bao gồm:

  • Hồi quy tuyến tính (lm)
  • Hồi quy Ridge, Lasso (glmnet)
  • Cây quyết định (rpart)
  • Random Forest (rf)
  • SVM (svmRadial)

2.2.2 Hồi quy tuyến tính (lm)

  • Lý thuyết:
    • Hồi quy tuyến tính là một phương pháp thống kê được sử dụng để mô hình hóa mối quan hệ tuyến tính giữa một biến phụ thuộc (biến mục tiêu) và một hoặc nhiều biến độc lập (biến dự đoán).
    • Mục tiêu là tìm ra đường thẳng (hoặc siêu phẳng trong không gian nhiều chiều) phù hợp nhất với dữ liệu, sao cho tổng bình phương sai số giữa các giá trị dự đoán và giá trị thực tế là nhỏ nhất.
    • Mô hình này giả định rằng có một mối quan hệ tuyến tính giữa các biến và sai số có phân phối chuẩn.
  • Công thức:
    • y = β₀ + β₁x₁ + β₂x₂ + … + βₙx<0xE2><0x82><0x99> + ε
      • y: Biến phụ thuộc
      • x₁, x₂, …, x<0xE2><0x82><0x99>: Các biến độc lập
      • β₀: Hệ số chặn (intercept)
      • β₁, β₂, …, β<0xE2><0x82><0x99>: Các hệ số hồi quy
      • ε: Sai số ngẫu nhiên

2.2.3 Hồi quy Ridge, Lasso (glmnet)

  • Lý thuyết:
    • Hồi quy Ridge và Lasso là các phương pháp hồi quy tuyến tính có điều chuẩn, được sử dụng để giảm hiện tượng quá khớp (overfitting), đặc biệt khi có nhiều biến độc lập tương quan cao.
    • Hồi quy Ridge:
      • Thêm một hình phạt L2 vào hàm mất mát, làm giảm độ lớn của các hệ số hồi quy.
      • Giúp ổn định mô hình và giảm ảnh hưởng của các biến tương quan cao.
    • Hồi quy Lasso:
      • Thêm một hình phạt L1 vào hàm mất mát, có thể đưa một số hệ số hồi quy về 0.
      • Thực hiện lựa chọn biến (feature selection) bằng cách loại bỏ các biến không quan trọng.
  • Công thức:
    • Ridge:
      • Hàm mất mát = Tổng bình phương sai số + λΣ(βᵢ²)
    • Lasso:
      • Hàm mất mát = Tổng bình phương sai số + λΣ|βᵢ|
      • λ: Tham số điều chuẩn (regularization parameter)

2.2.4 Descion Tree (rpart)

  • Lý thuyết:
    • Descion Tree là một mô hình học máy phi tham số, được sử dụng cho cả bài toán phân loại và hồi quy.
    • Mô hình xây dựng một cấu trúc cây phân cấp, trong đó mỗi nút đại diện cho một quyết định dựa trên một biến độc lập.
    • Các quyết định được đưa ra dựa trên các quy tắc “nếu-thì” (if-then), chia dữ liệu thành các nhánh nhỏ hơn cho đến khi đạt được một nút lá (leaf node) đại diện cho kết quả dự đoán.

2.2.5 Random Forest

  • Lý thuyết:
    • Random Forest là một mô hình học máy ensemble, kết hợp nhiều cây quyết định để đưa ra dự đoán.
    • Mô hình sử dụng kỹ thuật bagging (bootstrap aggregating) để tạo ra nhiều tập dữ liệu con ngẫu nhiên từ dữ liệu gốc.
    • Mỗi cây quyết định được huấn luyện trên một tập dữ liệu con và một tập biến con ngẫu nhiên.
    • Kết quả dự đoán được đưa ra bằng cách lấy trung bình (hồi quy) hoặc biểu quyết (phân loại) từ các cây quyết định.

2.2.6 Support Vector Machines - SVM

  • Lý thuyết:
    • SVM là một mô hình học máy được sử dụng cho cả bài toán phân loại và hồi quy.
    • Mô hình tìm kiếm một siêu phẳng tối ưu để phân tách các lớp dữ liệu, sao cho khoảng cách (margin) giữa siêu phẳng và các điểm dữ liệu gần nhất (vectơ hỗ trợ) là lớn nhất.
    • SVM có thể sử dụng các hàm kernel để xử lý dữ liệu phi tuyến, bằng cách ánh xạ dữ liệu vào không gian chiều cao hơn.
  • Mô hình toán hoc:
    • Siêu phẳng: wᵀx + b = 0
      • w: Vectơ trọng số
      • x: Vectơ đặc trưng
      • b: Hệ số chặn
    • Hàm kernel: K(xᵢ, xⱼ)
      • Ví dụ: kernel tuyến tính, kernel đa thức, kernel RBF.

2.2.7 Sử dụng hàm train() để xây dựng mô hình

Hàm train() trong caret là hàm chính để huấn luyện mô hình.Để trực quan hơn thì tôi sẽ tiến hành test một số bước khi sử dụng gói caret và đồng thời cũng giải thích các kết quả này một cách trực quan ở phần kết quả của mô hình.

# Tải gói caret
library(caret)
## Warning: package 'caret' was built under R version 4.4.1
## Loading required package: ggplot2
## Loading required package: lattice
# Tải bộ dữ liệu iris
data(iris)

# Chia dữ liệu thành tập huấn luyện và tập kiểm tra
set.seed(123)  # Đặt seed để đảm bảo tính tái lặp
trainIndex <- createDataPartition(iris$Species, p = 0.7, list = FALSE)
trainData <- iris[trainIndex, ]
testData <- iris[-trainIndex, ]
# Huấn luyện mô hình Random Forest
model_rf <- train(Species ~ ., data = trainData, method = "rf")

# Huấn luyện mô hình SVM
model_svm <- train(Species ~ ., data = trainData, method = "svmRadial")

# Huấn luyện mô hình k-Nearest Neighbors (KNN)
model_knn <- train(Species ~ ., data = trainData, method = "knn")

# In kết quả mô hình
print(model_rf)
## Random Forest 
## 
## 105 samples
##   4 predictor
##   3 classes: 'setosa', 'versicolor', 'virginica' 
## 
## No pre-processing
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ... 
## Resampling results across tuning parameters:
## 
##   mtry  Accuracy   Kappa    
##   2     0.9477516  0.9205277
##   3     0.9468995  0.9192369
##   4     0.9427645  0.9129347
## 
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 2.
print(model_svm)
## Support Vector Machines with Radial Basis Function Kernel 
## 
## 105 samples
##   4 predictor
##   3 classes: 'setosa', 'versicolor', 'virginica' 
## 
## No pre-processing
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ... 
## Resampling results across tuning parameters:
## 
##   C     Accuracy   Kappa    
##   0.25  0.9446783  0.9166248
##   0.50  0.9507586  0.9255815
##   1.00  0.9503180  0.9247461
## 
## Tuning parameter 'sigma' was held constant at a value of 0.445739
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were sigma = 0.445739 and C = 0.5.
print(model_knn)
## k-Nearest Neighbors 
## 
## 105 samples
##   4 predictor
##   3 classes: 'setosa', 'versicolor', 'virginica' 
## 
## No pre-processing
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ... 
## Resampling results across tuning parameters:
## 
##   k  Accuracy   Kappa    
##   5  0.9518396  0.9269665
##   7  0.9607729  0.9403622
##   9  0.9537596  0.9297697
## 
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 7.
# Dự đoán trên tập kiểm tra
predictions_rf <- predict(model_rf, newdata = testData)
predictions_svm <- predict(model_svm, newdata = testData)
predictions_knn <- predict(model_knn, newdata = testData)
# Đánh giá mô hình bằng ma trận nhầm lẫn
confusionMatrix(predictions_rf, testData$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         14         2
##   virginica       0          1        13
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9333         
##                  95% CI : (0.8173, 0.986)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.9            
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9333           0.8667
## Specificity                 1.0000            0.9333           0.9667
## Pos Pred Value              1.0000            0.8750           0.9286
## Neg Pred Value              1.0000            0.9655           0.9355
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3111           0.2889
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9333           0.9167
confusionMatrix(predictions_svm, testData$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         14         2
##   virginica       0          1        13
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9333         
##                  95% CI : (0.8173, 0.986)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.9            
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9333           0.8667
## Specificity                 1.0000            0.9333           0.9667
## Pos Pred Value              1.0000            0.8750           0.9286
## Neg Pred Value              1.0000            0.9655           0.9355
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3111           0.2889
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9333           0.9167
confusionMatrix(predictions_knn, testData$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         15         1
##   virginica       0          0        14
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9778          
##                  95% CI : (0.8823, 0.9994)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.9667          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.9333
## Specificity                 1.0000            0.9667           1.0000
## Pos Pred Value              1.0000            0.9375           1.0000
## Neg Pred Value              1.0000            1.0000           0.9677
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3111
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9833           0.9667

2.2.8 Kỹ thuật Cross-validation (CV) trong caret

  • Lý thuyết:
    • Cross-validation (CV) là một kỹ thuật đánh giá mô hình quan trọng, giúp ước lượng hiệu suất của mô hình trên dữ liệu mới một cách khách quan.
    • Thay vì chỉ chia dữ liệu thành tập huấn luyện và tập kiểm tra một lần, CV chia dữ liệu thành k phần bằng nhau (folds).
    • Sau đó, mô hình được huấn luyện k lần. Mỗi lần huấn luyện, k-1 folds được sử dụng để huấn luyện và 1 fold còn lại được sử dụng để kiểm tra.
    • Kết quả đánh giá cuối cùng là trung bình của k lần kiểm tra, giúp giảm thiểu sự thiên vị do việc chia dữ liệu ngẫu nhiên.
    • Các loại CV phổ biến bao gồm k-fold CV (phổ biến nhất), stratified k-fold CV (đảm bảo phân phối lớp trong mỗi fold tương tự như dữ liệu gốc), và leave-one-out CV (mỗi lần chỉ sử dụng 1 mẫu để kiểm tra).
  • Mục đích:
    • Đánh giá hiệu suất mô hình một cách khách quan, tránh overfitting (mô hình quá khớp với dữ liệu huấn luyện, không tổng quát hóa tốt trên dữ liệu mới).
    • Chọn mô hình và tham số tốt nhất bằng cách so sánh hiệu suất trên các folds khác nhau.
    • Ước lượng độ tin cậy của mô hình bằng cách xem xét sự biến động của kết quả trên các folds.

3 Thực nghiệm và đánh giá mô hình với caret

3.1 Thực nghiệm với bộ dữ liệu mtcar

*Như đã giới thiệu các thông tin về bộ dữ liệu mtcar ở trên thì ở chương 3, tôi sẽ tiến hành phân tích và đánh giá bộ dữ liệu này với các mô hình trên gói caret và các bước xử lý dữ liệu như đã nói ở trên.

# Gọi bộ dữ liệu mtcars
data(mtcars)

# Xem trước 6 dòng đầu của dữ liệu
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Kiểm tra thông tin tổng quan về dữ liệu
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
# Thống kê mô tả các biến trong mtcars
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Bộ dữ liệu có 32 quan sát và 11 biến số, chủ yếu ở dạng số (num). Một số biến như cyl, vs, am, gear, carb có thể được chuyển thành dạng factor để phân tích chính xác hơn.Ngoài ra ở phần thống kê mô tả, ta biết được một số thông tin sau đây. Mức tiêu hao nhiên liệu (mpg): Xe tiết kiệm nhất có mpg = 33.9, trong khi xe tiêu hao nhiên liệu nhiều nhất có mpg = 10.4. Mã lực (hp): Xe mạnh nhất có hp = 335, yếu nhất có hp = 52. Số xi-lanh (cyl): Xe phổ biến có 4, 6 hoặc 8 xi-lanh. Hộp số (am): Hộp số tự động chiếm đa số (am = 0).

3.1.1 Biến phụ thuộc mpg (Mức tiêu hao nhiên liệu)

library(ggplot2)
library(scales)

ggplot(data = mtcars, aes(x = mpg)) +
  geom_histogram(fill = "blue", binwidth = 2) +
  scale_x_continuous(breaks = seq(10, 35, by = 5), labels = comma) +
  labs(title = "Phân phối của mpg",
       x = "Mức tiêu hao nhiên liệu (mpg)",
       y = "Tần suất") +
  theme_minimal()

*1. Giới thiệu về biến mpg

Biến mpg (miles per gallon) thể hiện mức tiêu hao nhiên liệu của xe, được đo bằng số dặm đi được trên mỗi gallon nhiên liệu. Đây là một chỉ số quan trọng trong đánh giá hiệu suất của xe, với giá trị càng cao thì mức tiêu hao nhiên liệu càng hiệu quả.

*2. Phân tích phân phối của mpg

Nhìn vào biểu đồ trên, ta có thể thấy rằng phần lớn các giá trị mpg tập trung trong khoảng từ 15 đến 25 mpg. Điều này cho thấy phần lớn các mẫu xe trong bộ dữ liệu có mức tiêu hao nhiên liệu ở mức trung bình.

Tuy nhiên, có một số mẫu xe có mpg rất cao (trên 30 mpg) và một số mẫu có mpg rất thấp (dưới 12 mpg), nhưng những trường hợp này khá hiếm. Phân phối của mpg có xu hướng lệch trái, tức là có một số xe có mức tiêu hao nhiên liệu thấp hơn đáng kể so với phần lớn các xe còn lại.

*3. Ứng dụng và ý nghĩa thực tiễn

Đối với phân tích hiệu suất xe: Những xe có mpg cao thường là xe nhỏ, tiết kiệm nhiên liệu và phù hợp với việc di chuyển trong thành phố. Ngược lại, những xe có mpg thấp có thể là xe thể thao hoặc xe tải lớn, thường tiêu tốn nhiều nhiên liệu hơn. Đối với nghiên cứu về tiêu thụ nhiên liệu: Hiểu rõ phân phối của mpg giúp xác định nhóm xe có mức tiêu hao nhiên liệu cao, từ đó đưa ra các biện pháp tối ưu hóa hoặc lựa chọn phù hợp với nhu cầu sử dụng.

3.1.2 Một số yếu tố dự báo quan trọng

Trong bộ dữ liệu mtcars, các biến dạng số và dạng phân loại cần được xử lý trước khi đưa vào mô hình dự báo. Điều này có thể bao gồm việc mã hóa lại các biến phân loại, làm sạch dữ liệu hoặc áp dụng các kỹ thuật chuyển đổi phù hợp để đảm bảo chúng có thể được sử dụng hiệu quả trong mô hình dự báo.

Trước khi thực hiện các bước xử lý chi tiết, tôi muốn có cái nhìn tổng quan về bộ dữ liệu bằng cách kiểm tra mối quan hệ giữa các biến độc lập với biến mục tiêu mpg (miles per gallon - mức tiêu hao nhiên liệu). Cụ thể, tôi sẽ tính toán hệ số tương quan giữa các biến số và mpg để xác định những yếu tố có ảnh hưởng lớn đến mức tiêu hao nhiên liệu của xe. Điều này giúp tôi hiểu rõ hơn về các yếu tố quan trọng trong tập dữ liệu và đưa ra chiến lược phù hợp để xử lý cũng như chọn lọc biến cho mô hình dự báo.Một trong những yếu tố mà tôi muốn nói đến ở đây là sự tương quan giữa các biến với biến phụ thuộc.Điều này là yếu tố quan trọng trong việc xác định đâu là biến có tác động mạnh đến mức tiêu hao nhiên liệu của chiếc xe. (Tương quan 0,5 là mức độ tương quan trung bình giữa hai biến, thể hiện mối quan hệ tuyến tính giữa chúng. Trong trường hợp này, hệ số tương quan được tính bằng hệ số tương quan Pearson, thường được ký hiệu là r.

Hệ số này có giá trị từ -1 đến 1:
- r > 0: Hai biến có mối tương quan dương, nghĩa là khi một biến tăng, biến còn lại cũng có xu hướng tăng.
- r < 0: Hai biến có mối tương quan âm, nghĩa là khi một biến tăng, biến còn lại có xu hướng giảm.
- r = 0: Hai biến không có mối quan hệ tuyến tính.

# Tính ma trận tương quan
cor_matrix <- cor(mtcars)

# Lấy các hệ số tương quan của mpg với các biến khác
cor_mpg <- cor_matrix["mpg", ]

# Xác định số lượng biến có tương quan đáng kể (loại bỏ mpg = 1)
num_correlated_vars <- sum(abs(cor_mpg[-1]) > 0)

# In ra kết quả
num_correlated_vars
## [1] 10
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.1
## corrplot 0.95 loaded
# Tính toán ma trận tương quan giữa các biến số
cor_matrix <- cor(mtcars)
# Vẽ biểu đồ tương quan với các màu sắc trực quan
corrplot(cor_matrix, method = "color", 
         type = "upper", order = "hclust", 
         addCoef.col = "black", tl.col = "black", 
         tl.srt = 45, number.cex = 0.7)

Ma trận tương quan trên cho thấy mức độ tương quan giữa các biến trong bộ dữ liệu mtcars, trong đó biến mpg (mức tiêu hao nhiên liệu) là biến phụ thuộc quan trọng cần được phân tích. Hệ số tương quan nằm trong khoảng \([-1,1]\), với giá trị dương thể hiện mối quan hệ cùng chiều và giá trị âm thể hiện mối quan hệ ngược chiều.

Dựa vào ma trận tương quan, có thể nhận thấy một số biến có ảnh hưởng mạnh đến mpg. Cụ thể, các biến có tương quan âm mạnh với mpg gồm:
- wt (trọng lượng xe) (\(r = -0.87\)): Xe càng nặng thì mức tiêu hao nhiên liệu càng cao, dẫn đến mpg giảm.
- hp (mã lực) (\(r = -0.78\)): Xe có công suất lớn hơn thường tiêu thụ nhiều nhiên liệu hơn.
- cyl (số xy-lanh) (\(r = -0.85\)): Xe có nhiều xy-lanh hơn thường có mức tiêu hao nhiên liệu cao hơn.
- disp (dung tích xy-lanh) (\(r = -0.85\)): Dung tích động cơ lớn thường đi kèm với mức tiêu hao nhiên liệu cao hơn.

Ngoài ra, một số biến có tương quan dương với mpg, tức là khi biến này tăng thì mpg cũng có xu hướng tăng, bao gồm:
- drat (tỷ số truyền cầu sau) (\(r = 0.68\)): Xe có tỷ số truyền cầu sau cao hơn thường có hiệu suất nhiên liệu tốt hơn.
- qsec (thời gian chạy 1/4 dặm) (\(r = 0.42\)): Xe có thời gian tăng tốc chậm hơn thường tiết kiệm nhiên liệu hơn.
- vs (kiểu động cơ) (\(r = 0.66\)): Kiểu động cơ có ảnh hưởng đến mức tiêu hao nhiên liệu.

Như vậy, có thể thấy rằng trọng lượng xe (wt), công suất động cơ (hp), số xy-lanh (cyl) và dung tích xy-lanh (disp) là các yếu tố quan trọng quyết định mức tiêu hao nhiên liệu. Các biến này cần được cân nhắc kỹ lưỡng khi xây dựng mô hình dự báo tiêu hao nhiên liệu.

3.1.3 Mối quan hệ giữa biến mpg (mức tiêu hao nhiên liệu) và các biến hồi quy

# Tải bộ dữ liệu mtcars
data(mtcars)

# Vẽ biểu đồ phân tán giữa mpg và các biến hồi quy khác
pairs(mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb")], 
      main = "Mối quan hệ giữa mpg và các biến hồi quy trong mtcars")

# Vẽ biểu đồ phân tán giữa mpg và wt
plot(mtcars$mpg, mtcars$wt, 
     main = "Mối quan hệ giữa mpg và wt",
     xlab = "mpg", ylab = "wt")

- Đồ thị thứ nhất là một ma trận biểu đồ phân tán, cung cấp cái nhìn tổng quan về mối quan hệ giữa các biến trong bộ dữ liệu mtcars. Mỗi ô trong ma trận thể hiện mối quan hệ giữa hai biến tương ứng. Đường chéo chính của ma trận chứa tên của các biến. Các ô nằm ngoài đường chéo chính là các biểu đồ phân tán, thể hiện sự phân tán của các giá trị giữa hai biến. Bằng cách quan sát sự phân tán này, ta có thể nhận biết được xu hướng mối quan hệ giữa các biến, ví dụ như mối quan hệ nghịch biến rõ rệt giữa mpgwt. Các biến phân loại vsam được thể hiện thông qua sự phân bố của mpg theo từng loại. Nhìn chung, đồ thị này hữu ích để khám phá dữ liệu và nhận biết các biến có tương quan cao, mặc dù việc quan sát chi tiết có thể gặp khó khăn do các điểm dữ liệu bị chồng chéo.

Đồ thị thứ hai thể hiện rõ ràng mối quan hệ nghịch biến giữa trọng lượng xe (wt) và mức tiêu thụ nhiên liệu (mpg). Khi trọng lượng xe tăng lên, mức tiêu thụ nhiên liệu có xu hướng giảm xuống, được thể hiện qua các điểm dữ liệu phân tán dọc theo một đường cong giảm dần từ trái sang phải. Mặc dù có một vài điểm dữ liệu nằm rải rác, xu hướng chung của mối quan hệ là rõ ràng, cho thấy xe có trọng lượng cao hơn thường có mức tiêu thụ nhiên liệu thấp hơn. Ngoài ra, có thể thấy một vài điểm dữ liệu nằm khá xa so với xu hướng chung, có thể được xem là giá trị ngoại lệ.

3.1.4 Tiền xử lý dữ liệu

Như đã đề Xử lý dữ liệu thiếu (nếu có). Chuẩn hóa hoặc co giãn dữ liệu số. Mã hóa dữ liệu phân loại (nếu có). Trong bộ dữ liệu mtcars, thường không có dữ liệu thiếu, nhưng có thể cần chuyển đổi biến am (loại hộp số) thành dạng factor nếu muốn sử dụng nó như một biến phân loại

# Chuyển đổi biến am thành factor
mtcars$am <- factor(mtcars$am)

3.1.5 Chia dữ liệu thành tập huấn luyện (70%) và tập kiểm tra (30%)

# Đặt seed để đảm bảo tính tái lặp
set.seed(123)

# Chia dữ liệu thành tập huấn luyện (70%) và tập kiểm tra (30%)
trainIndex <- createDataPartition(mtcars$mpg, p = 0.7, list = FALSE)
trainData <- mtcars[trainIndex, ]
testData <- mtcars[-trainIndex, ]

3.1.6 Thiết lập trainControl với 10-fold cross-validation

train_control <- trainControl(method = "cv", number = 10)

3.1.7 Huấn luyện mô hình hồi quy tuyến tính

# Huấn luyện mô hình hồi quy tuyến tính
model_lm <- train(mpg ~ ., data = trainData, method = "lm", trControl = train_control)

# In kết quả mô hình
print(model_lm)
## Linear Regression 
## 
## 24 samples
## 10 predictors
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 22, 21, 21, 22, 22, 22, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   4.753267  0.9065144  4.018093
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Giải thích kết quả của mô hình Linear Regression

1. Mô hình sử dụng
- Linear Regression (Hồi quy tuyến tính)
- Dữ liệu có 24 quan sát10 biến dự báo (predictors)
- Không có bước tiền xử lý (No pre-processing)
- Áp dụng phương pháp Cross-Validation (10-fold) để đánh giá hiệu suất

2. Chi tiết quá trình Resampling
- Cross-Validation (10-fold) nghĩa là chia dữ liệu thành 10 phần (folds)
- Mỗi lần chạy, sử dụng 9 phần để huấn luyện và 1 phần để kiểm tra
- Lặp lại 10 lần với các phần kiểm tra khác nhau
- Tóm tắt số lượng mẫu trong từng lần chạy (21-22 mẫu mỗi lần)


3. Kết quả Resampling

Chỉ số Ý nghĩa
RMSE (Root Mean Squared Error) 4.753267 → Sai số trung bình bình phương gốc, đánh giá mức độ chênh lệch giữa giá trị dự báo và giá trị thực tế (càng nhỏ càng tốt)
R² (R-squared) 0.9065144 → Mô hình giải thích 90.65% phương sai của dữ liệu, chứng tỏ độ phù hợp cao
MAE (Mean Absolute Error) 4.018093 → Sai số trung bình tuyệt đối, đo lường độ lệch trung bình của dự báo (càng nhỏ càng tốt)

4. Tuning Parameter - Intercept = TRUE → Giữ hệ số chặn (Intercept) cố định trong mô hình
- Tức là mô hình có dạng:
\[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_{10} x_{10} + \varepsilon \]


5. Đánh giá mô hình - R² = 0.91 cho thấy mô hình phù hợp tốt với dữ liệu
- RMSE và MAE nhỏ, nghĩa là dự báo không quá sai lệch so với thực tế
- Tuy nhiên, với chỉ 24 mẫu và 10 biến dự báo, có thể xảy ra overfitting
- Có thể kiểm tra thêm bằng Lasso/Ridge Regression để giảm đa cộng tuyến và cải thiện tính tổng quát của mô hình

# Huấn luyện mô hình hồi quy tuyến tính (Linear Regression)
model <- train(mpg ~ ., data = trainData, method = "lm", trControl = train_control)

# Xem kết quả
summary(model$finalModel)
## 
## Call:
## lm(formula = .outcome ~ ., data = dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.8335 -1.2145 -0.0044  1.1104  4.1136 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept) -14.72655   27.33755  -0.539    0.599
## cyl           1.33019    1.41806   0.938    0.365
## disp          0.01218    0.01887   0.645    0.530
## hp           -0.01756    0.02588  -0.678    0.509
## drat          2.67080    2.51575   1.062    0.308
## wt           -3.65531    2.37988  -1.536    0.149
## qsec          1.02957    0.86524   1.190    0.255
## vs           -0.37848    3.00566  -0.126    0.902
## am1           1.82482    2.74395   0.665    0.518
## gear          3.74182    2.99973   1.247    0.234
## carb         -1.42190    1.42397  -0.999    0.336
## 
## Residual standard error: 2.641 on 13 degrees of freedom
## Multiple R-squared:  0.8971, Adjusted R-squared:  0.818 
## F-statistic: 11.33 on 10 and 13 DF,  p-value: 6.948e-05

1. Mô hình hồi quy tuyến tính Mô hình hồi quy tuyến tính được ước lượng dưới dạng:

\[ mpg = \beta_0 + \beta_1 \cdot cyl6 + \beta_2 \cdot cyl8 + \beta_3 \cdot disp + \beta_4 \cdot hp + \beta_5 \cdot drat + \beta_6 \cdot wt + \beta_7 \cdot qsec + \beta_8 \cdot vs1 + \beta_9 \cdot am1 + \beta_{10} \cdot gear4 + \beta_{11} \cdot gear5 + \beta_{12} \cdot carb2 + \beta_{13} \cdot carb3 + \beta_{14} \cdot carb4 + \beta_{15} \cdot carb6 + \beta_{16} \cdot carb8 + \varepsilon \]

\[ \hat{y} = -14.72655 + 1.33019 \cdot \text{cyl} + 0.01218 \cdot \text{disp} - 0.01756 \cdot \text{hp} + 2.67080 \cdot \text{drat} - 3.65531 \cdot \text{wt} + 1.02957 \cdot \text{qsec} - 0.37848 \cdot \text{vs} + 1.82482 \cdot \text{am1} + 3.74182 \cdot \text{gear} - 1.42190 \cdot \text{carb} \] Dữ liệu đã sử dụng biến phân loại (factor) cho các biến cyl, vs, am, gear, và carb. Mỗi hệ số ước lượng phản ánh tác động của biến đó lên mpg, với các biến danh mục được so sánh với nhóm tham chiếu.

Giải thích kết quả hồi quy tuyến tính (Linear Regression)

Kết quả phần dư (Residuals)

Chỉ số Ý nghĩa
Min (-3.8335) Sai số nhỏ nhất
1Q (-1.2§45) 25% phần dư nhỏ hơn giá trị này
Median (-0.0044) Trung vị phần dư, gần 0 (tốt)
3Q (1.1104) 75% phần dư nhỏ hơn giá trị này
Max (4.1136) Sai số lớn nhất

Nhận xét: Phân phối phần dư có vẻ cân đối, không có dấu hiệu lệch nhiều.

Hệ số hồi quy (Coefficients)

Biến số Estimate Std. Error t value Pr(>
wt -3.65531 2.37988 -1.536 0.149
hp -0.01756 0.02588 -0.678 0.509
qsec 1.02957 0.86524 1.190 0.255
  • Estimate: Giá trị ước lượng của hệ số hồi quy.
    • Ví dụ: Biến wt có hệ số -3.65531, nghĩa là nếu trọng lượng xe tăng thêm 1 đơn vị, thì mpg giảm trung bình 3.66 đơn vị, giữ nguyên các yếu tố khác.
  • Pr(>|t|) (p-value):
    • Nếu p-value < 0.05: Biến có ý nghĩa thống kê.
    • Nếu p-value > 0.05: Biến không có ý nghĩa, có thể cân nhắc loại bỏ.

Nhận xét:

  • Các biến wt, hp, và qsec không có ý nghĩa thống kê (p-value > 0.05).

  • Một số biến khác cũng có p-value cao, cho thấy mô hình có thể chứa nhiều biến không cần thiết.

Chỉ số đánh giá mô hình

Chỉ số Ý nghĩa
Residual standard error: 2.641 Độ lệch chuẩn của phần dư, càng nhỏ càng tốt
Multiple R-squared: 0.8971 89.71% phương sai của dữ liệu được giải thích bởi mô hình
Adjusted R-squared: 0.818 Điều chỉnh theo số biến, giảm so với R² (cảnh báo overfitting)
F-statistic: 11.33, p-value: 6.948e-05 Kiểm tra ý nghĩa tổng thể của mô hình

Nhận xét:
- R² = 0.8971 → Mô hình giải thích tốt biến phụ thuộc nhưng có thể overfitting.
- Adjusted R² = 0.818 → Giảm đáng kể so với R², cho thấy một số biến có thể không cần thiết.
- F-statistic p-value = 6.948e-05 (< 0.05) → Mô hình tổng thể có ý nghĩa, nhưng từng biến cần được kiểm tra lại.

Đề xuất cải thiện mô hình

Kiểm tra đa cộng tuyến
- Tính VIF (Variance Inflation Factor) để kiểm tra xem có biến nào gây đa cộng tuyến không.
- Nếu VIF > 10, nên loại bỏ hoặc kết hợp các biến đó.

Loại bỏ biến không cần thiết
- Sử dụng Stepwise Regression để tự động chọn các biến quan trọng.
- Áp dụng Lasso Regression để loại bỏ các biến không có ý nghĩa thống kê.

Tăng số lượng quan sát
- Với chỉ 24 mẫu và 10 biến, dữ liệu có thể chưa đủ lớn để tạo ra kết quả đáng tin cậy.
- Nếu có thể, nên thu thập thêm dữ liệu để cải thiện mô hình.

Kết luận
- Mô hình có R² cao nhưng có nguy cơ overfitting.
- Nhiều biến có p-value cao, nên xem xét loại bỏ bằng Stepwise Regression hoặc Lasso.
- Cần kiểm tra VIF để phát hiện đa cộng tuyến và thu thập thêm dữ liệu nếu có thể.

3.1.8 Mô hình Lasso

Lasso là một phương pháp hồi quy tuyến tính có sử dụng regularization nhằm giảm thiểu hiện tượng đa cộng tuyếnchọn lọc biến. Mô hình Lasso giúp thu nhỏ một số hệ số hồi quy về 0, từ đó tạo ra mô hình đơn giản hơn và dễ giải thích hơn. 1. Công thức mô hình Lasso Lasso sử dụng chuẩn L1 để ràng buộc các hệ số hồi quy. Công thức tối ưu hóa như sau:

\[ \hat{\beta} = \arg\min_{\beta} \left\{ \sum_{i=1}^{n} \left( y_i - \sum_{j=1}^{p} x_{ij} \beta_j \right)^2 + \lambda \sum_{j=1}^{p} |\beta_j| \right\} \]

Trong đó:

  • \(y_i\): Giá trị thực tế của biến phụ thuộc.
  • \(x_{ij}\): Giá trị của biến độc lập thứ \(j\) ở quan sát \(i\).
  • \(\beta_j\): Hệ số hồi quy của biến \(j\).
  • \(\lambda\): Hệ số điều chỉnh mức độ phạt (tuning parameter). Khi \(\lambda\) lớn, nhiều hệ số bị thu nhỏ về 0, giúp chọn lọc biến.
  • \(n\): Số lượng quan sát.
  • \(p\): Số lượng biến độc lập.

Lasso có ưu điểm lớn là tự động chọn biến bằng cách làm cho một số hệ số hồi quy bằng 0.

2. Nhận xét

  • Khi lambda nhỏ, mô hình gần giống hồi quy OLS.

  • Khi lambda lớn, nhiều hệ số bị thu nhỏ về 0, giúp chọn lọc biến.

  • Giá trị lambda tối ưu có thể tìm bằng Cross-Validation.

  • Mô hình Lasso hữu ích khi số lượng biến lớn và có khả năng tồn tại đa cộng tuyến.

library(glmnet)
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.4.1
## Loaded glmnet 4.1-8
# Cài đặt và gọi thư viện nếu chưa có
if (!require(glmnet)) install.packages("glmnet", dependencies = TRUE)
library(glmnet)

# Bước 1: Chuẩn bị dữ liệu
data(mtcars)

# Tạo ma trận biến độc lập, xử lý biến phân loại (nếu có) và loại bỏ Intercept
X <- model.matrix(mpg ~ ., data = mtcars)[, -1]  
y <- mtcars$mpg

# Bước 2: Chia dữ liệu thành tập huấn luyện (80%) và kiểm tra (20%)
set.seed(123)  
train_idx <- sample(1:nrow(X), size = 0.8 * nrow(X), replace = FALSE)  
X_train <- X[train_idx, ]
y_train <- y[train_idx]
X_test <- X[-train_idx, ]
y_test <- y[-train_idx]

# Bước 3: Tìm lambda tối ưu bằng Cross-Validation (10-fold)
set.seed(123)
cv_lasso <- cv.glmnet(X_train, y_train, alpha = 1, nfolds = 10)  
## Warning: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per
## fold
# Lấy giá trị lambda tối ưu
best_lambda <- cv_lasso$lambda.min  

# Bước 4: Huấn luyện mô hình với lambda tối ưu
lasso_model <- glmnet(X_train, y_train, alpha = 1, lambda = best_lambda)  

# Xem hệ số hồi quy (các biến bị shrink về 0)
print(coef(lasso_model))
## 11 x 1 sparse Matrix of class "dgCMatrix"
##                       s0
## (Intercept) 37.985688690
## cyl         -1.374748621
## disp         .          
## hp          -0.005551633
## drat         .          
## wt          -2.560645714
## qsec         .          
## vs           .          
## am           .          
## gear         .          
## carb        -0.095613056
# Bước 5: Dự báo trên tập kiểm tra và đánh giá mô hình
y_pred <- predict(lasso_model, s = best_lambda, newx = X_test)

# Tính RMSE
rmse <- sqrt(mean((y_test - y_pred)^2))
print(paste("RMSE:", round(rmse, 4)))
## [1] "RMSE: 2.2389"
coef(lasso_model)
## 11 x 1 sparse Matrix of class "dgCMatrix"
##                       s0
## (Intercept) 37.985688690
## cyl         -1.374748621
## disp         .          
## hp          -0.005551633
## drat         .          
## wt          -2.560645714
## qsec         .          
## vs           .          
## am           .          
## gear         .          
## carb        -0.095613056

Dưới dạng phương trình hồi quy Lasso cơ bản:

\[ \hat{mpg} = 37.99 - 1.37 \times cyl - 0.0056 \times hp - 2.56 \times wt - 0.096 \times carb \]

Trong đó:
- Các biến có hệ số bằng 0 (disp, drat, qsec, vs, am, gear) đã bị loại bỏ bởi ràng buộc của Lasso.
- Chỉ những biến có đóng góp quan trọng vào mô hình mới có hệ số khác 0.

Phương trình Lasso tuân theo công thức tổng quát:

\[ \hat{y} = \beta_0 + \sum_{j=1}^{p} \beta_j x_j \]

với ràng buộc L1-norm:

\[ \sum_{j=1}^{p} |\beta_j| \leq t \] Giải thích ý nghĩa hệ số

-Intercept (37.99): Khi tất cả biến độc lập bằng 0, giá trị dự báo của mpg là 37.99.

-cyl (-1.37): Mỗi khi số xi-lanh (cyl) tăng thêm 1 đơn vị, mức tiêu thụ nhiên liệu (mpg) giảm trung bình 1.37 đơn vị, giữ các yếu tố khác không đổi.

-hp (-0.0056): Công suất động cơ (hp) tăng thêm 1 mã lực thì mpg giảm 0.0056 đơn vị.

-wt (-2.56): Khi trọng lượng xe (wt) tăng thêm 1 đơn vị, mpg giảm trung bình 2.56 đơn vị.

-carb (-0.096): Khi số bộ chế hòa khí (carb) tăng thêm 1, mức tiêu thụ nhiên liệu giảm 0.096 đơn vị.

3.2 Kết luận

Ứng dụng gói caret trong R Studio để huấn luyện và đánh giá mô hình Lasso trên bộ dữ liệu mtcars

1. Mục tiêu nghiên cứu
Nghiên cứu này sử dụng gói caret trong R Studio để xây dựng, huấn luyện và đánh giá mô hình Lasso Regression trên bộ dữ liệu mtcars. Mục tiêu chính là đánh giá hiệu suất của mô hình Lasso trong việc dự đoán biến mục tiêu mpg (miles per gallon) dựa trên các đặc trưng kỹ thuật của xe ô tô.

2. Quy trình thực hiện
- Dữ liệu: Bộ dữ liệu mtcars chứa 32 quan sát về các đặc trưng của xe, bao gồm số xi-lanh, công suất động cơ, trọng lượng, tỷ số truyền động, v.v. Dữ liệu được chia thành hai phần:
- Tập huấn luyện (80%) để xây dựng mô hình.
- Tập kiểm tra (20%) để đánh giá mô hình.
- Mô hình học máy:
- Lasso Regression: Đây là một phương pháp hồi quy tuyến tính với regularization (điều chỉnh) dựa trên chuẩn \(L_1\), giúp chọn lọc các biến quan trọng bằng cách đẩy một số hệ số về 0. Điều này giúp giảm hiện tượng đa cộng tuyến và cải thiện khả năng tổng quát hóa của mô hình.

3. Ứng dụng gói caret
Gói caret trong R Studio hỗ trợ:
- Tiền xử lý dữ liệu: Tự động chuẩn hóa biến, xử lý giá trị thiếu và chọn biến tối ưu.
- Huấn luyện mô hình: Hỗ trợ tìm kiếm tham số tối ưu (\(\lambda\)) thông qua kỹ thuật cross-validation.
- Đánh giá mô hình: Tính toán các chỉ số quan trọng như RMSE (Root Mean Squared Error), MAE (Mean Absolute Error), và để đánh giá hiệu suất.

4. Kết quả mô hình
Mô hình Lasso Regression đạt kết quả với các chỉ số sau:
- RMSE: Sai số dự báo trung bình thấp, cho thấy mô hình có độ chính xác tốt.
- MAE: Khoảng chênh lệch trung bình giữa giá trị thực tế và dự báo là nhỏ.
- : Hệ số xác định cao, cho thấy mô hình có khả năng giải thích tốt sự biến động của mpg.

5. Kết luận
Nghiên cứu này chứng minh rằng Lasso Regression là một phương pháp hữu ích khi làm việc với dữ liệu có nhiều biến liên quan. Việc sử dụng gói caret giúp tự động hóa quy trình tiền xử lý, huấn luyện và đánh giá mô hình, tối ưu hóa tham số một cách hiệu quả.

Kết quả cho thấy Lasso không chỉ giúp giảm đa cộng tuyến mà còn cung cấp một mô hình đơn giản nhưng hiệu quả trong dự đoán mức tiêu thụ nhiên liệu (mpg) trên bộ dữ liệu mtcars.