ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ ๊ฐ์ด๋ 1ํ (๊ถ์ฒ ๋ฏผ)์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ ๊ธ์ ๋๋ค.
Classification
- ์ ๋ต์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋ชจ๋ธ์ ํ์ต์ํค๊ณ ์ค์ค๋ก ๋ถ๋ฅํ ์ ์๋๋ก ํจ
- Decision Tree
- ๋ฐ์ดํฐ์ ๊ท์น์ ์ค์ค๋ก ์ฐพ์๋ด๊ณ ํ์ตํ์ฌ ํธ๋ฆฌ ๊ธฐ๋ฐ์ ๋ถ๋ฅ ๊ท์น์ ๋ง๋ค์ด๋
- ๊ท์น์ ๊ฐ์ฅ ์ฝ๊ฒ ํํํ๋ ๋ฐฉ๋ฒ์ if/else ๊ธฐ๋ฐ์ผ๋ก ๋ํ๋ด๋ ๊ฒ
- → ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํ ๊ธฐ์ค์ ์ธ์ธ ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ถ๋ฅ๊ฐ ๋ ์ ์๋๋ก ํด์ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ด ์ฌ๋ผ๊ฐ
- ๋ด๋ถ ๋ ธ๋๋ค์ ๊ท์น ๋ ธ๋๊ฐ ๋๋ฉฐ, ๋จ๋ง๋ ธ๋(=๋ฆฌํ๋ ธ๋)๋ ๊ฒฐ์ ๋ ํด๋์ค(label)๊ฐ์ด ๋จ
- ๊ท์น๋ ธ๋๊ฐ ๋ง์์ง์๋ก ํด๋์ค ๊ฐ์ ๊ฒฐ์ ํ๋๋ฐ ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋จ→ ํธ๋ฆฌ์ ๊น์ด๊ฐ ๊น์ด์ง ์๋ก ์์ธก ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์
- → overfitting์ ์ํ์ฑ์ด ์ปค์ง
- overfitting์ ๋ง๊ธฐ ์ํด์๋ ์ต๋ํ ๊ท ์ผํ ๋ฐ์ดํฐ์
์ ๊ตฌ์ฑํ ์ ์๋๋ก ํด์ผ ํจ
- ๊ท ์ผํ ๋ฐ์ดํฐ๋?
- ๋ง์ ์ ๋ณด ์์ด ๋ฐ์ดํฐ๋ฅผ ๋๋ ทํ๊ฒ ๊ตฌ๋ถ ํ ์ ์๋ ๋ฐ์ดํฐ
- ๊ท ์ผํ ๋ฐ์ดํฐ๋?
- decision tree๋ ๊ฐ์ฅ ๊ท ์ผํ ๋ฐ์ดํฐ์ ์ ์ฐพ์๋ผ ์ ์๋๋ก ๊ท์น์ ๋ง๋ค์ด์ค
- ์ ๋ณด์ ๊ท ์ผ๋๋ฅผ ์ธก์ ํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ ์ํธ๋กํผ๋ฅผ ์ด์ฉํ ์ ๋ณด์ด๋ ์ง์์ ์ง๋๊ณ์๊ฐ ์กด์ฌํจ
- ์ ๋ณด์ด๋ ์ง์
- ์ ๋ณด์ด๋์ ์ํธ๋กํผ์ ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ํจ
- ์ํธ๋กํผ๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ ์งํฉ์ ํผ์ก๋๋ฅผ ์ด์ผ๊ธฐํจ
- ์ํธ๋กํผ ๊ฐ์ด ํด์๋ก ๋ฐ์ดํฐ ๊ท ์ผ๋๊ฐ ๋จ์ด์ง๊ณ , ์ํธ๋กํผ ๊ฐ์ด ์์์๋ก ๋ฐ์ดํฐ ๊ท ์ผ๋๊ฐ ๋์์ง
- ์ ๋ณด์ด๋์ง์ = 1 - ์ํธ๋กํผ์ง์
- ์ ๋ณด์ด๋ ์ง์๋ฅผ ํตํด ๋ถํ ๊ธฐ์ค์ ์ก์ผ๋ฉฐ, ์ ๋ณด์ด๋์ด ๋์ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํจ
- ์ ๋ณด์ด๋์ ์ํธ๋กํผ์ ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ํจ
- ์ง๋๊ณ์
- ๊ฒฝ์ ํ์์ ์ฌ์ฉ๋๋ ์ง์๋ก 0์ผ๋ก ๊ฐ์๋ก ํ๋ฑํ๊ณ 1๋ก ๊ฐ์๋ก ๋ถํ๋ฑํจ
- ์ง๋๊ณ์๊ฐ ๋ฎ์์๋ก ๋ฐ์ดํฐ ๊ท ์ผ๋๊ฐ ๋๊ณ , ์ง๋๊ณ์๊ฐ ๋์์๋ก ๋ฐ์ดํฐ ๊ท ์ผ๋๊ฐ ๋ฎ์์ง
- ์ง๋๊ณ์๊ฐ ๋ฎ์ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํจ
- ์ ๋ณด์ด๋ ์ง์
- ์ฌ์ดํท๋ฐ์์ ์ ๊ณตํ๋ DecisionTreeClassifier๋ ์ง๋๊ณ์๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ์
์ ๋ถํ ํจ
- ์ง๋๊ณ์๊ฐ ๋ฎ์ ์กฐ๊ฑด๋ค์ ์ฐพ๊ณ , ์ด ์กฐ๊ฑด๋ค์ ๋ง์ถฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ ๋ถ๋ฅํจ
- ์ฅ์
- ๊ท ์ผ๋๋ผ๋ ๊ธฐ์ค์ ํตํด ๋ฐ์ดํฐ์ ์ ๋ถ๋ฅ → ์๊ณ ๋ฆฌ์ฆ์ด ์ฝ๊ณ ์ง๊ด์ ์
- ๋ฐ์ดํฐ์ ๊ท ์ผ๋๋ฅผ ์ ์ธํ๊ณ feature scaling, ์ ์ฒ๋ฆฌ ๋ฑ์ ์์ ์ ํฌ๊ฒ ์ ๊ฒฝ์ธ ํ์๊ฐ ์์
- ๋จ์
- overfitting์ ๊ฐ๋ฅ์ฑ์ด ํผ
- ๋ชจ๋ ์ํฉ์ ๋ง์กฑํ ์ ์๋ค๋ ๊ฒ์ ์ธ์ ํ๊ณ ํธ๋ฆฌ์ depth ๋ฑ์ ํ๋ํด์ฃผ๋ ๊ฒ์ด ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค ์ ์์
- overfitting์ ๊ฐ๋ฅ์ฑ์ด ํผ
- Code
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# Decision Tree ๋ชจ๋ธ ์์ฑํ๊ธฐ
dt_clf = DecisionTreeClassifier()
# training dataset ๋ถ๋ฌ์ค๊ธฐ
train_data = pd.read_csv("C:/Users/1ayou/PycharmProjects/dacon_astronomy/dataset/train.csv")
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=11)
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)
print('์ ํ๋ {0:.4f}'.format(accuracy))
- ์์๋ธ
- ๋จ์ผ ๋ถ๋ฅ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ฅผ ์ด์ฉํด ์์ธก๊ฐ์ ๊ฒฐํฉํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๋์ถํจ
- ์ ํ๋ฐ์ดํฐ ๋ถ๋ฅ ์ ์์๋ธ ๋ชจ๋ธ์ด ๋จ์ผ ๋ชจ๋ธ๋ณด๋ค ๋ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์
- ํ์ต ์ ํ
- ๋ณดํ
- ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๊ฐ ํฌํ๋ฅผ ํตํด ์ต์ข ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํจ
- ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ ๋ชจ๋ ์๋ก ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ
- ๋ณดํ
์ ํ
- ํ๋ ๋ณดํ
- ๋ค์๊ฒฐ์ ์์น
- ๋ค์์ ๋ถ๋ฅ๊ธฐ๊ฐ ์์ธกํ ๊ฒฐ๊ณผ๊ฐ์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ด์ฉํจ
- ์ํํธ ๋ณดํ
- ๋ถ๋ฅ๊ธฐ๋ค์ด label ๊ฐ์ผ๋ก ๊ฒฐ์ ํ ํ๋ฅ ์ ๋ํ๊ณ ํ๊ท ์ ๋ด์ด ํ๋ฅ ์ด ๊ฐ์ฅ ๋์ label์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ด์ฉ
- ํ๋ ๋ณดํ
- ๋ฐฐ๊น
- ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๊ฐ ํฌํ๋ฅผ ํตํด ์ต์ข ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํจ
- ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ ๋ชจ๋ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ
- ๋ฐ์ดํฐ ์ํ๋ง์ ๋ค๋ฅด๊ฒ ํ์ฌ ํ์ต
- ๋ถ์คํ
- ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๊ฐ ์์ฐจ์ ์ผ๋ก ํ์ต์ ์ํ
- ์์์ ํ์ตํ ๋ถ๋ฅ๊ธฐ๊ฐ ์์ธก ์คํจํ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ธกํ ์ ์๋๋ก ๋ค์ ๋ถ๋ฅ๊ธฐ์๊ฒ ๊ฐ์ค์น๋ฅผ ์ค
- ๋ณดํ
- ๋๋คํฌ๋ ์คํธ
- bagging
- ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ฅผ ๋ง๋ค๊ณ , ๋ณดํ ์ ํตํด ์ต์ข ๊ฒฐ์ ์ ํจ
- code
- bagging
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# Decision Tree ๋ชจ๋ธ ์์ฑํ๊ธฐ
dt_clf = DecisionTreeClassifier()
bag_clf = BaggingClassifier(dt_clf)
# training dataset ๋ถ๋ฌ์ค๊ธฐ
train_data = pd.read_csv("./dataset/train.csv")
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=11)
dt_clf.fit(X_train, y_train)
bag_clf.fit(X_train, y_train)
pred_dt = dt_clf.predict(X_test)
pred_bg = bag_clf.predict(X_test)
accuracy_dt = accuracy_score(y_test, pred_dt)
accuracy_bg = accuracy_score(y_test, pred_bg)
print('์ ํ๋ {0:.4f}'.format(accuracy_dt))
print('์ ํ๋ {0:.4f}'.format(accuracy_bg))
- RandomForestClassifier
- ๋ฐ์ดํฐ๋ฅผ ์์ํ ํ decision tree์ ์์๋ธ ๋ชจ๋ธ์ random forest classifier
- ์์ํ : Randomization
- Random Forest : ์์ํ ํ Tree ๋ชจ๋ธ๋ค์ ๊ฒฐํฉํจ → Tree ๋ชจ๋ธ์ด ์ฌ๋ฌ๊ฐ ์์ด์ Forest๋ผ๊ณ ํ ๋ฏ ํจ..
- ์ฌ๋ฌ๊ฐ์ decision tree๋ฅผ ์ด์ฉํด ๋ฐฐ๊น ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ต, ์ต์ข ์ ์ผ๋ก ๋ณดํ ์ ํตํด ์์ธก ๊ฒฐ๊ด๊ฐ์ ๋ด๋์
- ํ์ตํ ๋ฐ์ดํฐ์ ์ ์ผ๋ถ ์ค์ฒฉ๋๋๋ก ๋๋ค ์ํ๋งํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํจ → bootstrapping ๋ถํ ๋ฐฉ์์ ์ด์ฉํจ
- ๋ฐ์ดํฐ๋ฅผ ์์ํ ํ decision tree์ ์์๋ธ ๋ชจ๋ธ์ random forest classifier
'๐ก WIDA > DACON ๋ถ๋ฅ-ํ๊ท' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DACON/๊น๋ฏผํ] ๋ถ๋ฅ ๋ชจ๋ธ ๋ฏ์ด๋ณด๊ธฐ, ๋ถ๋ฅ๋ชจ๋ธ ํ๊ฐ๋ฐฉ์ (0) | 2023.03.30 |
---|---|
[DACON/๊น๊ท๋ฆฌ] ๋ถ๋ฅ ๋ชจ๋ธ ์์๋ณด๊ธฐ (1) | 2023.03.24 |
[DACON/์ต๋ค์] ๋ถ๋ฅ ๋ชจ๋ธ ์์๋ณด๊ธฐ (0) | 2023.03.23 |
[DACON/๊น์ธ์ฐ] ๋ถ๋ฅ ๋ชจ๋ธ ์์๋ณด๊ธฐ (0) | 2023.03.23 |
[DACON/๊น๊ฒฝ์] ๋ถ๋ฅ ๋ชจ๋ธ ์์๋ณด๊ธฐ (0) | 2023.03.23 |