I. Khái niệm

"Đoàn kết là sức mạnh". Tôi không biết câu này xuất hiện ở đâu khi nào nhưng nó lại khái quát ý tưởng của phương thức Ensemble trong Machine Learning.

Bạn đang xem: Sử dụng thuật toán Ensemble để kết hợp các mô hình học máy

Lấy ví dụ thế này, bạn có 1 model nhưng đầu ra của model đó không tốt nên bạn thử các model khác. Sau khi tìm được model ưng ý và "có lẽ chính xác", bạn lại phải chỉnh chỉnh sửa sửa từ thuật toán đến hyperparameter để mô hình đạt độ chính xác cao nhất. Tất cả những việc kể trên sẽ ngốn của bạn một đống thời gian bởi bạn phải chạy từng model một, thế nên để nhanh hơn bạn kết hợp những model "học yếu" này lại để tạo ra một model "học mạnh" hơn, không những thế kết quả thu được cũng tốt hơn so với từng model một.

Để hiểu sâu thêm, chúng ta sẽ làm rõ khái niệm mô hình "yếu" và "mạnh".

Khi làm các bài toán về phân loại (classification) hay hồi quy (regression), chắc ai cũng biết phần quan trọng nhất là lựa chọn model. Việc chọn này phụ thuộc nhiều yếu tố: số lượng data, đặc điểm data (số chiều, phân phối), v.v...Từ đó ta sẽ có tương quan giữa data và model (bias-variance tradeoff) aka (mối quan hệ đánh đổi giữa bias và variance). Ok, tôi sẽ không đi chi tiết khái niệm này bởi nó cũng ngốn kha khá thời gian, các bạn có thể tham khảo ở đây (https://forum.machinelearningcoban.com/t/moi-quan-he-danh-doi-giua-bias-va-variance/4173).

Nói chung là không có một model nào hoàn hảo khi đi riêng lẻ bởi quy tắc tradeoff trên, các model này có điểm yếu rõ rệt như có cái bị high bias (model dự đoán sai so với giá trị thực tế rất nhiều) hay có cái bị high variance (đoán đúng trên bộ dữ liệu train nhưng tạch với bộ dữ liệu chưa gặp bao giờ), nên chúng đều bị gọi là "yếu". Vậy tại sao ta không kết hợp các model "yếu" để tạo ra một model "mạnh" đúng với câu " 3 cây chụm lại nên hòn núi cao" để giảm bias / variance.

II. Kết hợp các model "yếu" như thế lào ???

Ok, tóm lại là tôi có một đống model "yếu" và tôi muốn kết hợp thành một model "mạnh", hiệu quả hơn. Vậy tôi phải follow các bước sau:

First, chọn model sẽ làm base model cho cả thuật toán. Thường thì một model sẽ được chọn ra (ví dụ là Decision Tree), ta lại cần nhiều mô hình "yếu" nên ta phải tăng số lượng model cần dùng lên => ta có n model Decision Tree Bagging: Xây dựng một lượng lớn các model (thường là cùng loại) trên những subsamples khác nhau từ tập training dataset (random sample trong 1 dataset để tạo 1 dataset mới). Những model này sẽ được train độc lập và song song với nhau nhưng đầu ra của chúng sẽ được trung bình cộng để cho ra kết quả cuối cùng.Boosting: Xây dựng một lượng lớn các model (thường là cùng loại). Mỗi model sau sẽ học cách sửa những errors của model trước (dữ liệu mà model trước dự đoán sai) -> tạo thành một chuỗi các model mà model sau sẽ tốt hơn model trước bởi trọng số được update qua mỗi model (cụ thể ở đây là trọng số của những dữ liệu dự đoán đúng sẽ không đổi, còn trọng số của những dữ liệu dự đoán sai sẽ được tăng thêm) . Chúng ta sẽ lấy kết quả của model cuối cùng trong chuỗi model này làm kết quả trả về (vì model sau sẽ tốt hơn model trước nên tương tự kết quả sau cũng sẽ tốt hơn kết quả trước).Stacking: Xây dựng một số model (thường là khác loại) và một meta model (supervisor model), train những model này độc lập, sau đó meta model 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.

Trong 3 biến thể trên thì Bagging giúp ensemble model giảm variance. Còn Boosting và Stacking tập trung vào việc giảm bias (cũng giảm cả variance).

Tiếp theo đó, tôi sẽ giới thiệu chi tiết hơn về Bagging, còn Boosting và Stacking thì trong phần tiếp theo

*

Tương ứng với L bộ dữ liệu là L model "yếu".

w1(.),w2(.),...,w
L(.)\begin{aligned}w_1(.), w_2(.), ..., w_L(.)\end{aligned}w1​(.),w2​(.),...,w
L​(.)​

Kết hợp các model này lại, ta được một model mới mạnh hơn. Với những vấn đề khác nhau, như regression, đầu ra của các model "yếu" sẽ được trung bình cộng, kết quả này sẽ là đầu ra của model "mạnh". Còn với classification, class đầu ra của mỗi một model "yếu" sẽ được coi là 1 vote và class mà nhận được số vote nhiều nhất sẽ là đầu ra của model "mạnh" (cách này gọi là hard-voting). Trong trường hợp model "yếu" dự đoán xác suất của tất cả class thì ta sẽ tính trung bình cộng của xác suất của từng class rồi lấy xác suất có giá trị lớn nhất (cách này gọi là soft-voting).

*

Cuối cùng, để chốt phần lý thuyết và sang phần code, tôi sẽ chỉ ra một trong những lợi ích mà bagging mang lại, đó là tính song song. Như hình dưới, bạn sẽ thấy phần core của bagging đều là tiến trình song song nên nếu bạn có con máy khỏe, bạn có thể train từng model song song với nhau và cuối cùng tổng hợp đầu ra của các model này lại.

*

Code of Bagging

Thật may cho chúng ta, thư viện sklearn đã hỗ trợ mọi thứ đến tận răng

*

III. End

Tôi sẽ kết thúc phần 1 bài viết ở đây, phần 2 sẽ tập trung vào boosting và stacking. Nếu có gì sai sót thì hãy góp ý nhé. Bài viết trên dựa trên ý hiểu của tôi và có một phần dịch lại sau khi tham khảo một cơ số bài viết trên medium, blog, v.v... Nếu bạn muốn có cái nhìn tổng quan hơn thì nên tham khảo thêm các link dưới đây.

Source

https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205

Trong bài viết này, ta sẽ điểm qua một số thuật toán Machine learning thường được sử dụng trong các hệ thống hiện đại chuyên để xử lý Big Data. Các thuật toán này nhắm đến độ chính xác dự đoán và tối ưu hoá khả năng tính toán của hệ thống hiện tại.Bạn đang xem: Sử dụng thuật toán Ensemble để kết hợp nhiều mô hình dự đoán


*

Deep Learning

Modern machine learning
Deep learning là phương pháp nâng cao của mạng nơ-ron nhân tạo (Artificial Neural Networks) khai thác khả năng tính toán ngày càng rẻ từ các chip xử lý hiện đại.

Phương pháp này nhắm tới việc xây dựng nhiều hơn các mạng nơ-ron phức tạp cũng như giải quyết bài toán semi-supervised do tập dữ liệu khổng lồ thường được gán nhãn không đầy đủ.

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

Deep
Boltzmann Machine (DBM)Deep Belief Networks (DBN)Convolutional Neural Network (CNN)Stacked Auto-Encoders


*

Dimensionality Reduction

Tương tự như phương pháp clustering, cơ chế của phương pháp giảm số chiều thuộc tính (dimensionality reduction) cũng dựa trên tính chất vốn có của dữ liệu để rút gọn, tổng hợp lại thành tập dữ liệu mới có thông tin ít hơn rất nhiều nhưng vẫn đảm bảo mô tả toàn vẹn tập dữ liệu ban đầu.

Phương pháp này thường được sử dụng vào Big Data, do số lượng dữ liệu quá lớn và giới hạn tính toán của hệ thống hiện tại, ta có thể rút gọn tập dữ liệu ban đầu để có thể đáp ứng được khả năng tính toán nhưng vẫn giữ được độ chính xác dự đoán có thể chấp nhận được. Một số thuật toándimensionality reduction:

Principal Component Analysis (PCA)Principal Component Regression(PCR)Partial Least Squares Regression (PLSR)Sammon Mapping
Multidimensional Scaling (MDS)Projection Pursuit
Linear Discriminant Analysis (LDA)Mixture
Discriminant Analysis (MDA)Quadratic
Discriminant Analysis (QDA)Flexible
Discriminant Analysis (FDA)


*

Ensemble

Phương pháp ensemble là mô hình được tổng hợp từ nhiều mô hình con (weaker model) được huấn luyện độc lập. Kết quả dự đoán cuối cùng dựa trên kết quả “bỏ phiếu” của từng mô hình con đó cho kết quả đầu ra.

Các thuật toán cải tiến cho phương pháp này thường nhắm tới cách làm thế nào để lấy mẫu huấn luyện hiệu quả cho từng mô hình con và làm thế nào để lựa chọn các mô hình con sao cho chúng kết hợp lại có thể tạo ra kết quả dự đoán tốt nhất. Một số kĩ thuật esemble:

Boosting
Bootstrapped Aggregation (Bagging)Ada
Boost
Stacked Generalization (blending)Gradient Boosting Machines (GBM)Gradient Boosted Regression Trees (GBRT)Random Forest


*

The 40 data science techniques


Trong machine learning tồn tại định lý “không có bữa trưa miễn phí” (No free lunch theorem), 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 machiner learning thường dựa trên một tập các tham số (hyperparameters) 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 dataset của mình có thể các bạn sẽ cần nhiều thời gian để test các thuật toán khác nhau. Rồi từ đó thực hiện hiệu chỉnh các tham số (tuning hyperparameters) 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 dataset của bạn là kết hợp (combine) một số mô hình với nhau. Phương pháp này gọi là esemble learning. Ý tưởng của việc combine 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 (subtasks), 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 (combined model) mạnh có khả năng cải thiện hiệu suât tổng thể (overall performance) 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 Ensemble Learning được chia thành 3 loại sau đây:

Bagging (đóng bao)Boosting (tăng cường)Stacking (Xếp chồng)

Trong post này, trước hết tôi sẽ giới thiệu 3 kỹ thuật ensemble learning kể trên, sau đó là cách sử dụng thư viện caret và caret
Ensemble trong R để 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 install.packages(.) với tham số đầu vào là tên thư viện muốn cài:

install.packages("caret")intall.packages("caret
Ensemble")Đôi nét về thư viện caret: Ngôn ngữ R khác biệt bởi số lượng rất lớn các packages 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 machine learning algorithms dưới dạng cáchàm rải rác đò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 machine learning algorithms từ cái gói khác nhau được triển khai trên ngôn ngữ R. 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 caret 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 models. Dưới đây là một sốđặc trưng cơ bản của gói caret:

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 hyperparameters của mô hình (tuning parameters)

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 Caret cho phép giải quyết hầu hết các nhiệm vụ trong machine learning 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 models (thường là cùng loại) trên những subsamples khác nhau từ tập training dataset 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 models (thường là cùng loại). 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 model sau sẽ học cách sửa những errors của model trước (hay nói cách khác là dữ liệu mà model trước dự đoán sai).


*

Nguồn ảnh

Stacking xây dựng một số models (thường là khác loại) và một mô hình supervisor model, 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.


Nguồn ảnh

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 R để thực hành:

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

carets ## 2382.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 (binary classification) với tập dữ liệu ionoshene. 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 mlbench:

# Load the datasetlibrary(mlbench)data(Ionosphere)dataset 2.1.1 Thống kê mô tả (descriptive statistics)

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

dim(dataset)## 351 35Kiểm tra cấu trúc của tập dữ liệu:

Kiểm tra missing values trong dữ liệu:

sum(is.na(dataset))## 0Kiểm tra phân phối của từng thuộc tính:

summary(dataset)## V1 V2 V3 V4 V5 ## 0: 38 0:351 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1:313 1st Qu.: 0.4721 1st Qu.:-0.06474 1st Qu.: 0.4127 ## Median : 0.8711 Median : 0.01631 Median : 0.8092 ## Mean : 0.6413 Mean : 0.04437 Mean : 0.6011 ## 3rd Qu.: 1.0000 3rd Qu.: 0.19418 3rd Qu.: 1.0000 ## Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V6 V7 V8 V9 ## Min. :-1.0000 Min. :-1.0000 Min. :-1.00000 Min. :-1.00000 ## 1st Qu.:-0.0248 1st Qu.: 0.2113 1st Qu.:-0.05484 1st Qu.: 0.08711 ## Median : 0.0228 Median : 0.7287 Median : 0.01471 Median : 0.68421 ## Mean : 0.1159 Mean : 0.5501 Mean : 0.11936 Mean : 0.51185 ## 3rd Qu.: 0.3347 3rd Qu.: 0.9692 3rd Qu.: 0.44567 3rd Qu.: 0.95324 ## Max. : 1.0000 Max. : 1.0000 Max. : 1.00000 Max. : 1.00000 ## V10 V11 V12 V13 ## Min. :-1.00000 Min. :-1.00000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.04807 1st Qu.: 0.02112 1st Qu.:-0.06527 1st Qu.: 0.0000 ## Median : 0.01829 Median : 0.66798 Median : 0.02825 Median : 0.6441 ## Mean : 0.18135 Mean : 0.47618 Mean : 0.15504 Mean : 0.4008 ## 3rd Qu.: 0.53419 3rd Qu.: 0.95790 3rd Qu.: 0.48237 3rd Qu.: 0.9555 ## Max. : 1.00000 Max. : 1.00000 Max. : 1.00000 Max. : 1.0000 ## V14 V15 V16 V17 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.07372 1st Qu.: 0.0000 1st Qu.:-0.08170 1st Qu.: 0.0000 ## Median : 0.03027 Median : 0.6019 Median : 0.00000 Median : 0.5909 ## Mean : 0.09341 Mean : 0.3442 Mean : 0.07113 Mean : 0.3819 ## 3rd Qu.: 0.37486 3rd Qu.: 0.9193 3rd Qu.: 0.30897 3rd Qu.: 0.9357 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V18 V19 V20 V21 ## Min. :-1.000000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.225690 1st Qu.: 0.0000 1st Qu.:-0.23467 1st Qu.: 0.0000 ## Median : 0.000000 Median : 0.5762 Median : 0.00000 Median : 0.4991 ## Mean :-0.003617 Mean : 0.3594 Mean :-0.02402 Mean : 0.3367 ## 3rd Qu.: 0.195285 3rd Qu.: 0.8993 3rd Qu.: 0.13437 3rd Qu.: 0.8949 ## Max. : 1.000000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V22 V23 V24 V25 ## Min. :-1.000000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.243870 1st Qu.: 0.0000 1st Qu.:-0.36689 1st Qu.: 0.0000 ## Median : 0.000000 Median : 0.5318 Median : 0.00000 Median : 0.5539 ## Mean : 0.008296 Mean : 0.3625 Mean :-0.05741 Mean : 0.3961 ## 3rd Qu.: 0.188760 3rd Qu.: 0.9112 3rd Qu.: 0.16463 3rd Qu.: 0.9052 ## Max. : 1.000000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V26 V27 V28 V29 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.33239 1st Qu.: 0.2864 1st Qu.:-0.44316 1st Qu.: 0.0000 ## Median :-0.01505 Median : 0.7082 Median :-0.01769 Median : 0.4966 ## Mean :-0.07119 Mean : 0.5416 Mean :-0.06954 Mean : 0.3784 ## 3rd Qu.: 0.15676 3rd Qu.: 0.9999 3rd Qu.: 0.15354 3rd Qu.: 0.8835 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V30 V31 V32 V33 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.000000 Min. :-1.0000 ## 1st Qu.:-0.23689 1st Qu.: 0.0000 1st Qu.:-0.242595 1st Qu.: 0.0000 ## Median : 0.00000 Median : 0.4428 Median : 0.000000 Median : 0.4096 ## Mean :-0.02791 Mean : 0.3525 Mean :-0.003794 Mean : 0.3494 ## 3rd Qu.: 0.15407 3rd Qu.: 0.8576 3rd Qu.: 0.200120 3rd Qu.: 0.8138 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.000000 Max. : 1.0000 ## V34 Class ## Min. :-1.00000 bad :126 ## 1st Qu.:-0.16535 good:225 ## Median : 0.00000 ## Mean : 0.01448 ## 3rd Qu.: 0.17166 ## Max. : 1.00000Thuộc tính thứ V2 chỉ có 1 giá trị là 0 nên có thể loại bỏ:

dataset$V2 Chuyển thuộc tính V1 từ factor sang numeric:

dataset$V1 Kiểm tra mức độ tương quan (correlation) 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):

Do số lượng thuộc tính nhiều nên tôi chỉ thực hiện data visualization đối 12 thuộc tính đầu của tập dữ liệu.

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

par(mfrow=c(3,4))for(i in 1:12) { hist(dataset, main=names(dataset), breaks = 30)}

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 (outliers) thì các bạn có thể đọc post trước của tôi về cách loại bỏ outliers trong dữ liệu cho machine learning bằng các phương pháp thống kê tại đây.

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

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

# Tìm các thuộc tính tương quan với nhau caocor_coefficient ## 0Ở đâ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:

dataset
Features Chuẩn hóa giá trị của các thuộc tính (data normalization) về khoảng :

pre
Proc
Values Vậy là dữ liệu của chúng ta đã sẵn sàng để test các thuật toán ensemble learning 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 boosting khá phổ biến là: C5.0 và Stochastic Gradient Boosting

Dưới đây là ví dụ huấn luyện hai mô hình này trên R với các tham số mặc định:

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


Từ kết quả so sánh ta thấy thuật toán C5.0 cho kết quả chính xác hơn so với Stochastic Gradient Boosting trong bài toán này (với độ chính xác là 94.68%)

2.3 Thuật toán Bagging

Chúng ta cùng test hai thuật toán thuộc kỹ thuật Bagging là: Bagged CART và Random Forest

Dưới đây là ví dụ huấn luyện hai mô hình này trên R với các tham số mặc định:

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


Từ kết quả so sánh ta thấy thuật toán Random Forest cho kết quả chính xác hơn so với CART trong bài toán này (với độ chính xác là 93.44%). Tuy nhiên cả hai thuật toán Bagging đều có độ chính xác nhỏ hơn so với 2 thuật toán Boosting trước.

2.4. Thuật toán Stacking

Để kết hợp các mô hình machine learning khác nhau trong R chúng ta sử dụng thư viện caret
Ensemble
. Với danh sách các caret models, hàm caret
Stack() 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 sub-models với nhau.

Ở ví dụ này, tôi sẽ sử dụng 5 sub-models sau cho tập dữ liệu ionosphere:

Linear Discriminate Analysis (LDA)

Classification and Regression Trees (CART)

Logistic Regression (GLM)

k-Nearest Neighbors (k
NN)

Support Vector Machine with a Radial Basis Kernel Function (SVM)

Dưới đây là ví dụ huấn luyện 5 mô hình này trên R với các tham số mặc định:

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

results ## ## Call:## summary.resamples(object = results)## ## Models: lda, rpart, glm, knn, svm

Ta thấy trong các mô hình này thì SVM cho kết quả chính xác nhất (94.78%).

Giờ chúng ta hãy thử dùng kỹ thuật stacking để xem có thể cải thiện được độ chính xác không.

Lưu ý: 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 stacking, 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 sub-models 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 sub-models:

model
Cor(results)## lda rpart glm knn svm

Nhìn vào kết quả ta có thể thấy các su-models 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à SVM và k
NN với độ tương quan 0.549, cũng vẫn nhỏ hơn mức quy địn là cao (>0.75).

Xem thêm: Pin không sạc được, đèn báo pin laptop dell nhấp nháy vàng, đèn sạc pin laptop dell nhấp nháy vàng

Nào chúng ta hãy thử kết hợp predictions của các sub-models sử dụng mô hình gml:

stack
Control ## A glm ensemble of 5 base models: lda, rpart, glm, knn, svm

Tiếp theo tôi thử thử kết hợp predictions của các sub-models sử dụng mô hình random forest:

set.seed(seed)stack.rf ## A rf ensemble of 5 base models: lda, rpart, glm, knn, svm
Radial## ## Ensemble results:## Random Forest ## ## 1053 samples## 5 predictor## 2 classes: 'bad', 'good' ## ## No pre-processing## Resampling: Cross-Validated (10 fold, repeated 3 times) ## Summary of sample sizes: 947, 947, 947, 948, 947, 949, ... ## Resampling results across tuning parameters:## ## mtry Accuracy Kappa ## 2 0.9623381 0.9177343## 3 0.9588700 0.9103978## 5 0.9569833 0.9064705## ## Accuracy was used to select the optimal model using the largest value.## The final value used for the model was mtry = 2.Độ chính xác cũng cải thiện hơn so với chỉ dùng svm model (96.23%).