You are on page 1of 57

CHƯƠNG 8:

MÔ HÌNH KẾT HỢP


Khoa Khoa học và Kỹ thuật thông tin
Bộ môn Khoa học dữ liệu

1
NỘI DUNG CHÍNH

1. Ensemble model.

2. Voting.

3. Bagging and Pasting.


4. Boosting.
5. Stacking.

2
Ensemble models

3
Ý tưởng chính
─ Nếu có một câu hỏi Q thuộc dạng khó được trả lời bởi một đám
đông gồm nhiều người khác nhau, sau đó tổng hợp các câu trả
lời lại, thì câu trả lời cho câu hỏi Q được tạo ra bởi đám đông
sẽ tốt hơn một chuyên gia  Wisdom of the crowd (tạm dịch là
trí tuệ đám đông).
─ Trong máy học, nếu ta kết hợp các mô hình học máy với nhau
một cách hợp lý thì nhiều khả năng sẽ được đạt được độ chính
xác cao hơn so với việc áp dụng các mô hình đơn lẻ
 Ensemble model (tạm dịch là Mô hình kết hợp)

4
Ví dụ

Câu hỏi trắc nghiệm A

3 đáp án:
A
B B
C

Đáp án cuối cùng: B


B

5
Yêu cầu đối với mô hình kết hợp

─ Các mô hình phải khắc phục điểm yếu cho nhau.

─ Các mô hình dự đoán cần độc lập nhau  huấn luyện các mô
hình bằng các thuật toán khác nhau.
─ Trong các cuộc thi hay share task thì các mô hình kết hợp thường
chiếm ưu thế.

6
Vì sao ensemble hiệu quả
─ Giá trị trung bình giới hạn bởi những gì mà nó ước lượng. Đó
được gọi là số trung bình (hay kỳ vọng) của quần thể.
─ Ví dụ: Đối với bài toán tung đồng xu thì giá trị trung bình có thể là
kết quả của n lần tung đồng xu với mặt ngửa.
─ Khi chúng ta lặp lại việc tung đồng xu này nhiều lần, thì giá trị
trung bình này sẽ hội tụ về đúng xác suất của mặt ngửa.
 Luật số lớn (Law of large number)

7
Luật số lớn
─ Một cách tổng quát, Luật số lớn chỉ ra rằng, khi ta chọn ngẫu
nhiên các giá trị trong một dãy các giá trị, kích thước mẫu thử
càng lớn thì các đặc trưng thống kê của mẫu thử càng "gần" với
các đặc trưng thống kê của quần thể.

8
Các chiến lược kết hợp mô hình

1. Voting classifier.

2. Bagging and Pasting.

3. Boosting.
4. Stacking.

9
Voting classifier

10
Voting classifier
─ Huấn luyện nhiều mô hình khác nhau trên cùng một tập dữ liệu.
─ Nhãn cuối cùng là nhãn có số lần dự đoán cao nhất (major voting)

11
Có 2 dạng
─ Hard voting: Chọn ra nhãn được “vote” (dự đoán) nhiều nhất
trong các mô hình.
─ Soft voting: Lấy ra xác suất dự đoán trên từng nhãn của từng mô
hình, sau đó kết hợp lại và lấy ra nhãn có xác suất dự đoán
cao nhất.
 Thường thì Soft voting cho kết quả cao hơn so với Hard voting
do nó có khả năng dự đoán được trọng số cho từng lớp.

12
Ví dụ
Hard voting Soft voting
Model 1 positive Model 1 [0.78, 0.56]

Model 1 negative Model 1 [0.23, 0.65]

Model 1 positive Model 1 [0.77, 0.51]

Ensemble [0.59, 0.57]


Ensemble positive
positive

13
Bộ dữ liệu make_moon
─ Load bộ dữ liệu make_moon:
1. from sklearn.model_selection import train_test_split
2. from sklearn.datasets import make_moons
3. X, y = make_moons(n_samples=500, noise=0.30,
random_state=42)

