Trong nội dung bài viết này, ta đã điểm qua một số thuật toán Machine learning hay được sử dụng trong các hệ thống hiện đại chuyên để xử trí Big Data. Các thuật toán này hướng về độ chính xác dự đoán và tối ưu hoá khả năng giám sát của khối 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 tự tạo (Artificial Neural Networks) khai thác khả năng giám sát ngày càng thấp từ những chip cách xử lý hiện đại.
Phương pháp này hướng đến việc xây dựng nhiều hơn nữa các mạng nơ-ron phức tạp cũng như giải quyết bài toán semi-supervised bởi tập dữ liệu to con thường được gán nhãn ko đầy đủ.
Các thuật toán deep learning phổ biến:
DeepBoltzmann Machine (DBM)Deep Belief Networks (DBN)Convolutional Neural Network (CNN)Stacked Auto-Encoders

Dimensionality Reduction
Tương tự như cách thức clustering, bề ngoài của phương thức giảm số chiều trực thuộc tính (dimensionality reduction) cũng dựa trên đặc điểm vốn bao gồm của dữ liệu để rút gọn, tổng thích hợp lại thành tập tài liệu mới có tin tức ít hơn không ít nhưng vẫn đảm bảo an toàn mô tả trọn vẹn tập tài liệu ban đầu.
Phương pháp này thường xuyên được áp dụng vào Big Data, do con số dữ liệu quá to và giới hạn đo lường của hệ thống hiện tại, ta rất có thể rút gọn gàng tập dữ liệu lúc đầu để rất có thể đáp ứng được khả năng đo lường và thống kê nhưng vẫn giữ lại được độ chính xác dự đoán bao gồm thể đồng ý được. Một trong những thuật toándimensionality reduction:
Principal Component Analysis (PCA)Principal Component Regression(PCR)Partial Least Squares Regression (PLSR)Sammon MappingMultidimensional 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à quy mô được tổng hợp từ nhiều quy mô con (weaker model) được giảng dạy độc lập. Công dụng dự đoán sau cuối dựa trên công dụng “bỏ phiếu” của từng mô hình con kia cho công dụng đầu ra.
Các thuật toán cách tân cho phương thức này thường nhắm đến cách làm núm nào để đưa mẫu huấn luyện tác dụng cho từng mô hình con cùng làm cầm cố nào để tuyển lựa các mô hình con làm sao để cho chúng phối hợp lại rất có thể tạo ra tác dụng dự đoán giỏi nhất. Một số kĩ thuật esemble:
BoostingBootstrapped Aggregation (Bagging)Ada
Boost
Stacked Generalization (blending)Gradient Boosting Machines (GBM)Gradient Boosted Regression Trees (GBRT)Random Forest

