๋ฐ์ํ
์ ํ ๋ฐ์ดํฐ์ ๋น์ ํ ๋ฐ์ดํฐ
๋๋ค ํฌ๋ ์คํธ์ ๋ํด ๋ฐฐ์ฐ๊ธฐ ์ ์ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃจ์๋ ๋ฐ์ดํฐ๋ฅผ ๋๋์๋ณด๊ฒ ์ต๋๋ค.
- ๊ธธ์ด, ๋์ด, ๋ฌด๊ฒ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ CSV ํ์ผ์ ๊ฐ์ง๋ฐํ ์ ๋ฆฌ๋์ด ์์์ฃ .
- ์ด๋ฒ์๋ ์ฌ์ฉํ ์์ธ ๋ฐ์ดํฐ๋ CSV ํ์ผ์ด์์ต๋๋ค.
# CSV ํ์ผ ์์
length, height, width
8.4, 2.11, 1.41
13.7, 3.53, 2.0
- ์ด๋ฐ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ ๋ฐ์ดํฐ(structured data)๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ฝ๊ฒ ๋งํด, ์ด๋ค ๊ตฌ์กฐ๋ก ๋์ด์๋ค๋ ๋ป์ด์ฃ .
- ์ด๋ฐ ๋ฐ์ดํฐ๋ CSV๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(DataBase), ํน์ ์์ (Excel)์ ์ ์ฅํ๊ธฐ ์ฝ์ต๋๋ค.
- ์จ๋ผ์ธ ์ผํ๋ชฐ์ ์ง์ด๋ ์ํ๊ณผ ์ฐ๋ฆฌ๊ฐ ๊ตฌ๋งคํ ์ผํ ์ ๋ณด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ ์ ํ ๋ฐ์ดํฐ์ ์ํฉ๋๋ค.
- ์ฌ์ค ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ค๋ฃจ๋ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ ํ ๋ฐ์ดํฐ์ ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ํ ๋ฐ์ดํฐ์ ๋ฐ๋๋๋ ๋ฐ์ดํฐ๋ฅผ ๋น์ ํ ๋ฐ์ดํฐ(unstructured data)๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
- ๋น์ ํ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๋ก ํํํ๊ธฐ ์ด๋ ค์ด ๊ฒ๋ค์ ๋๋ค.
- ์ฐ๋ฆฌ ์ฃผ๋ณ์์ ์ฐพ์๋ณด๋ฉด, ์ฑ ์ ๊ธ๊ณผ ๊ฐ์ ํ ์คํธ ๋ฐ์ดํฐ, ๋์งํธ ์นด๋ฉ๋ผ๋ก ์ฐ์ ์ฌ์ง, ํธ๋ํฐ์ผ๋ก ๋ฃ๋ ๋์งํธ ์์ ๋ฑ์ด ์์ต๋๋ค.
ํ ์คํธ๋ ์ฌ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๊ฐ๋ฅ?
๋น์ ํ ๋ฐ์ดํฐ๋ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๋ฐ์ ํด์์ต๋๋ค.
ํนํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ์ด๋ CSV์ ๋ด๊ธฐ ์ด๋ ค์ด ํ ์คํธ ๋ฐ์ดํฐ๋ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ต๋๋ค:
์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ: ์คํค๋ง๊ฐ ๊ณ ์ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ ์ ์์ต๋๋ค.
ํ์ฅ์ฑ: ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํ์ฌ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ง์: ๋ฌธ์, ํค-๊ฐ, ๊ทธ๋ํ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ์ฌ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ ํ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ขฐํ ์ ์๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์๋ธ ํ์ต(ensemble learning)์ด ์์ต๋๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๋ก ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ฌ๋ฌ ๋ชจ๋ธ์ ์กฐํฉํ์ฌ ๋ ๋์ ์์ธก ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์์๋ธ ํ์ต์ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐฐ๊น (Bagging), ๋ถ์คํ (Boosting), ์คํํน(Stacking) ๋ฑ์ด ์์ต๋๋ค.
- ์ด ๋ฐฉ๋ฒ๋ค์ ๊ฐ๊ฐ์ ๊ธฐ๋ณธ ๋ชจ๋ธ๋ค์ด ๊ฐ์ง ์ฝ์ ์ ๋ณด์ํ์ฌ ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ฐ๋ฉด, ๋น์ ํ ๋ฐ์ดํฐ์ ๋ํด์๋ ์ ๊ฒฝ๋ง ์๊ณ ๋ฆฌ์ฆ์ด ํจ๊ณผ์ ์ ๋๋ค.
- ๋น์ ํ ๋ฐ์ดํฐ๋ ๊ท์น์ฑ์ ์ฐพ๊ธฐ ์ด๋ ค์ ์ ํต์ ์ธ ๋จธ์ ๋ฌ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ธ์ ๋ง๋ค๊ธฐ ๊น๋ค๋กญ์ง๋ง, ์ ๊ฒฝ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์กํ ํจํด์ ํ์ตํ๊ณ , ์ด๋ฏธ์ง ์ธ์ ๋ฐ ์์ฐ์ด ์ฒ๋ฆฌ์ ๊ฐ์ ๋ถ์ผ์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
- ์ ๊ฒฝ๋ง์ ์ฌ๋ฌ ์ธต์ ๋ด๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ ์ธต์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ณํํ์ฌ ์ต์ข ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค. ์ต๊ทผ์ ๋ฐ์ ๋๋ถ์ ์ ๊ฒฝ๋ง์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด ๋งค์ฐ ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ๋์์ต๋๋ค.
Random Forest (๋๋ค ํฌ๋ ์คํธ)
๋๋ค ํฌ๋ ์คํธ(Random Forest)๋ ์์๋ธ ํ์ต์ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์์ ์ ์ธ ์ฑ๋ฅ ๋๋ถ์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๋๋คํ๊ฒ ์์ฑํ๊ณ , ๊ฐ ํธ๋ฆฌ์ ์์ธก์ ์กฐํฉํ์ฌ ์ต์ข ์์ธก์ ๋ง๋ญ๋๋ค.
- ๊ทธ๋ฌ๋ฉด Random Forest(๋๋ค ํฌ๋ ์คํธ)๊ฐ ์ด๋ป๊ฒ ์ฒ์ ๊ตฌ์ฑํ๋์ง ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
Boostrap Sampling (๋ถํธ์คํธ๋ฉ ์ํ๋ง)
- ๋๋ค ํฌ๋ ์คํธ๋ ๊ฐ ํธ๋ฆฌ๋ฅผ ํ๋ จํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋๋คํ๊ฒ ์์ฑํฉ๋๋ค.
- ์ด๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ถํธ์คํธ๋ฉ ์ํ๋ง์ ๋๋ค. ์ ๋ ฅํ ํ๋ จ ๋ฐ์ดํฐ์์ ๋๋คํ๊ฒ ์ํ์ ์ถ์ถํ๋ฉฐ, ์ค๋ณต๋ ์ํ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, 1,000๊ฐ์ ์ํ ์ค์์ 100๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ, ํ ๋ฒ ๋ฝ์ ์ํ์ ๋ค์ ๊ฐ๋ฐฉ์ ๋ฃ๊ณ ๊ณ์ํด์ ์ํ์ ๋ฝ์ต๋๋ค.
- ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ํ์ ๋ถํธ์คํธ๋ฉ ์ํ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ํ 1000๊ฐ์ ์ํ์์ ์ค๋ณตํด์ 1000๊ฐ์ ์ํ์ ๋ฝ๊ธฐ ๋๋ฌธ์ ๋ถํธ์คํธ๋ฉ ์ํ์ ํ๋ จ์ธํธ์ ํฌ๊ธฐ๊ฐ ๊ฐ์ต๋๋ค.
๋ถ์คํธํธ๋ฉ์ด ๋ฌด์์ธ๊ฐ์?
๋ถํธ์คํธ๋ฉ ๋ฐฉ์์ด๋ ๋ฐ์ดํฐ ์ธํธ์์ ์ค๋ณต์ ํ์ฉํ์ฌ ์ํ์ ์ถ์ถํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐฉ์ 1,000๊ฐ์ ์ํ์ด ์๋ค๊ณ ํ ๋, ๋ถํธ์คํธ๋ฉ ๋ฐฉ์์ ๋จผ์ ํ ๊ฐ์ ์ํ์ ๋ฝ๊ณ ์ด๋ฅผ ๋ค์ ๊ฐ๋ฐฉ์ ๋ฃ์ด ๋ค์ ์ํ์ ๋ฝ๋ ๋ฐฉ์์ ๋ฐ๋ณตํฉ๋๋ค.
์ด๋ ๊ฒ ์ถ์ถ๋ ์ํ๋ค์ ๋ถํธ์คํธ๋ฉ ์ํ์ด๋ผ๊ณ ํฉ๋๋ค.
ํน์ฑ ์ ํ
- ๊ฐ ๋ ธ๋๋ฅผ ๋ถํ ํ ๋ ์ ์ฒด ํน์ฑ ์ค ์ผ๋ถ๋ฅผ ๋ฌด์์๋ก ์ ํํ ํ, ์ด ์ค์์ ์ต์ ์ ๋ถํ ์ ์ฐพ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก RandomForestClassifier๋ ์ ์ฒด ํน์ฑ ๊ฐ์์ ์ ๊ณฑ๊ทผ๋งํผ ํน์ฑ์ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 4๊ฐ์ ํน์ฑ์ด ์์ ๊ฒฝ์ฐ ๋ ธ๋๋ง๋ค 2๊ฐ๋ฅผ ๋๋คํ๊ฒ ์ ํํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ๋ฉด, RandomForestRegressor๋ ์ ์ฒด ํน์ฑ์ ์ฌ์ฉํฉ๋๋ค.
- Scikit-learn์ RandomForest๋ ๊ธฐ๋ณธ์ ์ผ๋ก 100๊ฐ์ Decision Tree(๊ฒฐ์ ํธ๋ฆฌ)๋ฅผ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํ๋ จํฉ๋๋ค.
- Classification (๋ถ๋ฅ)์ธ ๊ฒฝ์ฐ์ ๊ฐ ํธ๋ฆฌ์ ํด๋์ค๋ณ ํ๋ฅ ์ ํ๊ท ํ์ฌ ๊ฐ์ฅ ๋์ ํ๋ฅ ์ ๊ฐ์ง ํด๋์ค๋ฅผ ์์ธก์ผ๋ก ์ผ์ต๋๋ค.
- Regression (ํ๊ท)์ธ ๊ฒฝ์ฐ๋ ๋จ์ํ ๊ฐ ํธ๋ฆฌ์ ์์ธก์ ํ๊ท ํ ํฉ๋๋ค.
Classification(๋ถ๋ฅ): ๊ฐ ํธ๋ฆฌ์ ํด๋์ค๋ณ ํ๋ฅ ์ ํ๊ท ํ์ฌ ๊ฐ์ฅ ๋์ ํ๋ฅ ์ ๊ฐ์ง ํด๋์ค๋ฅผ ์์ธกํฉ๋๋ค.
Regression(ํ๊ท): ๋จ์ํ ๊ฐ ํธ๋ฆฌ์ ์์ธก์ ํ๊ท ํ์ฌ ์ต์ข ์์ธก ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- ๋๋ค ํฌ๋ ์คํธ๋ ๋๋คํ๊ฒ ์ ํํ ์ํ๊ณผ ํน์ฑ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ๊ฒ์ฆ ์ธํธ์ ํ ์คํธ ์ธํธ์์ ์์ ์ ์ธ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๋งค๊ฐ๋ณ์ ์ค์ ๋ง์ผ๋ก๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์ด์ ์ฌ์ดํท๋ฐ์ RandomForestClassifier ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํธ ์์ธ์ ๋ถ๋ฅํ๋ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๋จผ์ , ์์ธ ๋ฐ์ดํฐ์ ์ ํ๋ค์ค(Pandas)๋ก ๋ถ๋ฌ์ค๊ณ ํ๋ จ ์ธํธ์ ํ ์คํธ ์ธํธ๋ก ๋๋๋ ๊ณผ์ ์ ๋๋ค.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
wine = pd.read_csv('https://bit.ly/wine_csv_data')
data = wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine['class'].to_numpy()
train_input, test_input, train_target, test_target = train_test_split(
data, target, test_size=0.2, random_state=42)
- ๊ต์ฐจ ๊ฒ์ฆ์ ์ํํ ๋ cross_validate() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ ์ ์์ต๋๋ค.
- RandomForestClassifier๋ ๊ธฐ๋ณธ์ ์ผ๋ก 100๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ, n_jobs ๋งค๊ฐ๋ณ์๋ฅผ 1๋ก ์ค์ ํ์ฌ ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ํ์ฉํด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- cross_validate() ํจ์์ n_jobs ๋งค๊ฐ๋ณ์๋ฅผ 1๋ก ์ค์ ํ์ฌ ์ต๋ํ ๋ณ๋ ฌ๋ก ๊ต์ฐจ ๊ฒ์ฆ์ ์ํํฉ๋๋ค.
- ๋ํ, return_train_score ๋งค๊ฐ๋ณ์๋ฅผ True๋ก ์ค์ ํ๋ฉด ๊ฒ์ฆ ์ ์๋ฟ๋ง ์๋๋ผ ํ๋ จ ์ธํธ์ ๋ํ ์ ์๋ ๋ฐํ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด ํ๋ จ ์ธํธ์ ๊ฒ์ฆ ์ธํธ์ ์ ์๋ฅผ ๋น๊ตํ์ฌ ๊ณผ๋์ ํฉ ์ฌ๋ถ๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. (return_train_score ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ False์ ๋๋ค).
from sklearn.model_selection import cross_validate
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_jobs=-1, random_state=42)
scores = cross_validate(rf, train_input, train_target, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.9973541965122431 0.8905151032797809
- ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ๋ จ์ธํธ์ ๋ค์ Overfitting(๊ณผ๋์ ํฉ)๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ๋๋ค ํฌ๋ ์คํธ๋ ์ฌ๋ฌ ๊ฒฐ์ ํธ๋ฆฌ์ ์์๋ธ ๋ชจ๋ธ๋ก, ๊ฐ ๊ฒฐ์ ํธ๋ฆฌ ๋ชจ๋ธ์ด ์ ๊ณตํ๋ ์ฃผ์ ๋งค๊ฐ๋ณ์๋ค์ ์ ๊ณตํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, criterion, max_depth, max_features, min_samples_split, min_impurity_decrease, min_samples_leaf ๋ฑ์ด ์์ต๋๋ค.
- ๋ํ, ๋๋ค ํฌ๋ ์คํธ๋ ๊ฒฐ์ ํธ๋ฆฌ์ ์ค์ํ ์ฅ์ ์ค ํ๋์ธ ํน์ฑ ์ค์๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ๋๋ค ํฌ๋ ์คํธ์ ํน์ฑ ์ค์๋๋ ๊ฐ ๊ฒฐ์ ํธ๋ฆฌ์ ํน์ฑ ์ค์๋๋ฅผ ์ข ํฉํ ๊ฒ์ ๋๋ค.
- ์ด์ ์์ ์ธ๊ธํ ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ์ ํ๋ จ ์ธํธ์ ํ๋ จ์ํค๊ณ , ํด๋น ๋ชจ๋ธ์ ํน์ฑ ์ค์๋๋ฅผ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค.
- ํน์ฑ ์ค์๋๋ฅผ ํตํด ๋ชจ๋ธ์ด ๊ฐ ํน์ฑ์ ์ผ๋ง๋ ์์กดํ๊ณ ์๋์ง ์ ์ ์์ต๋๋ค.
rf.fit(train_input, train_target)
print(rf.feature_importances_)
# [0.23167441 0.50039841 0.26792718]
- ํน์ฑ ์ค์๋ ๋ถ์ ๊ฒฐ๊ณผ, ๋ ๋ฒ์งธ ํน์ฑ์ธ ๋น๋์ ์ค์๋๊ฐ ๊ฐ์ํ๊ณ ์์ฝ์ฌ ๋์์ pH์ ์ค์๋๊ฐ ์ฝ๊ฐ ์์นํ์ต๋๋ค.
- ์ด๋ ๋๋ค ํฌ๋ ์คํธ๊ฐ ์ผ๋ถ ํน์ฑ์ ๋๋คํ๊ฒ ์ ํํ์ฌ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ํ๋ จํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ด๋ฌํ ๋ฐฉ์์ ํน์ ํน์ฑ์ ๊ณผ๋ํ๊ฒ ์ง์คํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ๋ ๋ง์ ํน์ฑ์ด ๋ชจ๋ธ ํ๋ จ์ ๊ธฐ์ฌํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ณผ๋์ ํฉ์ ์ค์ด๊ณ ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ์์ ๊ฐ ํน์ฑ์ ์ค์๋๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ๋, ๋ชจ๋ธ์ด ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ํ๋ จํ ๋ ์ผ๋ถ ํน์ฑ์ ๋๋คํ๊ฒ ์ ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฅผ ํตํด ํ ํน์ฑ์ ๊ณผ๋ํ๊ฒ ์ง์คํ์ง ์๊ณ ์ฌ๋ฌ ํน์ฑ์ด ํ๋ จ์ ๊ธฐ์ฌํ ์ ์์ด ๊ณผ๋์ ํฉ์ ์ค์ด๊ณ ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๋์ ๋๋ค.
- ๋๋ค ํฌ๋ ์คํธ์ ๋ ๋ค๋ฅธ ์ ์ฉํ ๊ธฐ๋ฅ์ OOB (Out-Of-Bag) ์ ์์ ๋๋ค.
- ๋ถํธ์คํธ๋ฉ ์ํ๋ง ๊ณผ์ ์์ ํ๋ จ์ ํฌํจ๋์ง ์์ ์ํ์ OOB ์ํ์ด๋ผ ๋ถ๋ฅด๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํด ๋ชจ๋ธ์ ํ๊ฐํ ์ ์์ต๋๋ค.
- OOB ์ ์๋ ๊ฒ์ฆ ์ธํธ์ ์ญํ ์ ํ๋ฉฐ, RandomForestClassifier ํด๋์ค์์ oob_score=True๋ก ์ค์ ํ๋ฉด ๊ณ์ฐ๋ฉ๋๋ค.
- ๋ชจ๋ธ์ ํ๋ จํ๊ณ OOB ์ ์๋ฅผ ์ถ๋ ฅํด๋ณผ ์ ์์ต๋๋ค.
rf = RandomForestClassifier(oob_score=True, n_jobs=-1, random_state=42)
rf.fit(train_input, train_target)
print(rf.oob_score_)
# 0.8934000384837406
- ๊ต์ฐจ๊ฒ์ฆ์์ ์ป์ ์ ์์ ๋งค์ฐ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
OOB ์ ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ต์ฐจ๊ฒ์ฆ์ ๋์ ํ ์ ์์ด์ ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ จ์ธํธ์ ๋ ๋ง์ ์ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Summary
์์๋ธ ํ์ต
- ์์๋ธ ํ์ต: ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋ธ์ ํ๋ จ์์ผ ๋ ์ข์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋๋ค ํฌ๋ ์คํธ (Random Forest)
- ๋๋ค ํฌ๋ ์คํธ: ๊ฒฐ์ ์ ๋๋ฌด ๊ธฐ๋ฐ์ ์์๋ธ ํ์ต ๋ฐฉ๋ฒ์ผ๋ก, ๋ถํธ์คํธ๋ฉ ์ํ์ ์ฌ์ฉํ๊ณ , ๋๋คํ๊ฒ ์ผ๋ถ ํน์ฑ์ ์ ํํ์ฌ ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- ์ฃผ์ ๋งค๊ฐ๋ณ์:
- n_estimators: ์์๋ธ์ ๊ตฌ์ฑํ ํธ๋ฆฌ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 100)
- criterion: ๋ถ์๋ ์ธก์ ๋ฐฉ๋ฒ (gini ๋๋ entropy)
- max_depth: ํธ๋ฆฌ์ ์ต๋ ๊น์ด (๊ธฐ๋ณธ๊ฐ: None)
- min_samples_split: ๋ ธ๋๋ฅผ ๋๋๊ธฐ ์ํ ์ต์ ์ํ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 2)
- max_features: ๋ถํ ์ ์ฌ์ฉํ ํน์ฑ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: auto, ํน์ฑ ๊ฐ์์ ์ ๊ณฑ๊ทผ)
- bootstrap: ๋ถํธ์คํธ๋ฉ ์ํ ์ฌ์ฉ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: True)
- oob_score: OOB ์ํ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ํ๊ฐ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: False)
- n_jobs: ๋ณ๋ ฌ ์คํ์ ์ฌ์ฉํ CPU ์ฝ์ด ์ (๊ธฐ๋ณธ๊ฐ: 1)
๋ฐ์ํ
'๐น๏ธ ํผ๊ณต๋จธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํผ๊ณต๋จธ์ ] Tree's Ensemble - Gradient Boosting (๊ทธ๋ ์ด์ธํธ ๋ถ์คํ ) (0) | 2024.07.30 |
---|---|
[ํผ๊ณต๋จธ์ ] Tree's Ensemble - Extra Tree (์์คํธ๋ผ ํธ๋ฆฌ) (0) | 2024.07.30 |
[ํผ๊ณต๋จธ์ ] Cross-Validation & Grid Search (0) | 2024.07.30 |
[ํผ๊ณต๋จธ์ ] Decision Tree (๊ฒฐ์ ํธ๋ฆฌ) (0) | 2023.11.06 |
[ํผ๊ณต๋จธ์ ] Stochastic Gradient Descent (ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ) (0) | 2023.11.05 |