─ Chia dữ liệu ban đầu thành train/test theo tỉ lệ 8/2


1. X_train, X_test, y_train, y_test = train_test_split(X,
y, random_state=42, test_size=0.2)

14
Kết hợp các mô hình lại với nhau
─ Sử dụng lớp VotingClassifier trong thư viện sklearn.
1. from sklearn.ensemble import RandomForestClassifier
2. from sklearn.ensemble import VotingClassifier
3. from sklearn.linear_model import LogisticRegression
4. from sklearn.svm import SVC
5. log_clf = LogisticRegression()
6. rnd_clf = RandomForestClassifier()
7. svm_clf = SVC()
8. voting_clf = VotingClassifier( estimators=[('lr', log_clf), ('rf',
rnd_clf), ('svc', svm_clf)], voting='hard')
9. voting_clf.fit(X_train, y_train)

15
Dự đoán kết quả trên tập test
1. from sklearn.metrics import accuracy_score
2. for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
3. clf.fit(X_train, y_train)
4. y_pred = clf.predict(X_test)
5. print(clf.__class__.__name__, accuracy_score(y_test,
y_pred))

• LogisticRegression 0.864
• RandomForestClassifier 0.888
Hãy thử dùng soft voting để thực hiện và cho biết kết quả
• SVC 0.896
• VotingClassifier 0.904

16
Bagging and Pasting

17
Ý tưởng chính
─ Huấn luyện cùng một mô hình trên các tập dữ liệu con được rút ra
ngẫu nhiên từ tập dữ liệu gốc.
+ Nếu tập dữ liệu con được chọn có sự trùng lặp thì được gọi là bagging
(bootstrap aggregating).
+ Nếu tập dữ liệu con được chọn không có sự trùng lặp thì được gọi là pasting.
─ Bootstrap là một phương pháp tái chọn mẫu (resampling) và mô
phỏng dựa vào dữ liệu quan sát được để tìm ra phân bố cho một
quần thể.
+ Từ dữ liệu quan sát  khái quát hoá được thông tin về quần thể (population)

18
Dự đoán cho dữ liệu mới

Predictor sẽ kết hợp các giá trị dự đoán từ các mô hình lại với nhau, sau đó
sử dụng voting để tìm ra nhãn có số lần dự đoán cao nhất, hoặc lấy trung
bình (average) các giá trị dự đoán

19
Đặc điểm của bagging
─ Giảm được cả vấn đề high bias và high variance so với việc huấn
luyện mô hình đơn lẻ trên bộ dữ liệu.
+ Tăng độ chính xác (giảm high bias).
+ Giảm overfit (giảm high variance).
Tránh được cả 2 vấn đề underfiting và overfiting.
─ Có thể huấn luyện song song.

20
Minh hoạ Bagging với Decision tree
─ Sử dụng lớp BaggingClassifier trong sklearn
1. from sklearn.ensemble import BaggingClassifier
2. from sklearn.tree import DecisionTreeClassifier
3. bag_clf = BaggingClassifier(
DecisionTreeClassifier(random_state=42),
n_estimators=500,
max_samples=100, bootstrap=True, n_jobs=-1,
random_state=42 )
4. bag_clf.fit(X_train, y_train)
5. y_pred_bagging = bag_clf.predict(X_test)

21
Bài tập
─ Hãy so sánh độ chính xác khi dự đoán bằng mô hình Decision
Tree khi không sử dụng Bagging và có sử dụng Bagging trên bộ
dữ liệu make_moon.
+ So sánh bằng độ đo Accuracy.

22
Out-of-bag
─ Trong phương pháp bagging, một điểm dữ liệu có thể được chọn
làm mẫu huấn luyện nhiều lần, trong khi có các điểm dữ liệu khác
lại không được chọn lần nào. Các điểm chưa được chọn lần
nào được gọi là out-of-bag (OOB).
─ Với m điểm dữ liệu ban đầu, sẽ có khoảng dữ liệu được chọn,
còn lại khoảng 37% là oob.
─ Trong quá trình huấn luyện ta có thể sử dụng tập OOB này để
đánh giá mô hình mà không cần tách dữ liệu thành tập thẩm định
(validation set) riêng biệt.

