So sánh nén predictor và stac năm 2024

Trong

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

4 tồn tại định lý “không có bữa trưa miễn phí” (

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

5), tức là không tồn tại một thuật toán mà luôn tốt cho mọi ứng dụng và mọi tập dữ liệu, vì các thuật toán

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

6 thường dựa trên một tập các tham số (

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

  1. hoặc một giả thiết nhất định nào đó về phân bố dữ liệu. Vì vậy để tìm được những thuật toán phù hợp cho tập

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

8 của mình có thể các bạn sẽ cần nhiều thời gian để

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

9 các thuật toán khác nhau. Rồi từ đó thực hiện hiệu chỉnh các tham số (

dim(dataset)

  1. của thuật toán để thu được độ chính xác cao nhất.

Một cách khác có thể sử dụng để tăng độ chính xác trên tập

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

8 của bạn là kết hợp (

dim(dataset)

  1. một số mô hình với nhau. Phương pháp này gọi là

dim(dataset)

3. Ý tưởng của việc

dim(dataset)

2 các mô hình khác nhau xuất phát từ một suy nghĩ hợp lý là: các mô hình khác nhau có khả năng khác nhau, có thể thực hiện tốt nhất các loại công việc khác nhau (

dim(dataset)

5), khi kết hợp các mô hình này với nhau một cách hợp lý thì sẽ tạo thành một mô hình kết hợp (

dim(dataset)

  1. mạnh có khả năng cải thiện hiệu suât tổng thể (

dim(dataset)

  1. so với việc chỉ dùng các mô hình một cách đơn lẻ.

Các phương pháp

dim(dataset)

8 được chia thành 3 loại sau đây:

  • dim(dataset)

    9 (đóng bao)
  • [1] 351 35

    0 (tăng cường)
  • [1] 351 35

    1 (Xếp chồng)

Trong post này, trước hết tôi sẽ giới thiệu 3 kỹ thuật

## [1] 351  35

2 kể trên, sau đó là cách sử dụng thư viện

## [1] 351  35

3 và

## [1] 351  35

4 trong

## [1] 351  35

5 để triển khai chúng và áp dụng vào bài toán cụ thể.

Để cài đặt 2 thư viện này ta dùng lệnh

## [1] 351  35

6 với tham số đầu vào là tên thư viện muốn cài:

install.packages("caret")
intall.packages("caretEnsemble")

Đôi nét về thư viện caret: Ngôn ngữ

## [1] 351  35

5 khác biệt bởi số lượng rất lớn các

## [1] 351  35

8 chuyên dụng khác nhau cho phép xây dựng các mô hình dự đoán. Tuy nhiên đây cũng chính là khuyết điểm, khi có quá nhiều các gói triển khai

## [1] 351  35

9 dưới dạng các hàm

str(dataset)

0 đòi hỏi ta cần nhiều thời gian để tìm kiếm và nắm vững những đặc trưng về cú pháp cũng như cách sử dụng của từng hàm. Để giải quyết vấn đề này Max Kuhn đã xây dựng một giao diện phổ quát cho phép truy cập và sử dụng các

## [1] 351  35

9 từ cái gói khác nhau được triển khai trên ngôn ngữ

## [1] 351  35

5. Kết quả chính là package caret (viết tắt từ Classification and Regression Training), được công bố đầu tiên vào năm 2008 tại tạp chí phần mềm thống kê Journal of Statistical Software. Gói

## [1] 351  35

3 giúp chúng ta tiết kiệm được rất nhiều thời gian trong quá trình phân tích và xây dựng các

str(dataset)

4. Dưới đây là một số đặc trưng cơ bản của gói

## [1] 351  35

3:

  • Sử dụng cú pháp lệnh chung (phổ quát) không phụ thuộc vào cú pháp của các hàm gốc (các hàm triển khai các machine learningalgorithms)
  • Tự động tìm kiếm những giá trị tối ưu cho các

    Load the dataset

    library(mlbench) data(Ionosphere) dataset <- Ionosphere

    7 của mô hình (

    str(dataset)

    7)
  • Có khả năng tổ chức tính toán song song để tăng đáng kể tốc độ quá trình huấn luyện mô hình
  • Sử dụng

    str(dataset)

    8 cho phép giải quyết hầu hết các nhiệm vụ trong

    Load the dataset

    library(mlbench) data(Ionosphere) dataset <- Ionosphere

    4 từ tiền xủ lý cho đến đánh giá mô hình

1. Phân biệt 3 kỹ thuật boosting, baggig và statcking

Bagging xây dựng một lượng lớn các

str(dataset)

4 (thường là

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

  1. trên những

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

2 khác nhau từ tập

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

3 một cách song song nhằm đưa ra dự đoán tốt hơn.

Boosting xây dựng một lượng lớn các

str(dataset)

4 (thường là

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

1). Tuy nhiên quá trình huấn luyện trong phương pháp này diễn ra tuần tự theo chuỗi (sequence). Trong chuỗi này mỗi

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

6 sau sẽ học cách sửa những

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

7 của

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

6 trước (hay nói cách khác là dữ liệu mà

## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

6 trước dự đoán sai).

Stacking xây dựng một số

str(dataset)

4 (thường là

head(dataset, 5)

  1. và một mô hình

head(dataset, 5)

2, mô hình này sẽ học cách kết hợp kết quả dự báo của một số mô hình một cách tốt nhất.

2. Thực hành

Nạp các thư viện cần dùng vào phiên làm việc của

## [1] 351  35

5 để thực hành:

library(caret)
library(caretEnsemble) 

Kiểm tra số lượng các machine learning algorithms trong R được hỗ trợ bởi

## [1] 351  35

3:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)
## [1] 238

2.1 Dữ liệu để thực hành

Để thực hành tôi lựa chọn bài toán phân loại nhị phân (

head(dataset, 5)

  1. với tập dữ liệu

head(dataset, 5)

6. Trong bài toán này chúng ta cần dự đoán xem cao tần trả vể từ năng lượng của các hạt trong khí quyển có cấu trúc hay là không. Để tìm hiểu thêm về bài toán này các bạn có thể đọc ở đây.

Load dữ liệu từ gói

head(dataset, 5)

7:

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

2.1.1 Thống kê mô tả (descriptive statistics)

Kiểm tra kích thước tập dữ liệu:

dim(dataset)
## [1] 351  35

Kiểm tra cấu trúc của tập dữ liệu:

str(dataset)
## 'data.frame':    351 obs. of  35 variables:
##  $ V1   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
##  $ V2   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3   : num  0.995 1 1 1 1 ...
##  $ V4   : num  -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...
##  $ V5   : num  0.852 0.93 1 1 0.941 ...
##  $ V6   : num  0.02306 -0.36156 0.00485 1 0.06531 ...
##  $ V7   : num  0.834 -0.109 1 0.712 0.921 ...
##  $ V8   : num  -0.377 -0.936 -0.121 -1 -0.233 ...
##  $ V9   : num  1 1 0.89 0 0.772 ...
##  $ V10  : num  0.0376 -0.0455 0.012 0 -0.164 ...
##  $ V11  : num  0.852 0.509 0.731 0 0.528 ...
##  $ V12  : num  -0.1776 -0.6774 0.0535 0 -0.2028 ...
##  $ V13  : num  0.598 0.344 0.854 0 0.564 ...
##  $ V14  : num  -0.44945 -0.69707 0.00827 0 -0.00712 ...
##  $ V15  : num  0.605 -0.517 0.546 -1 0.344 ...
##  $ V16  : num  -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...
##  $ V17  : num  0.844 0.055 0.838 0.541 0.529 ...
##  $ V18  : num  -0.385 -0.622 -0.136 -0.393 -0.218 ...
##  $ V19  : num  0.582 0.331 0.755 -1 0.451 ...
##  $ V20  : num  -0.3219 -1 -0.0854 -0.5447 -0.1781 ...
##  $ V21  : num  0.5697 -0.1315 0.7089 -0.6997 0.0598 ...
##  $ V22  : num  -0.297 -0.453 -0.275 1 -0.356 ...
##  $ V23  : num  0.3695 -0.1806 0.4339 0 0.0231 ...
##  $ V24  : num  -0.474 -0.357 -0.121 0 -0.529 ...
##  $ V25  : num  0.5681 -0.2033 0.5753 1 0.0329 ...
##  $ V26  : num  -0.512 -0.266 -0.402 0.907 -0.652 ...
##  $ V27  : num  0.411 -0.205 0.59 0.516 0.133 ...
##  $ V28  : num  -0.462 -0.184 -0.221 1 -0.532 ...
##  $ V29  : num  0.2127 -0.1904 0.431 1 0.0243 ...
##  $ V30  : num  -0.341 -0.116 -0.174 -0.201 -0.622 ...
##  $ V31  : num  0.4227 -0.1663 0.6044 0.2568 -0.0571 ...
##  $ V32  : num  -0.5449 -0.0629 -0.2418 1 -0.5957 ...
##  $ V33  : num  0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...
##  $ V34  : num  -0.453 -0.0245 -0.3824 1 -0.657 ...
##  $ Class: Factor w/ 2 levels "bad","good": 2 1 2 1 2 1 2 1 2 1 ...

Hiển thị

head(dataset, 5)

8 hàng dữ liệu đầu tiên:

head(dataset, 5)
library(caret)
library(caretEnsemble) 

0

Kiểm tra

head(dataset, 5)

9 trong dữ liệu:

library(caret)
library(caretEnsemble) 

1

library(caret)
library(caretEnsemble) 

2

Kiểm tra phân phối của từng thuộc tính:

library(caret)
library(caretEnsemble) 

3

library(caret)
library(caretEnsemble) 

4

Thuộc tính thứ

library(caret)
library(caretEnsemble) 

00 chỉ có 1 giá trị là

library(caret)
library(caretEnsemble) 

01 nên có thể loại bỏ:

library(caret)
library(caretEnsemble) 

5

Chuyển thuộc tính

library(caret)
library(caretEnsemble) 

02 từ

library(caret)
library(caretEnsemble) 

03 sang

library(caret)
library(caretEnsemble) 

04:

library(caret)
library(caretEnsemble) 

6

Kiểm tra mức độ tương quan (

library(caret)
library(caretEnsemble) 

  1. giữa các thuộc tính (do số lượng thuộc tính lớn nên tôi chỉ hiển thị tương quan giữa 6 thuộc tính đầu làm mẫu):

library(caret)
library(caretEnsemble) 

7

library(caret)
library(caretEnsemble) 

8

2.1.2 Trực quan hóa dữ liệu (

library(caret)
library(caretEnsemble) 

06)

Do số lượng thuộc tính nhiều nên tôi chỉ thực hiện

library(caret)
library(caretEnsemble) 

06 đối 12 thuộc tính đầu của tập dữ liệu.

library(caret)
library(caretEnsemble) 

08 cho 12 thuộc tính đầu:

library(caret)
library(caretEnsemble) 

9

So sánh nén predictor và stac năm 2024
library(caret)
library(caretEnsemble) 

09 cho 12 thuộc tính đầu:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

0

So sánh nén predictor và stac năm 2024

Trong bước này nếu phát hiện trong các thuộc tính có nhiều giá trị ngoại lai (

library(caret)
library(caretEnsemble) 

  1. thì các bạn có thể đọc post trước của tôi về cách loại bỏ

library(caret)
library(caretEnsemble) 

10 trong dữ liệu cho

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

4 bằng các phương pháp thống kê tại đây.

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

library(caret)
library(caretEnsemble) 

13)

Xác định và Loại bỏ các thuộc tính tương quan với nhau cao (>0.75)

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

1

library(caret)
library(caretEnsemble) 

2

Ở đây không có các thuộc tính tương quan cao với nhau, tuy nhiên nếu có thì các bạn có thể loại bỏ chúng như sau:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

3

Chuẩn hóa giá trị của các thuộc tính (

library(caret)
library(caretEnsemble) 

  1. về khoảng

library(caret)
library(caretEnsemble) 

15:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

4

Vậy là dữ liệu của chúng ta đã sẵn sàng để

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

9 các thuật toán

## [1] 351  35

2 rồi.

2.2. Thuật toán Boosting

Trong phạm vi post này tôi sẽ test hai thuật toán

library(caret)
library(caretEnsemble) 

18 khá phổ biến là:

library(caret)
library(caretEnsemble) 

19 và

library(caret)
library(caretEnsemble) 

20

Dưới đây là ví dụ huấn luyện hai mô hình này trên

## [1] 351  35

5 với các tham số mặc định:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

5

So sánh kết quả hai mô hình:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

6

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

7

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

8

So sánh nén predictor và stac năm 2024

Từ kết quả so sánh ta thấy thuật toán

library(caret)
library(caretEnsemble) 

19 cho kết quả chính xác hơn so với

library(caret)
library(caretEnsemble) 

20 trong bài toán này (với độ chính xác là

library(caret)
library(caretEnsemble) 

24)

2.3 Thuật toán Bagging

Chúng ta cùng test hai thuật toán thuộc kỹ thuật

dim(dataset)

9 là:

library(caret)
library(caretEnsemble) 

26 và

library(caret)
library(caretEnsemble) 

27

Dưới đây là ví dụ huấn luyện hai mô hình này trên

## [1] 351  35

5 với các tham số mặc định:

carets <- getModelInfo()
carets.names <- names(carets)
length(carets.names)

9

So sánh kết quả hai mô hình:

## [1] 238

0

## [1] 238

1

## [1] 238

2

So sánh nén predictor và stac năm 2024

Từ kết quả so sánh ta thấy thuật toán

library(caret)
library(caretEnsemble) 

27 cho kết quả chính xác hơn so với

library(caret)
library(caretEnsemble) 

30 trong bài toán này (với độ chính xác là

library(caret)
library(caretEnsemble) 

31). Tuy nhiên cả hai thuật toán

dim(dataset)

9 đều có độ chính xác nhỏ hơn so với 2 thuật toán

## [1] 351  35

0 trước.

2.4. Thuật toán Stacking

Để kết hợp các mô hình

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

4 khác nhau trong

## [1] 351  35

5 chúng ta sử dụng thư viện caretEnsemble. Với danh sách các

library(caret)
library(caretEnsemble) 

36, hàm

library(caret)
library(caretEnsemble) 

37 của gói này có thể sự dụng để chỉ định mô hình bậc cao hơn, từ đó sẽ học cách tìm sự kết hợp tốt nhất những

library(caret)
library(caretEnsemble) 

38 với nhau.

Ở ví dụ này, tôi sẽ sử dụng 5

library(caret)
library(caretEnsemble) 

38 sau cho tập dữ liệu

library(caret)
library(caretEnsemble) 

40:

  • Linear Discriminate Analysis (

    library(caret) library(caretEnsemble)

    41)
  • Classification and Regression Trees (

    library(caret) library(caretEnsemble)

    30)
  • Logistic Regression (

    library(caret) library(caretEnsemble)

    43)
  • k-Nearest Neighbors (

    library(caret) library(caretEnsemble)

    44)
  • Support Vector Machine with a Radial Basis Kernel Function (

    library(caret) library(caretEnsemble)

    45)

Dưới đây là ví dụ huấn luyện 5 mô hình này trên

## [1] 351  35

5 với các tham số mặc định:

## [1] 238

3

So sánh kết quả các mô hình:

## [1] 238

4

## [1] 238

5

## [1] 238

6

So sánh nén predictor và stac năm 2024

Ta thấy trong các mô hình này thì

library(caret)
library(caretEnsemble) 

45 cho kết quả chính xác nhất (

library(caret)
library(caretEnsemble) 

48).

Giờ chúng ta hãy thử dùng kỹ thuật

library(caret)
library(caretEnsemble) 

49 để xem có thể cải thiện được độ chính xác không.

library(caret)
library(caretEnsemble) 

50: Khi các bạn muốn kết hợp các mô hình với nhau sử dụng kỹ thuật

library(caret)
library(caretEnsemble) 

49, thì các bạn cần kiểm chứng rằng kết quả dự báo từ các mô hình này tương quan với nhau thấp. Nếu kết quả dự báo của các

library(caret)
library(caretEnsemble) 

38 tương quan cao với nhau (> 0.75) thì có nghĩa là chúng sẽ cho kết quả dự báo tương tự nhau, điều này sẽ làm giảm hiệu quả khi ta kết hợp các mô hình này với nhau.

Kiểm tra độ tương quan giữa các

library(caret)
library(caretEnsemble) 

38:

## [1] 238

7

## [1] 238

8

## [1] 238

9

So sánh nén predictor và stac năm 2024

Nhìn vào kết quả ta có thể thấy các

library(caret)
library(caretEnsemble) 

54 cho kết quả dự báo tương quan với nhau thấp theo từng cặp. Cặp tương quan với nhau nhất là

library(caret)
library(caretEnsemble) 

45 và

library(caret)
library(caretEnsemble) 

44 với độ tương quan

library(caret)
library(caretEnsemble) 

57, cũng vẫn nhỏ hơn mức quy địn là cao (

library(caret)
library(caretEnsemble) 

58).

Nào chúng ta hãy thử kết hợp

library(caret)
library(caretEnsemble) 

59 của các

library(caret)
library(caretEnsemble) 

38 sử dụng mô hình

library(caret)
library(caretEnsemble) 

61:

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

0

# Load the dataset
library(mlbench)
data(Ionosphere)
dataset <- Ionosphere

1

Độ chính xác cải thiện lên

library(caret)
library(caretEnsemble) 

62 so với chỉ sử dụng

library(caret)
library(caretEnsemble) 

63 là

library(caret)
library(caretEnsemble) 

48, tuy nhiên cũng chưa có độ chênh lệnh nhiều.