Tóm tắt về Ensemble Learning: Bagging/Boosting/Stacking(1)

1. Ensemble Learning là gì



Mục tiêu trong học máy là xây dựng các máy học có tính tổng quát hóa cao từ dữ liệu. Có một số cch
- Cải thiện hiệu suất của một máy học (model).
- Chuẩn bị nhiều máy học (model) và tổng hợp kết quả dự đoán của chúng để nâng cao tính tổng quát hóa.

Phương pháp thứ hai được gọi là Ensemble Learning. Sử dụng nhiều máy học (model) để đưa ra độ chính xác cao của mo

1.1. Tại sao Ensemble Learning lại có hiệu quả



· Là một phương pháp Ensemble Learning, nó có thể chỉ đơn giản là một cuộc bỏ phiếu đa số cho những máy họ
· Trong bài toán phân biệt nhị phân (0 hoặc 1), nếu trên (m + 1)/2 số máy học yếu (약학기) đưa ra phán đoán sai lầ phiếu.
· Nếu mỗi một máy học yếu (弱学習器) được thống kê độc lập và xác suất lỗi của mỗi máy học yếu là đồng nhất, thì khi chúng ta xem xét xác suất để hơn một nửa số máy học phân loại(分類機) của những máy học yếu (m 개의 약 학습기 중) phân loại sai, Xác suất trở nên rất nhỏ.

1.2. Để làm cho Ensemble Learning hiệu quả hơn



Lưu ý thực hiện các điểm dưới đây, sẽ có thể giúp tăng độ chính xác hơn.
- Sử dụng các máy học yếu khác nhau nhất có thể
- Học từng máy học yếu bằng cách sử dụng các bộ dữ liệu khác nhau nhất co thể.
Nói cách khác, các máy học yếu càng độc lập với nhau, thì hiệu quả của Ensemble Learning sẽ càng tốt.

1.3. Phân loại Ensemble Learning



Một cách đại khải, Ensemble Learning được chia thành 3 loại sau đây.
- Bagging (đóng bao)
- Boosting (tăng cường)
- Stacking (Xếp chồng)
Chúng tôi sẽ môže tả từng phương pháp và các chủ đề liên quan dưới đây. (Bổ sung sau)

2. Bagging (đóng bao)



3. Boosting (tăng cường)



4. Stacking (Xếp chồng)



Stacking (Xếp chồng) có nghĩa là, như tên gọi của nó, các môže hình được xếp chồng lên nhau.

4.1. Tổng quan



Tôi sẽ giải thích ngắn gọn các phác thảo dưới đây. Đầu tiên, chúng ta tách tập dữ liệu train thành nhiều phần và cho train với cái máy học(model) khác nhau như hình dưới.

Trích dẫn: Géron, Aurélien. "Hands on Machine Learning with scikit-learn and Tensorflow."(2017).

Sau đó, chúng ta sử dụng các máy học (trained) để dự đoán và thu được giá trị với tập dữ liệu được sử dụng để train (xem hình bên dưới). Chúng ta sẽ sử dụng những giá trị dự đoán này làm "features mới "để phát triển thêm một máy học mới. Đây là xếp chồng.


Trích dẫn: Géron, Aurélien. "Hands on Machine Learning with scikit-learn and Tensorflow."(2017).

Trong hình trên chỉ có một ngăn xếp được thực hiện, nhưng tất nhiên cũng có thể xếp chồng nhiều


4.2. Code thử bằng Python



데이터 세트 : htps //w w. 꺄gぇ. 코 m / c / 호세 - p 리세 s - d d
import numpy as np
import pandas as pd 

from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from lightgbm import LGBMRegressor

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Load dataset
train = pd.read_csv('../dataset/house-prices/train.csv')
test = pd.read_csv('../dataset/house-prices/test.csv')
train.shape #(1460, 81)
test.shape #(1459, 80)