23
Minh hoạ Bagging với OOB
1. from sklearn.ensemble import BaggingClassifier
2. from sklearn.tree import DecisionTreeClassifier
3. bag_clf_oob = BaggingClassifier(
4. DecisionTreeClassifier(random_state=42),
5. n_estimators=500,
6. max_samples=100, bootstrap=True,
7. n_jobs=-1, random_state=42,
8. oob_score=True
9. )
10.bag_clf_oob.fit(X_train, y_train)

24
Các phương pháp chọn ngẫu nhiên
─ Random patches: chọn phần tử vào tập huấn luyện dựa trên
điểm dữ liệu (instance) và thuộc tính (features)
─ Random subspace: chọn phần tử vào tập huấn luyện dựa trên
các thuộc tính (features).
─ Điều khiển việc chọn phần tử trong BaggingClassifier bằng 2
siêu tham số sau:
+ max_features: số thuộc tính được chọn từ tập dữ liệu để huấn
luyện mô hình cơ sở (mặc định là 1.0)
+ bootstrap_features: lấy thuộc tính có lặp lại hay không (mặc
định là False).
25
Random forest
─ Là một thuật toán học có giám
sát (supervised learning).
─ Là sự kết hợp giữa cây quyết
định và kỹ thuật bagging (hoặc
pasting).
─ Rừng ngẫu nhiên hoạt động
bằng cách đánh giá nhiều cây
quyết định ngẫu nhiên, và lấy
ra kết quả được đánh giá tốt
nhất trong số kết quả trả về.
26
Hiện thực Random forest
─ Sử dụng lớp RandomForestClassifier trong sklearn.
1. from sklearn.ensemble import ExtraTreesClassifier
2. ex_tree = ExtraTreesClassifier(
3. n_estimators=500,
4. max_leaf_nodes=16,
5. n_jobs=-1
6. )
7. ex_tree.fit(X_train, y_train)
8. y_pred_et = ex_tree.predict(X_test)

27
Các bước hoạt động của Random
Forest
─ For i from 1 to n
+ Chọn là tập dữ liệu con.
+ Xây dựng cây quyết định từ dữ
liệu
─ Tính toán kết quả của từ cây.
─ Biểu quyết và dự đoán kết
quả.

28
Extra tree
─ Mỗi một cây trong rừng được tạo ra từ dữ liệu được lấy ngẫu
nhiên từ tập dữ liệu ban đầu theo thuộc tính (features).
─ Để tăng cường tính ngẫu nhiên, việc phân chia theo thuộc tính sẽ
được thực hiện theo một ngưỡng ngẫu nhiên (random threshold)
thay vì theo ngưỡng tốt nhất giống cây quyết định.
Extra Tree thực hiện nhanh hơn so với Random forest vì tìm
ngưỡng phân chia tốt nhất sẽ mất thời gian hơn là lấy ngẫu
nhiên.
Hy sinh về độ chính xác (high bias cao), tuy nhiên sẽ giảm được
overfiting (high variance thấp).
29
Hiện thực Extra Tree
─ Sử dụng lớp ExtraTreesClassifier trong sklearn
1. from sklearn.ensemble import ExtraTreesClassifier
2. ex_tree = ExtraTreesClassifier(
3. n_estimators=100,
4. random_state=0
5. )
6. ex_tree.fit(X_train, y_train)

7. y_pred_et = ex_tree.predict(X_test)

30
Bài tập áp dụng
1. Sử dụng bộ dữ liệu Iris, hãy so sánh Random Forest và Extra
Tree theo 2 tiêu chí sau:
+ Độ chính xác (accuracy) trên tập test.
+ Thời gian thực hiện.
2. *Thực hiện các yêu cầu trên đối với bộ dữ liệu Titanic dataset.

31
Boosting

