๋ฐ์ํ
์ด๋ฒ์ Emsemble Methods (์์๋ธ ๊ธฐ๋ฒ)์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
์์๋ธ ๊ธฐ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์์ธก ๋ชจ๋ธ์ ๊ฒฐํฉํ์ฌ ๋จ์ผ ๋ชจ๋ธ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ป๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ฅผ ํตํด ์์ธก์ ์ ํ๋๋ฅผ ๋์ด๊ณ , ๋ชจ๋ธ์ ์์ ์ฑ์ ํฅ์์ํค๋ฉฐ, ๊ณผ์ ํฉ์ ์ค์ผ ์ ์์ต๋๋ค.
Emsemble ๊ธฐ๋ฒ์ ๋ชฉ์
์์๋ธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๊ณผ์ฐ ๋ฌด์์ผ๊น์?
- ์์ธก ์ฑ๋ฅ ํฅ์: ์ฌ๋ฌ ๋ชจ๋ธ์ ๊ฒฐํฉํ์ฌ ๊ฐ๋ณ ๋ชจ๋ธ๋ณด๋ค ๋ ๋์ ์์ธก ์ ํ๋๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
- ๊ณผ์ ํฉ ๊ฐ์: ๋ค์ํ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํจ์ผ๋ก์จ ๊ฐ๋ณ ๋ชจ๋ธ์ด ํ์ต ๋ฐ์ดํฐ์ ๊ณผ์ ํฉ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์์ ์ฑ ํฅ์: ๋ชจ๋ธ์ ๋ณ๋์ฑ์ ์ค์ด๊ณ ์์ธก์ ์ผ๊ด์ฑ์ ๋์ด๋ ๋ฐ ๋์์ ์ค๋๋ค.
Emsemble ๊ธฐ๋ฒ์ ์ข ๋ฅ
์์๋ธ ๊ธฐ๋ฒ์ 3๊ฐ์ง์ ์ข ๋ฅ๊ฐ ์์ต๋๋ค. ์๋์์ ์์ธํ ํ๋ฒ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฐฐ๊น (Bagging)
- ๋ถ์คํ (Boosting)
- ์คํํน(Stacking)
๋ฐฐ๊น (Bagging)
๋ฐฐ๊น (Bootstrap Aggregating)์ ์ฌ๋ฌ ๋ชจ๋ธ์ ๋ณ๋ ฌ์ ์ผ๋ก ํ์ตํ๊ณ ,
์์ธก์ ํ๊ท ๋ด๊ฑฐ๋ ๋ค์๊ฒฐ ํฌํ๋ฅผ ํตํด ์ต์ข ์์ธก์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Bagging์ ์๋ฆฌ
๋ถํธ์คํธ๋ฉ ์ํ๋ง
- ์๋ณธ ๋ฐ์ดํฐ์ ์์ ์ค๋ณต์ ํ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์ํ์ ๋ฌด์์๋ก ์ถ์ถํฉ๋๋ค. ์ด๋ ๊ฐ ๋ชจ๋ธ์ด ์๋ก ๋ค๋ฅธ ์ํ์ ํ์ตํ๋๋ก ํ์ฌ ๋ค์์ฑ์ ํ๋ณดํฉ๋๋ค.
๊ฐ๋ณ ๋ชจ๋ธ ํ์ต
- ๊ฐ ๋ถํธ์คํธ๋ฉ ์ํ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค. ๊ฐ ๋ชจ๋ธ์ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ง๋ง, ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ก ํ์ต๋ฉ๋๋ค.
์์ธก ๊ฒฐํฉ
- ๋ชจ๋ ๋ชจ๋ธ์ ์์ธก์ ํ๊ท ๋ด๊ฑฐ๋, ๋ค์๊ฒฐ ํฌํ๋ฅผ ํตํด ์ต์ข ์์ธก์ ๊ฒฐ์ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๋ชจ๋ธ ๊ฐ์ ์ค์ฐจ๊ฐ ์์๋์ด ์์ธก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๋ํ ์๊ณ ๋ฆฌ์ฆ
- ๋๋ค ํฌ๋ ์คํธ(Random Forest): ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๋ฐฐ๊น ๋ฐฉ์์ผ๋ก ๊ฒฐํฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋ถ์คํ (Boosting)
๋ถ์คํ (Boosting)์ ๋ชจ๋ธ์ ์์ฐจ์ ์ผ๋ก ํ์ต์ํค๋ฉฐ,
์ด์ ๋ชจ๋ธ์ด ์๋ชป ์์ธกํ ์ํ์ ๋ ํฐ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ์ค๋ฅ๋ฅผ ๋ณด์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ถ์คํ ์ ์๋ฆฌ
์ด๊ธฐ ๋ชจ๋ธ ํ์ต
- ์ฒซ ๋ฒ์งธ ๋ชจ๋ธ์ ํ์ต์ํต๋๋ค. ์ด๊ธฐ ๋ชจ๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ์ฌ ํ์ต๋ฉ๋๋ค.
์ค๋ฅ ์ํ ๊ฐ์ค์น ์ฆ๊ฐ
- ์ฒซ ๋ฒ์งธ ๋ชจ๋ธ์ด ์๋ชป ์์ธกํ ์ํ์ ๊ฐ์ค์น๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ์ด๋ ์ดํ ๋ชจ๋ธ์ด ์ด ์ค๋ฅ๋ฅผ ๋ ์ ํ์ตํ ์ ์๋๋ก ๋์ต๋๋ค.
์์ฐจ์ ๋ชจ๋ธ ํ์ต
- ๊ฐ์ค์น๊ฐ ์กฐ์ ๋ ์ํ์ ์ฌ์ฉํ์ฌ ๋ค์ ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค. ์ด ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด์ ๋ชจ๋ธ๋ค์ด ์ฐจ๋ก๋ก ํ์ต๋ฉ๋๋ค.
์์ธก ๊ฒฐํฉ
- ๋ชจ๋ ๋ชจ๋ธ์ ์์ธก์ ๊ฐ์ค ํ๊ท ํ์ฌ ์ต์ข ์์ธก์ ๋ง๋ญ๋๋ค. ๊ฐ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋ฐ๋ผ ๊ฐ์ค์น๊ฐ ๋ถ์ฌ๋ฉ๋๋ค.
๋ํ ์๊ณ ๋ฆฌ์ฆ
- AdaBoost
- Gradient Boosting
- XGBoost
์คํํน(Stacking)
์คํํน(Stacking)์ ์ฌ๋ฌ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฉํ ๋ชจ๋ธ์ ํ์ต์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์คํํน์ ์๋ฆฌ
๊ธฐ๋ณธ ๋ชจ๋ธ ํ์ต
- ์ฌ๋ฌ ๊ฐ์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ํ์ต์ํต๋๋ค. ๊ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ต๋๋ฉฐ, ์๋ก ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฉํ ๋ชจ๋ธ ํ์ต
- ๊ธฐ๋ณธ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฉํ ๋ชจ๋ธ์ ํ์ต์ํต๋๋ค. ๋ฉํ ๋ชจ๋ธ์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข ์์ธก์ ๋ง๋ญ๋๋ค.
์ต์ข ์์ธก
- ๋ฉํ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ต์ข ์์ธก์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ธฐ๋ณธ ๋ชจ๋ธ๋ค์ด ๊ฐ์ง ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์์ต๋๋ค.
๋ํ ์๊ณ ๋ฆฌ์ฆ
- ๋ค์ธต ํผ์ ํธ๋ก (MLP)์ ๋ฉํ ๋ชจ๋ธ๋ก ์ฌ์ฉํ๋ ์คํํน ๋ฐฉ๋ฒ์ด ๋ํ์ ์ ๋๋ค.
Emsemble ๊ธฐ๋ฒ์ ์ฅ, ๋จ์
์์๋ธ ๊ธฐ๋ฒ์ ์ฅ์
- ์์ธก ์ฑ๋ฅ ํฅ์: ์ฌ๋ฌ ๋ชจ๋ธ์ ์์ธก์ ๊ฒฐํฉํ์ฌ ๋ ๋์ ์ ํ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ๊ณผ์ ํฉ ๊ฐ์: ๋ค์ํ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํจ์ผ๋ก์จ ๊ฐ๋ณ ๋ชจ๋ธ์ ๊ณผ์ ํฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์์ ์ฑ ํฅ์: ๋ชจ๋ธ์ ๋ณ๋์ฑ์ ์ค์ด๊ณ ์์ธก์ ์ผ๊ด์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์์๋ธ ๊ธฐ๋ฒ์ ๋จ์
- ๋ณต์ก์ฑ ์ฆ๊ฐ: ์ฌ๋ฌ ๋ชจ๋ธ์ ํ์ต์ํค๊ณ ๊ฒฐํฉํ๋ ๊ณผ์ ์ด ๋ณต์กํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ธ์ ์ค๊ณ์ ํ๋์ด ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค.
- ํด์ ์ด๋ ค์: ๋จ์ผ ๋ชจ๋ธ์ ๋นํด ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๋ ๊ฒ์ด ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํนํ, ์คํํน์ฒ๋ผ ๋ณต์กํ ์์๋ธ ๊ธฐ๋ฒ์ ํด์์ด ์ด๋ ต์ต๋๋ค.
- ๊ณ์ฐ ๋น์ฉ: ์ฌ๋ฌ ๋ชจ๋ธ์ ํ์ต์ํค๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๊ณ์ฐ ์์๋ ๋ง์ด ์๋ชจ๋ฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ํนํ ๊ทธ๋ ์ต๋๋ค.
Emsemble Method Example Code
๋ฐฐ๊น (Bagging) Example
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns
# Iris ๋ฐ์ดํฐ์
๋ก๋
iris = load_iris()
X = iris.data
y = iris.target
# ํ์ต ๋ฐ์ดํฐ์ ํ
์คํธ ๋ฐ์ดํฐ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Random Forest ๋ชจ๋ธ ์์ฑ
rf = RandomForestClassifier(n_estimators=100, random_state=42)
# ๋ชจ๋ธ ํ์ต
rf.fit(X_train, y_train)
# ์์ธก ์ํ
y_pred = rf.predict(X_test)
# ์ ํ๋ ๊ณ์ฐ
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# ํผ๋ ํ๋ ฌ ์๊ฐํ
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10, 7))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
# ๋ถ๋ฅ ๋ฆฌํฌํธ ์ถ๋ ฅ
print(classification_report(y_test, y_pred, target_names=iris.target_names))
precision recall f1-score support
setosa 1.00 1.00 1.00 19
versicolor 1.00 1.00 1.00 13
virginica 1.00 1.00 1.00 13
accuracy 1.00 45
macro avg 1.00 1.00 1.00 45
weighted avg 1.00 1.00 1.00 45
๋ถ์คํ (Boosting) Example - Gradient Boosting
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns
# Iris ๋ฐ์ดํฐ์
๋ก๋
iris = load_iris()
X = iris.data
y = iris.target
# ํ์ต ๋ฐ์ดํฐ์ ํ
์คํธ ๋ฐ์ดํฐ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Gradient Boosting ๋ชจ๋ธ ์์ฑ
gb = GradientBoostingClassifier(n_estimators=100, random_state=42)
# ๋ชจ๋ธ ํ์ต
gb.fit(X_train, y_train)
# ์์ธก ์ํ
y_pred = gb.predict(X_test)
# ์ ํ๋ ๊ณ์ฐ
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# ํผ๋ ํ๋ ฌ ์๊ฐํ
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10, 7))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
# ๋ถ๋ฅ ๋ฆฌํฌํธ ์ถ๋ ฅ
print(classification_report(y_test, y_pred, target_names=iris.target_names))
precision recall f1-score support
setosa 1.00 1.00 1.00 19
versicolor 1.00 1.00 1.00 13
virginica 1.00 1.00 1.00 13
accuracy 1.00 45
macro avg 1.00 1.00 1.00 45
weighted avg 1.00 1.00 1.00 45
์คํํน(Stacking) Example
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import StackingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns
# Iris ๋ฐ์ดํฐ์
๋ก๋
iris = load_iris()
X = iris.data
y = iris.target
# ํ์ต ๋ฐ์ดํฐ์ ํ
์คํธ ๋ฐ์ดํฐ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ์
estimators = [
('rf', RandomForestClassifier(n_estimators=10, random_state=42)),
('svr', SVC(kernel='rbf', probability=True, random_state=42))
]
# ์คํํน ๋ชจ๋ธ ์์ฑ
stacking = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())
# ๋ชจ๋ธ ํ์ต
stacking.fit(X_train, y_train)
# ์์ธก ์ํ
y_pred = stacking.predict(X_test)
# ์ ํ๋ ๊ณ์ฐ
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# ํผ๋ ํ๋ ฌ ์๊ฐํ
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10, 7))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
# ๋ถ๋ฅ ๋ฆฌํฌํธ ์ถ๋ ฅ
print(classification_report(y_test, y_pred, target_names=iris.target_names))
precision recall f1-score support
setosa 1.00 1.00 1.00 19
versicolor 1.00 1.00 1.00 13
virginica 1.00 1.00 1.00 13
accuracy 1.00 45
macro avg 1.00 1.00 1.00 45
weighted avg 1.00 1.00 1.00 45
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] Reinforcement Learning (๊ฐํ ํ์ต) - Q-Learning (0) | 2024.08.27 |
---|---|
[ML] Recommender System (์ถ์ฒ์์คํ ) (0) | 2024.08.26 |
[ML] ์ฐ๊ด ๊ท์น ํ์ต (Association Rule Learning) (0) | 2024.08.22 |
[ML] t-SNE (t-Distributed Stochastic Neighbor Embedding) (0) | 2024.08.20 |
[ML] Isomap (์์ด์๋งต) (0) | 2024.08.20 |