Trong machine learning mãi sau định lý “không bao gồm bữa trưa miễn phí” (No miễn phí lunch theorem), tức là không sống thọ một thuật toán mà luôn tốt cho mọi ứng dụng và gần như tập dữ liệu, vì những thuật toán machiner learning thường dựa trên một tập những tham số (hyperparameters) hoặc một mang thiết khăng khăng nào kia về phân bổ dữ liệu. Vì vậy để tìm được những thuật toán cân xứng cho tập dataset của mình có thể các các bạn sẽ cần nhiều thời gian để demo các thuật toán khác nhau. Rồi từ đó triển khai hiệu chỉnh những 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 câu hỏi combine những mô hình khác nhau xuất phát từ một suy xét hợp lý là: các mô hình khác nhau có công dụng khác nhau, hoàn toàn có thể thực hiện cực tốt các loại quá trình khác nhau (subtasks), khi phối kết hợp các tế bào hình này cùng nhau một cách hợp lý thì sẽ tạo nên thành một mô hình kết hợp (combined model) mạnh mẽ có khả năng nâng cao hiệu suât tổng thể và toàn diện (overall performance) so với bài toán chỉ dùng những mô hình một cách 1-1 lẻ.
Các cách thức Ensemble Learning được phân thành 3 một số loại sau đây:
Bagging (đóng bao)Boosting (tăng cường)Stacking (Xếp chồng)Trong post này, trước tiên tôi sẽ reviews 3 kỹ thuật ensemble learning nhắc trên, tiếp đến là cách sử dụng thư viện caret với caret
Ensemble trong R để triển khai chúng và áp dụng vào câu hỏi cụ thể.
Để setup 2 tủ sách này ta cần sử dụng lệnh install.packages(.) với tham số đầu vào là tên thư viện ao ước cài:
install.packages("caret")intall.packages("caret
Ensemble")Đôi nét về tủ sách caret: Ngôn ngữ R khác biệt bởi số lượng rất lớn các packages siêng dụng khác nhau mang đến phép xây dựng các tế bào hình dự đoán. Mặc dù đây cũng chính là khuyết điểm, lúc có quá nhiều các gói xúc tiến 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 mang lại phép truy cập và sử dụng các machine learning algorithms từ dòng gói không giống nhau được triển khai bên trên ngôn ngữ R. Kết quả chính là package caret (viết tắt từ Classification & 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 tương đối nhiều thời gian trong quy trình phân tích với xây dựng những 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 thông thường (phổ quát) ko 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 tế bào hình (tuning parameters)
Có khả năng tổ chức tính toán tuy vậy 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 tới đánh giá bán mô hình
1. Biệt lập 3 nghệ 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 tuy nhiên song nhằm mục đích đưa ra dự đoán giỏi hơn.
Boosting xây dựng một lượng lớn các models (thường là cùng loại). Mặc dù quá trình đào tạo và giảng dạy trong phương thức này diễn ra tuần từ theo chuỗi (sequence). Vào chuỗi này mỗi model sau sẽ học cách sửa những errors của mã sản phẩm trước (hay nói theo một 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, tế bào 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 những thư viện đề nghị dùng vào phiên thao tác của R để thực hành:
library(caret)library(caret
Ensemble) Kiểm tra con số các machine learning algorithms vào R được cung cấp bởi caret:
carets ## <1> 2382.1 Dữ liệu để thực hành
Để thực hành thực tế tôi lựa chọn bài toán phân nhiều loại nhị phân (binary classification) với tập dữ liệu ionoshene. Trong việc này bọn họ cần dự kiến xem cao tần trả vể từ năng lượng của các hạt vào khí quyển có cấu trúc hay là không. Để xem thêm về câu hỏi này các chúng ta có thể đọc làm việc đây.
Load dữ liệu từ gói mlbench:
# Load the datasetlibrary(mlbench)data(Ionosphere)dataset 2.1.1 Thống kê diễn tả (descriptive statistics)
Kiểm tra size tập dữ liệu:
dim(dataset)## <1> 351 35Kiểm tra cấu tạo của tập dữ liệu:
Kiểm tra missing values vào dữ liệu:sum(is.na(dataset))## <1> 0Kiểm tra triển lẵm của từng nằm trong 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 gửi thuộc tính V1 từ bỏ factor sang numeric:
dataset$V1 bình chọn mức độ đối sánh (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 trực thuộc tính đầu làm cho mẫu):
Do số lượng thuộc tính nhiều yêu cầu tôi chỉ tiến hành data visualization đối 12 trực thuộc tính đầu của tập dữ liệu.
Histogram mang lại 12 trực thuộc tính đầu:
par(mfrow=c(3,4))for(i in 1:12) hist(dataset<,i>, main=names(dataset), breaks = 30)
Boxplot mang đến 12 trực thuộc tính đầu:
boxplot(dataset<, 1:12>, col = "orange", main = "Features Boxplot")

Trong đoạn này nếu phạt hiện trong số thuộc tính có không ít giá trị ngoại lai (outliers) thì các chúng ta có thể đọc post trước của tôi về cách đào thải 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à đào thải các ở trong tính tương quan với nhau cao (>0.75)
# Tìm những thuộc tính tương quan với nhau caocor_coefficient ## <1> 0Ở đây không tồn tại các thuộc tính đối sánh tương quan cao cùng với nhau, tuy nhiên nếu bao gồm thì các bạn có thể loại vứt chúng như sau:
dataset
Features chuẩn hóa giá bán trị của những thuộc tính (data normalization) về khoảng tầm <0,1>:
pre
Proc
Values Vậy là tài liệu của bọn họ đã chuẩn bị để 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ẽ thử nghiệm hai thuật toán boosting khá thịnh hành là: C5.0 và Stochastic Gradient Boosting
Dưới trên đây là ví dụ huấn luyện nhì mô hình này trên R với những tham số mặc định:
seed So sánh kết quả hai tế bào hình:

Từ công dụng so sánh ta thấy thuật toán C5.0 cho kết quả chính xác hơn so cùng với Stochastic Gradient Boosting trong vấn đề này (với độ chính xác là 94.68%)
2.3 Thuật toán Bagging
Chúng ta cùng chạy thử hai thuật toán thuộc chuyên môn Bagging là: Bagged CART cùng Random Forest
Dưới phía trên là ví dụ huấn luyện nhì mô hình này trên R với những tham số mặc định:
control So sánh công dụng hai tế bào hình:

Từ tác dụng so sánh ta thấy thuật toán Random Forest mang đến kết quả chính xác rộng so cùng với CART trong bài toán này (với độ chính xác là 93.44%). Tuy vậy cả nhị thuật toán Bagging đều có độ bao gồm xác nhỏ hơn so với 2 thuật toán Boosting trước.
2.4. Thuật toán Stacking
Để phối hợp các mô hình machine learning khác biệt trong R bọn họ sử dụng tủ sách 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 tế bào 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 mang lại 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 trên đây là ví dụ huấn luyện 5 mô hình này bên trên R với những tham số mang định:
control So sánh hiệu quả các mô hình:
results ## ## Call:## summary.resamples(object = results)## ## Models: lda, rpart, glm, knn, svm

Ta thấy trong các quy mô này thì SVM mang đến kết quả đúng mực nhất (94.78%).
Giờ bọn họ hãy thử cần sử dụng kỹ thuật stacking nhằm xem tất cả thể nâng cao được độ đúng chuẩn 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 chuyên môn stacking, thì chúng ta cần kiểm chứng rằng kết quả dự báo từ các tế bào hình này đối sánh 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ẽ đến kết quả dự báo tương tự nhau, điều này sẽ làm giảm hiệu quả lúc ta kết hợp các mô hình này với nhau.
Kiểm tra độ đối sánh 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 mang lại 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).
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
Radial## ## Ensemble results:## Generalized Linear model ## ## 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:## ## Accuracy Kappa ## 0.9544285 0.9003902Độ chính xác cải thiện lên 95.44% so với chỉ sử dụng SVM model là 94.78%, tuy nhiên cũng chưa xuất hiện độ chênh lệnh nhiều.
Xem thêm: Mùi tàu chữa sỏi thận - top 10 bài thuốc từ lá trị dứt điểm
Tiếp theo tôi thử thử kết hợp predictions của những sub-models sử dụng quy mô 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 mã sản phẩm using the largest value.## The final value used for the mã sản phẩm was mtry = 2.Độ chính xác cũng cải thiện rộng so với chỉ dùng svm mã sản phẩm (96.23%).