32
Ý tưởng của boosting
─ Boosting là một kỹ thuật học kết hợp có mục tiêu tạo ra một bộ phân
lớp mạnh từ một số các bộ phân lớp yếu hơn trên cùng bộ dữ liệu.
─ Ý tưởng:
+ Xây dựng mô hình baseline từ dữ liệu ban đầu.
+ Mô hình kế tiếp thêm vào sẽ cố gắng sửa lỗi cho mô hình trước đó.
+ Các mô hình được thêm vào cho đến khi số lượng mô hình đạt cực
đại, hoặc độ chính xác đã đạt hoàn hảo.
─ Boosting khác với Bagging ở chỗ kết hợp mô hình theo kiểu tuần tự
(sequential).

33
Bagging and Boosting

34
Các thuật toán Boosting
─ AdaBoost (Adaptive boosting, Freund & Schapire 1997).
─ SAMME (Zhu et al., 2006).
─ Gradient boosting (L. Breiman, 1997).

35
AdaBoost
─ Là một thuật toán học tăng cường theo kỹ thuật Boosting bằng
cách quan tâm đến các điểm dự đoán sai của mô hình trước đó
(predecessor) thông qua các trọng số (weight). Thuật toán sẽ
tăng trọng số cho các dữ liệu được dự đoán sai và giảm
trọng số cho dữ liệu được dự đoán đúng.
 Giúp cho các điểm dữ liệu dự đoán sai dần dần được dự đoán
đúng trở lại.

36
AdaBoost

37
Thuật toán AdaBoost
1. Khởi tạo trọng số:

m là kích thước tập dữ liệu, i = 1...m


2. Huấn luyện mô hình đầu tiên và tính toán tỉ lệ dự đoán sai (error
rate). Công thức tính error rate là:
Tổng trọng số dự đoán sai

Tổng trọng số

38
Thuật toán AdaBoost
3. Đánh trọng số cho mô hình: trọng số càng cao thì mô hình càng
chính xác thì trọng số càng cao.

: tốc độ học
: error rate của mô hình.
Nếu như mô hình dự đoán ngẫu nhiên:
Nếu như mô hình dự đoán thấp hơn dự đoán ngẫu nhiên:

39
Thuật toán AdaBoost
4. Cập nhật trọng số cho các điểm dữ liệu:

được chuẩn hoá (normalized) bằng cách chia cho


5. Bước 3 và Bước 4 được lặp lại cho tới khi độ chính xác đạt
được như mong muốn, hoặc số lượng mô hình đã đạt cực đại.
6. Thực hiện biểu quyết (N: số lượng mô hình):

40
Xử lý với vấn đề overfit

─ Giảm số lượng mô hình.

─ Giảm độ phức tạp của mô hình (khống chế thuộc tính, khống chế
bậc, giảm số lượng unit, ....).
─ Sử dụng các kỹ thuật regularization.

41
AdaBoost với bài toán multiclass
─ AdaBoost chỉ dùng cho phân lớp nhị phân (2 lớp).
─ Để mở rộng ra cho phân lớp đa lớp, ta dùng thuật toán SAMME
(Stagewise Additive Modeling using a Multiclass Exponential).
─ Điểm khác biệt với AdaBoost:

K: số lớp (class).

https://web.stanford.edu/~hastie/Papers/samme.pdf

42
Minh hoạ AdaBoost
─ Sử dụng lớp AdaBoostClassifier trong sklearn.
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
ada_clf = AdaBoostClassifier(
DecisionTreeClassifier(max_depth=1),
n_estimators=200,
algorithm="SAMME.R", learning_rate=0.5
)
ada_clf.fit(X_train, y_train)
y_pred_ada = ada_clf.predict(X_test)

43
Gradient Boosting
─ Là thuật toán học tăng cường theo kỹ thuật boosting bằng cách
sửa lỗi cho mô hình trước dựa trên residual error (tạm dich: sai số
dư).
+ Residual error: mức độ sai lệch giữa giá trị của quan sát
(observation) và giá trị dự đoán (predicted values).
─ Tính toán residual error thông qua hàm mất mát.
L(y, F(x)) = y – F(x)