# Preprocess
nrow_train = train.shape[0]

merge = pd.concat([train, test], sort=False)
merge.shape #(2919, 81)

dummies = pd.get_dummies(merge.select_dtypes(include=['object']))
merge = pd.concat([merge, dummies], axis=1)

df_train = merge[:nrow_train]
df_test = merge[nrow_train:]

X = df_train.drop(['SalePrice'], axis=1).select_dtypes(exclude=['object']).fillna(0)
y = np.log(df_train['SalePrice'].fillna(0))

#df_test = df_test.drop(['SalePrice'], axis=1).select_dtypes(exclude=['object']).fillna(0)


#Split train/valid/test
random_state = 1021
X_train_valid, X_meta_valid, y_train_valid, y_meta_valid = 
                             train_test_split(X, y, test_size=0.2, random_state=random_state)
#X_train_valid: 0.8 X
#y_train_valid: 0.8 y
#X_meta_valid: 0.2 X
#y_meta_valid: 0.2 y

X_train, X_valid, y_train, y_valid = 
      train_test_split(X_train_valid, y_train_valid, test_size=0.5, random_state=random_state)
#X_train: 0.5 X_train_valid
#y_train: 0.5 y_train_valid
#X_valid: 0.5 X_train_valid
#y_valid: 0.5 y_train_valid

# Stacking
# train base model
base_model_1 = LinearRegression()
base_model_2 = LGBMRegressor()
base_model_3 = KNeighborsRegressor()

base_model_1.fit(X_train, y_train)
base_model_2.fit(X_train, y_train)
base_model_3.fit(X_train, y_train)

# base predicts
base_pred_1 = base_model_1.predict(X_valid)
base_pred_2 = base_model_2.predict(X_valid)
base_pred_3 = base_model_3.predict(X_valid)

# test predicts for final result 
valid_pred_1 = base_model_1.predict(X_meta_valid)
valid_pred_2 = base_model_2.predict(X_meta_valid)
valid_pred_3 = base_model_3.predict(X_meta_valid)

print ("mean squared error of model 1: {:.4f}".format(mean_squared_error(y_meta_valid, valid_pred_1)) )
print ("mean squared error of model 2: {:.4f}".format(mean_squared_error(y_meta_valid, valid_pred_2)) )
print ("mean squared error of model 3: {:.4f}".format(mean_squared_error(y_meta_valid, valid_pred_3)) )

#mean squared error of model 1: 0.0239
#mean squared error of model 2: 0.0181
#mean squared error of model 3: 0.0634

# stack base predicts for training meta model
stacked_predictions = np.column_stack((base_pred_1, base_pred_2, base_pred_3))

# stack test predicts for final result 
stacked_valid_predictions = np.column_stack((valid_pred_1, valid_pred_2, valid_pred_3))

# train meta model 
meta_model = LinearRegression()
meta_model.fit(stacked_predictions, y_valid)

# final result 
meta_valid_pred = meta_model.predict(stacked_valid_predictions)
print ("mean squared error of meta model: {:.4f}".format(mean_squared_error(y_meta_valid, meta_valid_pred)) )

#mean squared error of meta model: 0.0175


5. Link bài viết tham khảo



Bài viết liên quan:
htps : // 흠 m. 마치 네 r 마늘 g 코반. 코 m / t / 훗 아츠레 - 엔 기네 에린 g - s c 킨 g - め - 엔세 mb 쟈-병 h-안/4298
htps : // 기주 b. 이 m/n gx바 c/아이ゔぃ v _p 은ぉ 아이사 c 테이병 hぅ 안/bぉ b/마s r/s타 c킨 g. 이 pyn b

Heamy
heamy - walkthrough.ipynb
Using heamy in a project
Kaggle에서 자주 사용되는 Stacking/Blending을 heamy, Stacknet을 pystacknet으로 고속으로 구현
repo

좋은 웹페이지 즐겨찾기