๋ฐ์ํ
์ด๋ฒ์๋ Random Forest (๋๋ค ํฌ๋ ์คํธ) ๊ธฐ๋ฒ์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๋๋ค ํฌ๋ ์คํธ(Random Forest)๋ ๊ฒฐ์ ํธ๋ฆฌ์ ์์๋ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ธก์ ๊ฒฐํฉํ์ฌ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ธ ๋ชจ๋ธ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํนํ ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ์ ํจ๊ณผ์ ์ด๋ฉฐ, ๊ฐ๋ณ ๊ฒฐ์ ํธ๋ฆฌ์ ๊ณผ์ ํฉ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ณ , ์ ์ฒด์ ์ธ ์์ธก ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ ์ค๋๋ค.
Random Forest (๋๋ค ํฌ๋ ์คํธ)์ ์ฃผ์ ํน์ง
๋ค์์ฑ (Diversity)
- ๋๋ค ํฌ๋ ์คํธ๋ ๊ฐ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๊ฐ ๋ฐ์ดํฐ์ ์๋ก ๋ค๋ฅธ ๋ถ๋ถ์งํฉ๊ณผ ํน์ฑ์ ์ฌ์ฉํ์ฌ ํ์ตํฉ๋๋ค. ์ด๋ ๊ฐ ํธ๋ฆฌ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ค๋ฅธ ํจํด์ ํ์ตํ๋๋ก ํ์ฌ ๋ชจ๋ธ ์ ์ฒด์ ๋ค์์ฑ์ ๋์ ๋๋ค.
- ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ํธ๋ฆฌ ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ์ค์ด๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ ํธ๋ฆฌ์ ๊ณ ์ ํ ๊ด์ ์ด ์ ์ฒด ๋ชจ๋ธ์ ๊ธฐ์ฌํฉ๋๋ค.
์์๋ธ ๋ฐฉ๋ฒ (Ensemble Method)
- ๋๋ค ํฌ๋ ์คํธ๋ ์์๋ธ ํ์ต ๋ฐฉ๋ฒ์ ์ผ์ข ์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ํ๋์ ๋ชจ๋ธ์ ๊ตฌ์ฑํฉ๋๋ค.
- ๊ฐ ํธ๋ฆฌ์ ์์ธก์ ํ๊ท ๋ด๊ฑฐ๋, ๋ค์๊ฒฐ์ ํตํด ์ต์ข ๊ฒฐ์ ์ ๋ด๋ฆฝ๋๋ค. ์ด ๊ณผ์ ์ ๊ฐ๋ณ ๋ชจ๋ธ์ ์ค๋ฅ๋ฅผ ์์์ํค๊ณ , ์ ์ฒด ๋ชจ๋ธ์ ์ ํ๋์ ์ ๋ขฐ๋๋ฅผ ํฅ์์ํค๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
๊ณผ์ ํฉ ๋ฐฉ์ง (Prevention of Overfitting)
- ์ ํต์ ์ธ ๊ฒฐ์ ํธ๋ฆฌ๋ ๊น์ด๊ฐ ๊น์ด์ง์๋ก ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ์ ํฉ๋๊ธฐ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ค ํฌ๋ ์คํธ์์๋ ๊ฐ ํธ๋ฆฌ๊ฐ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง์ ์ฌ์ฉํ์ฌ ํ์ตํ๋ฏ๋ก, ๊ณผ์ ํฉ์ ์ํ์ด ํฌ๊ฒ ๊ฐ์ํฉ๋๋ค.
- ๋ํ, ๋๋ค ํฌ๋ ์คํธ๋ ํธ๋ฆฌ์ ์์ฑ ๊ณผ์ ์์ ํน์ฑ์ ๋ฌด์์ ์ ํ์ ํตํด ๋ถ์ฐ์ ๋์ด๊ณ , ๊ณผ์ ํฉ์ ์ค์ด๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
Random Foerest (๋๋ค ํฌ๋ ์คํธ)์ ๊ธฐ๋ณธ ์๋ฆฌ
Random Forest์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ์ด๋ ํ ๊ฒ๋ค์ด ์์๊น์?
๋ฐฐ๊น (Bootstrap Aggregating)
- ๊ฐ ํธ๋ฆฌ๋ ์๋ณธ ๋ฐ์ดํฐ์ ์์ ์ค๋ณต์ ํ์ฉํ์ฌ ๋ฌด์์๋ก ์ ํ๋ ์ํ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ์ํ์ '๋ถํธ์คํธ๋ฉ ์ํ'์ด๋ผ๊ณ ํ๋ฉฐ, ๊ฐ ํธ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ๋ถํธ์คํธ๋ฉ ์ํ๋ก ํ์ต๋ฉ๋๋ค.
- ์ด ๊ณผ์ ์ ๊ฐ ํธ๋ฆฌ๊ฐ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ํจํด์ ํ์ตํ๊ฒ ํ์ฌ, ๋ชจ๋ธ์ ๋ค์์ฑ์ ๋์ด๊ณ ๊ณผ์ ํฉ์ ์ค์ ๋๋ค.
๋๋ค ํน์ฑ ์ ํ
- ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ๋ ๋ชจ๋ ํน์ฑ์ ๊ณ ๋ คํ์ง ์๊ณ , ๋ฌด์์๋ก ์ ํ๋ ๋ถ๋ถ์งํฉ์ ํน์ฑ๋ง์ ์ฌ์ฉํ์ฌ ๋ถํ ์ ๊ฒฐ์ ํฉ๋๋ค.
- ์ด๋ ํธ๋ฆฌ ๊ฐ์ ์๊ด์ฑ์ ์ค์ด๋ฉฐ, ๊ฐ ํธ๋ฆฌ๊ฐ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ์ธก๋ฉด์ ํ์ตํ๊ฒ ํฉ๋๋ค.
ํธ๋ฆฌ์ ํ์ต
- ๊ฐ ํธ๋ฆฌ๋ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ต๋๋ฉฐ, ๋ถํ ๊ธฐ์ค์ ์ ๋ณด ์ด๋์ด๋ ์ง๋ ๋ถ์๋์ ๊ฐ์ ๊ธฐ์ค์ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ๋ฉ๋๋ค.
- ํธ๋ฆฌ์ ๊ฐ์๊ฐ ๋ง์์๋ก ์ ์ฒด ๋ชจ๋ธ์ ์ ํ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํฅ์๋์ง๋ง, ๊ณ์ฐ ๋น์ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐํฉ๋๋ค.
๊ฒฐํฉ์ ํตํ ์์ธก
- ๋ถ๋ฅ ๋ฌธ์ ์์๋ ์์ฑ๋ ๋ชจ๋ ํธ๋ฆฌ์ ์์ธก ๊ฒฐ๊ณผ(ํด๋์ค ๋ ์ด๋ธ)๋ฅผ ๋ชจ์ ๋ค์๊ฒฐ ์์น์ ๋ฐ๋ผ ์ต์ข ์์ธก์ ๊ฒฐ์ ํฉ๋๋ค.
- ํ๊ท ๋ฌธ์ ์์๋ ๋ชจ๋ ํธ๋ฆฌ์ ์์ธก๊ฐ์ ํ๊ท ์ ๊ณ์ฐํ์ฌ ์ต์ข ์์ธก๊ฐ์ ๋์ถํฉ๋๋ค.
Random Foerest (๋๋ค ํฌ๋ ์คํธ)์ ์ฅ์ , ๋จ์
์ฅ์
- ๋์ ์์ธก ์ฑ๋ฅ: ์ฌ๋ฌ ๊ฒฐ์ ํธ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ์ฌ ๋จ์ผ ๊ฒฐ์ ํธ๋ฆฌ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ์ ํ๋์ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณผ์ ํฉ ๋ฐฉ์ง: ๊ฐ ํธ๋ฆฌ๊ฐ ๋ฐ์ดํฐ์ ์๋ก ๋ค๋ฅธ ๋ถ๋ถ์งํฉ์ ์ฌ์ฉํ์ฌ ํ์ตํ๋ฏ๋ก, ๊ฐ๋ณ ํธ๋ฆฌ์์ ๋ฐ์ํ ์ ์๋ ๊ณผ์ ํฉ ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ๊ฐ์์ํต๋๋ค.
- ๋ณ์ ์ค์๋ ํ๊ฐ: ๋๋ค ํฌ๋ ์คํธ๋ ๊ฐ ํน์ฑ์ ์ค์๋๋ฅผ ์ธก์ ํ ์ ์์ด, ์ด๋ค ๋ณ์๊ฐ ์์ธก์ ๊ฐ์ฅ ์ํฅ๋ ฅ์ด ํฐ์ง ํ์ ํ ์ ์์ต๋๋ค.
- ์๋ ํน์ฑ ์ ํ: ์ต์ ์ ํน์ฑ์ ์๋์ผ๋ก ์ ํํ์ฌ ๋ชจ๋ธ์ ๊ตฌ์ฑํจ์ผ๋ก์จ ํน์ฑ ์ ํ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
- ๋ค์ํ ๋ฐ์ดํฐ ์ ํ ์ฒ๋ฆฌ: ์์นํ ๋ฐ ๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ๋ง์ ๊ธฐ๊ณํ์ต ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ ๋ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์๊ตฌ ์ฌํญ์ด ์๋์ ์ผ๋ก ์ ์ต๋๋ค.
๋จ์
- ๋ชจ๋ธ ํด์์ ์ด๋ ค์: ๊ฐ๋ณ ๊ฒฐ์ ํธ๋ฆฌ๋ ํด์์ด ๋น๊ต์ ์ฉ์ดํ์ง๋ง, ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ ์ ์ฒด๋ฅผ ํด์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณต์กํ ์ ์์ต๋๋ค.
- ๊ณ์ฐ ๋น์ฉ: ๋ง์ ์์ ํธ๋ฆฌ๋ฅผ ํ์ตํด์ผ ํ๊ธฐ ๋๋ฌธ์, ํนํ ํฐ ๋ฐ์ดํฐ ์ธํธ์์๋ ํ๋ จ ์๊ฐ์ด ๊ธธ๊ณ ๋ง์ ๊ณ์ฐ ์์์ ์๊ตฌํ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ: ๋๊ท๋ชจ ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ์ ์๋นํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ ์ ์์ผ๋ฉฐ, ์ด๋ ํนํ ์ ํ๋ ์์์ ๊ฐ์ง ์์คํ ์์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
- ์ค์๊ฐ ์์ธก: ํ๋ จ์ ํ ๋ฒ๋ง ์ด๋ฃจ์ด์ง์ง๋ง, ์์ธก์ ์ํด ๋ชจ๋ ํธ๋ฆฌ๋ฅผ ํต๊ณผํด์ผ ํ๋ฏ๋ก ์ค์๊ฐ ์๋ต ์๋๋ฆฌ์ค์์๋ ์๋์ ์ผ๋ก ๋๋ฆด ์ ์์ต๋๋ค.
Random Forest Example Code
# ๋๋ค ํฌ๋ ์คํธ ์์
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
# ์ ๋ฐฉ์ ๋ฐ์ดํฐ์
๋ก๋
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
# ๋ฐ์ดํฐ์
์ ํ์ต ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ ํ์ต
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# ์์ธก ๋ฐ ํ๊ฐ
y_pred = rf.predict(X_test)
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.98 0.93 0.95 43
1 0.96 0.99 0.97 71
accuracy 0.96 114
macro avg 0.97 0.96 0.96 114
weighted avg 0.97 0.96 0.96 114
# ํผ๋ ํ๋ ฌ ์๊ฐํ
ConfusionMatrixDisplay.from_estimator(rf, X_test, y_test)
plt.title("Random Forest Confusion Matrix")
plt.show()
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] Unsupervised Learning (๋น์ง๋ ํ์ต) (0) | 2024.08.16 |
---|---|
[ML] ์ ๊ฒฝ๋ง (Neural Network) - ๋ค์ธต ํผ์ ํธ๋ก (0) | 2024.08.16 |
[ML] Decision Tree (๊ฒฐ์ ํธ๋ฆฌ) (0) | 2024.08.12 |
[ML] Support Vector Machine (SVM, ์ํฌํธ ๋ฒกํฐ ๋จธ์ ) (0) | 2024.08.11 |
[ML] Logistic Regression (๋ก์ง์คํฑ ํ๊ท) (0) | 2024.08.07 |