44
Phân biệt giữa residual và error

─ An error is the difference between the observed value and the


true value (very often unobserved, generated by the DGP, for
example: sample means).
─ A residual is the difference between the observed value and the
predicted value (by the model).

45
Gradient boosting
─ Với K mô hình, khi kết hợp lại với nhau thì ta được:

─ Thêm vào Fk(x) các mô hình sao cho hàm mất máy của F(x) giảm
dần.

─ Mục tiêu: tìm tham số sao cho nhỏ nhất

46
Gradient boosting
1. Khởi tạo F0(x):
2. Lặp: k = 1...K:
+ Tính gradient: i = 1..N
+ Huấn luyện mô hình base learner với bộ dữ liệu:
+ Tính
+ Cập nhật kết quả:
3. Kết quả:

47
Stacking

48
Stacking
─ Là kỹ thuật kết hợp các mô
hình lại với nhau để đưa ra dữ
đoán cuối cùng. Đầu ra của
mô hình trước (output) sẽ là
đầu vào (input) của mô hình
sau.
─ Bộ phân lớp cuối cùng được
gọi là Blender hoặc Meta
learner.

49
Các bước thực hiện stacking
1. Huấn luyện mô hình cơ sở F trên tập dữ liệu D = {xi, yi}.
2. Xây dựng tập huấn luyện mới dựa trên kết qủa của mô hình cơ
sở: D’ = { {F1(xi), ... FK(xi)}, yi }
3. Huấn luyện mô hình H dựa trên D’.

50
Mô hình blended – lớp đầu tiên
1. Chia tập dữ liệu thành 2 tập
con S1, S2.
2. Tập con S1 được dùng để
huấn luyện 3 mô hình khác
nhau: F1, F2 và F3.

51
Mô hình blended – lớp thứ 2
─ Tạo ra training set mới dựa
vào kết quả dự đoán của lớp
trước đó.
+ Tập dữ liệu mới:
( {F1(x), F2(x), F3(x)} , y)
─ Huấn luyện mô hình Blender
trên tập dữ liệu mới.
─ Blender sẽ đưa ra dự đoán
cuối cùng.

52
Mô hình blender 3 lớp

53
TỔNG KẾT
1. Việc kết hợp các mô hình lại với nhau sẽ làm tăng độ chính xác
của mô hình so với việc thực hiện từng mô hình riêng lẻ.
2. Tuy nhiên, để việc kết hợp có hiệu quả, thì các mô hình cần phải
“trade-off” với nhau.
3. Các chiến lược kết hợp gồm:
+ Voting.
+ Bagging.
+ Boosting.
+ Stacking.

54
Bài tập
─ Bộ dữ liệu UIT-VSFC là bộ dữ liệu dùng để phân loại cảm xúc các
phản hồi của sinh viên về đào tạo.
+ Input: câu phản hồi của sinh viên.
+ Output: cảm xúc, gồm 1 trong 3 loại: tích cực (positive), tiêu
cực (negative) và trung tính (neutral).
Download tại link này:
https://drive.google.com/drive/folders/1xclbjHHK58zk2X6iqbvMPS2r
cy9y9E0X
Yêu cầu: Thử kết hợp các mô hình đã học lại với nhau và so sánh
với kết quả gốc từ bài báo với tác vụ sentiment-based.
55
Hướng dẫn
─ Bài báo gốc: Nguyen et al., “UIT-VSFC: Vietnamese Students’
Feedback Corpus for Sentiment Analysis”, KSE 2018.
─ Tác vụ sentiment-based: Mô hình Maximum Entropy (MaxEnt) đạt
kết quả cao nhất với 87.9% theo độ đo F1-score.
 Thử tìm cách kết hợp các mô hình để cải thiện kết quả trên??

56
TÀI LIỆU THAM KHẢO

Chương 7 của sách: Hands-on Machine Learning with ScikitLearn,


Keras & TensorFlow.

57

You might also like