1. ๊ฒฐ์ ํธ๋ฆฌ
- ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ถ๋ฅํ๋ ์ง๋ ํ์ต ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ ๋ ธ๋์์ ํน์ ๊ธฐ์ค์ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ , ์ต์ข ์ ์ผ๋ก ๊ฐ ๋ฆฌํ ๋ ธ๋์์ ์์ธก ๊ฐ์ ๊ฒฐ์
ํน์ง
- ํด์์ด ์ฌ์ฐ๋ฉฐ ์๊ฐ์ ์ผ๋ก ํํ ๊ฐ๋ฅ
- ๊ณผ๋์ ํฉ(overfitting)๋ ๊ฐ๋ฅ์ฑ์ด ์์
- ๋ถํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง ์ ์์
์ฌ์ดํท๋ฐ์ ํ์ฉํ ๊ฒฐ์ ํธ๋ฆฌ ๊ตฌํ
from sklearn.tree import DecisionTreeClassifier
# ๋ชจ๋ธ ์์ฑ ๋ฐ ํ์ต
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt.fit(X_train, y_train)
# ์์ธก
y_pred = dt.predict(X_test)
๊ต์ฐจ ๊ฒ์ฆ๊ณผ ๊ฒ์ฆ ์ธํธ
๊ต์ฐจ ๊ฒ์ฆ
- ๋ชจ๋ธ์ ํ๊ฐํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ํ์ต ๋ฐ ๊ฒ์ฆํ์ฌ ์ฑ๋ฅ์ ๋์ฑ ์ ๋ขฐ์ฑ ์๊ฒ ์ธก์ ํ๋ ๋ฐฉ๋ฒ
- K-ํด๋ ๊ต์ฐจ ๊ฒ์ฆ: ๋ฐ์ดํฐ๋ฅผ K๊ฐ์ ๋ถ๋ถ์ผ๋ก ๋๋์ด, K-1๊ฐ์ ํด๋๋ฅผ ํ์ต ๋ฐ์ดํฐ๋ก, ๋๋จธ์ง 1๊ฐ์ ํด๋๋ฅผ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ์ฌ K๋ฒ ๋ฐ๋ณต
from sklearn.model_selection import cross_val_score
scores = cross_val_score(dt, X_train, y_train, cv=5)
print("๊ต์ฐจ ๊ฒ์ฆ ์ ์:", scores.mean())
๊ฒ์ฆ ์ธํธ
๋ฐ์ดํฐ๋ฅผ ํ๋ จ, ๊ฒ์ฆ, ํ ์คํธ3๊ฐ๋ก ๋๋์ด, ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ ์ ๊ฒ์ฆ ์ธํธ๋ฅผ ํ์ฉํ์ฌ ์ต์ ์ ๋ชจ๋ธ์ ์ฐพ์
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
2. ์์๋ธ ํ์ต
์ฌ๋ฌ ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ฅผ ํ๋์ ๋ฉํ ๋ถ๋ฅ๊ธฐ๋ก ์ฐ๊ฒฐํ์ฌ ๊ฐ๋ณ ๋ถ๋ฅ๊ธฐ๋ณด๋ค ๋ ์ข์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ธฐ๋ฒ
์ข ๋ฅ
- ๋ฐฐ๊น (Bagging): ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ต์์ผ ๋ค์๊ฒฐ ํฌํ๋ก ์ต์ข ์์ธก์ ๊ฒฐ์
- ๋ถ์คํ (Boosting): ์ด์ ๋ถ๋ฅ๊ธฐ์ ์ค์ฐจ๋ฅผ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ์์ฐจ์ ์ผ๋ก ํ์ต
- ๋๋ค ํฌ๋ ์คํธ (Random Forest): ๋ฐฐ๊น ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒฐ์ ํธ๋ฆฌ ์์๋ธ ๋ชจ๋ธ
๋ฐฐ๊น
- Bootstrap Aggregating์ ์ฝ์
- ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ต์ํค๊ณ ๊ทธ ์์ธก์ ๊ฒฐํฉํ๋ ๊ธฐ๋ฒ
- ๊ฒฐ์ ํธ๋ฆฌ์ ๊ฐ์ ์ฝํ ํ์ต๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋๋คํ๊ฒ ์ํ๋งํ์ฌ ํ์ต
๋๋ค ํฌ๋ ์คํธ
์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ํ์ต์ํค๊ณ , ์ด๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข ์์ธก์ ์ํํ ๋ชจ๋ธ
from sklearn.ensemble import RandomForestClassifier
# ๋ชจ๋ธ ์์ฑ
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# ์์ธก
y_pred = rf.predict(X_test)
์ฅ์
- ๋ชจ๋ธ์ ๋ ๋ฆฝ์ ํ์ต: ์ฌ๋ฌ ๋ชจ๋ธ์ ๋ณ๋ ฌ๋ก ํ์ต์ํค๊ณ , ๊ฐ ๋ชจ๋ธ์ ์๋ก ๋ค๋ฅธ ํ์ต ๋ฐ์ดํฐ๋ก ํ๋ จ
- Bootstrap Sampling: ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ๋ณต์ ์ถ์ถํ์ฌ ๊ฐ ํธ๋ฆฌ๋ฅผ ํ์ต -> ๊ฐ๋ณ ๊ฒฐ์ ํธ๋ฆฌ๋ณด๋ค ์ผ๋ฐํ ์ฑ๋ฅ์ด ๋ฐ์ด๋จ
- ๋ค์์ฑ ํ๋ณด: ๊ฐ ํธ๋ฆฌ์์ ํน์ง ์ ํ์ ์์ด์๋ ์ผ๋ถ ํน์ง๋ง ์ฌ์ฉํ์ฌ ๊ณผ๋์ ํฉ์ ๋ฐฉ์งํ๋ ํจ๊ณผ๊ฐ ์์
- ํน์ฑ ์ค์๋๋ฅผ ์๋์ผ๋ก ๊ณ์ฐ ๊ฐ๋ฅ
๋ถ์คํ
์ฝํ ํ์ต๊ธฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ตํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ
์์ด๋ค๋ถ์คํธ (AdaBoost)
- ๊ฐ๋จํ ๋ถ๋ฅ๊ธฐ๋ฅผ ์กฐํฉํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ธฐ๋ฒ
- ์๋ชป ๋ถ๋ฅ๋ ์ํ์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ํ์ต์ ๊ฐํ
๊ทธ๋๋์ธํธ ๋ถ์คํ (Gradient Boosting)
- ์ด์ ํธ๋ฆฌ์ ์ค์ฐจ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํธ๋ฆฌ๋ฅผ ํ์ต
- ์ฑ๋ฅ์ด ๋ฐ์ด๋์ง๋ง ๊ณผ๋์ ํฉ ๊ฐ๋ฅ์ฑ์ด ์์
๋ฐฐ๊น ๊ณผ ๋ถ์คํ ๋น๊ต
๊ธฐ๋ฒ | ์๋ ๋ฐฉ์ | ์ฅ์ | ๋จ์ |
๋ฐฐ๊น (Bagging) | ๋ ๋ฆฝ์ ์ธ ๋ชจ๋ธ์ ๋ณ๋ ฌ ํ์ต ํ ๋ค์๊ฒฐ ํฌํ | ๋ถ์ฐ ๊ฐ์, ๊ณผ๋์ ํฉ ๋ฐฉ์ง | ํธํฅ ๊ฐ์ ํจ๊ณผ๋ ์ ์ |
๋ถ์คํ (Boosting) | ์ด์ ๋ชจ๋ธ์ ์ค์ฐจ๋ฅผ ๋ฐ์ํ๋ฉฐ ์์ฐจ์ ํ์ต | ํธํฅ๊ณผ ๋ถ์ฐ ๋ชจ๋ ์ค์ผ ์ ์์ | ๊ณผ๋์ ํฉ ๊ฐ๋ฅ์ฑ |
'๐ฆญ AI&Big Data > ML' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MLFlow (0) | 2025.03.19 |
---|---|
๋น์ง๋ํ์ต (0) | 2025.03.05 |
๋ก์ง์คํฑ ํ๊ท (0) | 2025.03.05 |
ํ๊ท (0) | 2025.02.28 |
K ์ต๊ทผ์ ์ด์ (0) | 2025.02.27 |