A A
[ํ˜ผ๊ณต๋จธ์‹ ] Decision Tree (๊ฒฐ์ • ํŠธ๋ฆฌ)

Logistic Regression (๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€) ๋กœ ์™€์ธ ๋ถ„๋ฅ˜ํ•˜๊ธฐ

์™€์ธ์„ ๋ถ„๋ฅ˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ผ๋‹จ ๋ฐ์ดํ„ฐ์…‹์„ ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.
import pandas as pd
wine = pd.read_csv('https://bit.ly/wine_csv_data')
wine.head()

  • ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ์…‹์„ Pandas DataFrame์œผ๋กœ ์ž˜ ๋ถˆ๋Ÿฌ ์™”๋Š”์ง€ head() Method๋กœ ํ•œ๋ฒˆ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ 3๊ฐœ์˜ ์—ด(alcohol, suger, pH)๋Š” ์•Œ์ฝ”์˜ฌ ๋„์ˆ˜, ๋‹น๋„, pH(์‚ฐ๋„)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • class๋Š” ํƒ€๊นƒ๊ฐ’์ด 0์ด๋ฉด ๋ ˆ๋“œ์™€์ธ, 1์ด๋ฉด ํ™”์ดํŠธ ์™€์ธ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฑด ๋ ˆ๋“œ & ํ™”์ดํŠธ ์™€์ธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” Binary Classification(์ด์ง„ ๋ถ„๋ฅ˜)๋ฌธ์ œ ์ธ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ „์ฒด ์™€์ธ์˜ ๋ฐ์ดํ„ฐ์—์„œ ํ™”์ดํŠธ ์™€์ธ์„ ๊ณจ๋ผ๋‚ด๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  • ๊ณจ๋ผ๋‚ด๊ธฐ ์ „์—, ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ๊ฐ ์—ด & ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# wine-dataframe(์–ด๋–ค type์˜ ๋ฐ์ดํ„ฐ, ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ์ธ์ง€ ์ •๋ณด ์ œ๊ณต)
# Non-Null count: ๋ˆ„๋ฝ๋œ ๊ฐ’ ํ™•์ธ (๋งŒ์•ฝ ์žˆ์œผ๋ฉด 6496๊ฐœ๊ฐ€ ๋‚˜์˜ด)
wine.info()

# ํ‰๊ท , ํ‘œ์ค€ํŽธ์ฐจ, ์ตœ์†Œ, ์ตœ๋Œ€๊ฐ’ ๋“ฑ ์ •๋ณด ํ™•์ธ (describe method)
wine.describe()

์ด๋ ‡๊ฒŒ EDA ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์•Œ์ˆ˜ ์žˆ๋Š”๊ฑด ์•Œ์ฝ”์˜ฌ ๋„์ˆ˜, ๋‹น๋„, pH(์‚ฐ๋„)๊ฐ’์˜ scale์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Scikit-learn์˜ StandardScaler ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠน์„ฑ๋“ค์„ ํ‘œ์ค€ํ™” ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ์ „์—, Pandas Dataframe์„ Numpy ๋ฐฐ์—ด๋กœ ๋ด๊พธ๊ณ  Training, Test set๋กœ ๋‚˜๋ˆ„๊ฒ ์Šต๋‹ˆ๋‹ค.
# Pandas Dataframe๋ฅผ numpy ๋ฐฐ์—ด๋กœ ๋ด๊ฟˆ
data = wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine['class'].to_numpy()
  • wine์˜ Dataframe์—์„œ ์ฒ˜์Œ 3๊ฐœ์˜ ์—ด์„ Numpy ๋ฐฐ์—ด๋กœ ๋ด๊ฟ”์„œ data์— ์ €์žฅํ•˜๊ณ , class ์—ด์€ ๋ด๊ฟ”์„œ target ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Training, Test set๋กœ ๋‚˜๋ˆ„๊ฒ ์Šต๋‹ˆ๋‹ค.
# Data๋ฅผ train, test set๋กœ ๋‚˜๋ˆ”
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42)
์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ์— train_test_split() ํ•จ์ˆ˜๋Š” ์„ค์ •๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 25%๋ฅผ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ์ƒ˜ํ”Œ๊ฐœ์ˆ˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋งŽ์œผ๋ฏ€๋กœ 20%์ •๋„๋งŒ Test Set๋กœ ๋‚˜๋ˆ„๊ฒ ์Šต๋‹ˆ๋‹ค. 
์—ฌ๊ธฐ์„œ test_size=0.2๊ฐ€ ์ด๋Ÿฐ ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ๋‚˜๋ˆˆ Training, Test set์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
print(train_input.shape, test_input.shape)
(5197, 3) (1300, 3)
  • Training set๋Š” 5,197๊ฐœ, Test set๋Š” 1,300๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ์ง„๊ฑธ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ StandardScaler ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ Training set๋ฅผ ์ „์ฒ˜๋ฆฌ ํ•œํ›„, ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ Test set๋„ ๋ณ€ํ™˜ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
  • ํ‘œ์ค€ ์ ์ˆ˜๋กœ ๋ณ€ํ™˜๋œ train_scaled, test_scaled๋ฅผ ์‚ฌ์šฉํ•ด์„œ Logistic Regression ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 
from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(train_scaled, train_target)
print(lr.score(train_scaled, train_target))
print(lr.score(test_scaled, test_target))
0.7808350971714451
0.7776923076923077
์ƒ๊ฐ์™ธ๋กœ, ์ ์ˆ˜๊ฐ€ ๋†’์ง€ ์•Š๋„ค์š”, ๋ญ”๊ฐ€ ์ ์ˆ˜๊ฐ€ ๋‚ฎ์œผ๋‹ˆ๊นŒ ๊ณผ๋Œ€์ ํ•ฉ ๋œ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜๋„ ์ด ๋ชจ๋ธ์„ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•™์Šตํ•œ ๊ณ„์ˆ˜ & ์ ˆํŽธ์„ ์ถœ๋ ฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# ํ•™์Šตํ•œ ๊ณ„์ˆ˜, ์ ˆํŽธ ์ถœ๋ ฅ
print(lr.coef_, lr.intercept_)
[[ 0.51270274. 1.6733911. -0.68767781 ]] [1.81777902]

Decision Tree(๊ฒฐ์ • ํŠธ๋ฆฌ)

๋ชจ๋ธ์˜ ์ •ํ™•๋„ ํŒ๋‹จ ๋ช‡ ์„ค๋ช…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Decision Tree(๊ฒฐ์ • ํŠธ๋ฆฌ) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๋‚˜๋ˆŒ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ๋“ค์„ ์ฐพ์•„์„œ ๋ณด๋ฉด ๊ณ„์† ์งˆ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์„œ ๋ถ„๋ฅ˜ ์ •ํ™•๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ Scikit-learn์€ Decision Tree Algorithm์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํ•œ๋ฒˆ  Scikit-learn์˜ Decision Tree Algorithm์„ ์‚ฌ์šฉํ•ด์„œ ๊ฒฐ์ •ํŠธ๋ฆฌ ๋ชจ๋ธ์„ ํ›ˆ๋ จ์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 
  • ์ฒ˜์Œ ๋ณด๋Š” ํด๋ž˜์Šค ์ด์ง€๋งŒ, ํ•™์Šต ๋ฐฉ๋ฒ•์€ Logistic Regression ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. fit() Method๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•œ ๋‹ค์Œ, score() Method๋กœ ์ •ํ™•๋„๋ฅผ ํ‰๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
from sklearn.tree import DecisionTreeClassifier

dt = DecisionTreeClassifier(random_state=42)
dt.fit(train_scaled, train_target)

print(dt.score(train_scaled, train_target)) # ํ›ˆ๋ จ ์„ธํŠธ
print(dt.score(test_scaled, test_target)) # ํ…Œ์ŠคํŠธ ์„ธํŠธ
0.996921300750433
0.8592307692307692
๋ณด์‹œ๋ฉด, ํ›ˆ๋ จ์„ธํŠธ์— ๋Œ€ํ•œ ์ ์ˆ˜๋Š” ๋†’์ง€๋งŒ ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ์„ฑ๋Šฅ์€ ๊ทธ์— ๋น„ํ•ด์„œ ์กฐ๊ธˆ ๋‚ฎ์€๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณผ๋Œ€ ์ ํ•ฉ ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.
๊ทผ๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๊ฒฐ์ •ํŠธ๋ฆฌ๋ฅผ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? Scikit-learn์€ plot_tree() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฒฐ์ •ํŠธ๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ทธ๋ฆผ
์œผ๋กœ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# ๊ฒฐ์ •ํŠธ๋ฆฌ ์‹œ๊ฐํ™”
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

plt.figure(figsize=(10,7))
plot_tree(dt)
plt.show()

  • ์ด ํŠธ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ๋“ค๊ณผ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฒฐ์ •ํŠธ๋ฆฌ์˜ ๋งจ์œ„๋Š” root node, ๋งจ ์•„๋ž˜๋Š” leaf node๋กœ ๋ด…๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์™€๋Š” ๋ฐ˜๋Œ€๋กœ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์ฐธ๊ณ  ์‚ฌํ•ญ.
๋๊นŒ์ง€ ์˜ค๋ฉด ์Œ์ˆ˜,์–‘์ˆ˜ ์ธ์ง€ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ(red,white wine ์ธ์ง€)
๋งˆ์ง€๋ง‰ leaf node์— ์žˆ๋Š” ์˜ˆ์ธก๊ฐ’์ด ์ƒˆ๋กœ์šด sample x์— ๋Œ€ํ•œ ์˜ˆ์ธก๊ฐ’.
๋ถ„๋ฅ˜์ธ ๊ฒฝ์šฐ ์ตœ๊ทผ์ ‘ ์ด์›ƒ๊ณผ ๋น„์Šท, ๋งˆ์ง€๋ง‰ leaf node์— ๋“ค์–ด์žˆ๋Š” sample๋“ค์ค‘ ๋‹ค์ˆ˜์˜ class๊ฐ€ ์˜ˆ์ธก ํด๋ž˜์Šค
ํšŒ๊ท€๋Š” ๋งˆ์ง€๋ง‰ leaf node์˜ sample๋“ค์˜ target๊ฐ’์˜ ํ‰๊ท ์ด x sample์˜ ์˜ˆ์ธก๊ฐ’.
๊ทผ๋ฐ, ํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด ๋ณด์ด์ง€ ์•Š๋‚˜์š”? ํ•œ๋ฒˆ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ์ œํ•œํ•ด์„œ ์ถœ๋ ฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • max_depth์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 1๋กœ ์ฃผ๋ฉด, ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๋” ํ™•์žฅํ•ด์„œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. 
  • ๊ทธ๋ฆฌ๊ณ  filled ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ํด๋ž˜์Šค์— ๋งž๊ฒŒ ๋…ธ๋“œ์˜ ์ƒ‰์„ ์น ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • feature_names ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ํŠน์„ฑ์˜ ์ด๋ฆ„์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ณด๋ฉด ๋…ธ๋“œ๊ฐ€ ์–ด๋– ํ•œ ํŠน์„ฑ๋“ค๋กœ ๋‚˜๋‰˜๋Š”์ง€ ์•Œ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ๊ทธ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
plt.figure(figsize=(10,7))
plot_tree(dt, max_depth=1, filled=True, feature_names=['alcohol', 'sugar', 'pH'])
plt.show()

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๊ทธ๋ฆผ์„ ์ฝ๋Š” ๋ฐฉ๋ฒ•์„ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •ํŠธ๋ฆฌ ๋ถ„์„ ์˜ˆ์ œ ๊ทธ๋ฆผ
๋ฃจํŠธ ๋…ธ๋“œ

  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋‹น๋„(sugar)๊ฐ€ -0.239 ์ดํ•˜์ธ์ง€ ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์–ด๋–ค ์ƒ˜ํ”Œ์˜ ๋‹น๋„๊ฐ€ -0.239์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ์™ผ์ชฝ ๊ฐ€์ง€๋กœ ๊ฐ‘๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅธ์ชฝ ๊ฐ€์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰ ์™ผ์ชฝ์ด Yes, ์˜ค๋ฅธ์ชฝ์ด No์ž…๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ด ์ƒ˜ํ”Œ ์ˆ˜ (samples)๋Š” 5,197๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • ์ด ์ค‘์—์„œ ์Œ์„ฑ ํด๋ž˜์Šค(๋ ˆ๋“œ ์™€์ธ)๋Š” 1,258๊ฐœ ์ด๊ณ ,
  • ์–‘์„ฑ ํด๋ž˜์Šค(ํ™”์ดํŠธ ์™€์ธ)๋Š” 3,939๊ฐœ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์ด value์— ๋‚˜ํƒ€๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ ๋…ธ๋“œ

  • ์™ผ์ชฝ ๋…ธ๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋…ธ๋“œ๋Š” ๋‹น๋„๊ฐ€ ๋” ๋‚ฎ์€์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋„ค์š”.
  • ๋‹น๋„๊ฐ€ -0.802์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋‚ฎ๋‹ค๋ฉด ๋‹ค์‹œ ์™ผ์ชฝ ๊ฐ€์ง€๋กœ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅธ์ชฝ ๊ฐ€์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋…ธ๋“œ์—์„œ ์Œ์„ฑ ํด๋ž˜์Šค์™€ ์–‘์„ฑ ํด ๋ž˜์Šค์˜ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜๋Š” ๊ฐ๊ฐ 1,177๊ฐœ์™€ 1,745๊ฐœ์ž…๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋…ธ๋“œ๋ณด๋‹ค ์–‘์„ฑ ํด๋ž˜์Šค, ์ฆ‰ ํ™”์ดํŠธ ์™€์ธ์˜ ๋น„์œจ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค
  • ๊ทธ ์ด์œ ๋Š” ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ

  • ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋Š” ์Œ์„ฑ ํด๋ž˜์Šค๊ฐ€ 81๊ฐœ, ์–‘์„ฑ ํด๋ž˜์Šค๊ฐ€ 2,194๊ฐœ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ํšŒ์ดํŠธ ์™€์ธ ์ƒ˜ํ”Œ์ด ์ด ๋…ธ๋“œ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์˜ ๋ฐ”ํƒ• ์ƒ‰๊น”์„ ์œ ์‹ฌํžˆ ๋ณด์„ธ์š”. ๋ฃจํŠธ ๋…ธ๋“œ๋ณด๋‹ค ์ด ๋…ธ๋“œ๊ฐ€ ๋” ์ง„ํ•˜๊ณ , ์™ผ์ชฝ ๋…ธ๋“œ๋Š” ๋” ์—ฐํ•ด์ง€์ง€ ์•Š์•˜๋‚˜์š”?
  • plot_tree() ํ•จ์ˆ˜์—์„œ filled=True๋กœ ์ง€์ •ํ•˜๋ฉด ํด๋ž˜์Šค ๋งˆ๋‹ค ์ƒ‰๊น”์„ ๋ถ€์—ฌํ•˜๊ณ  ์–ด๋–ค ํด๋ž˜์Šค์˜ ๋น„์œจ์ด ๋†’์•„์ง€๋ฉด ์ ์  ์ง„ํ•œ์ƒ‰ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ์ง๊ด€์ ์ด๋„ค์š”.
๊ฒฐ์ • ํŠธ๋ฆฌ์—์„œ ์˜ˆ์ธก ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Leaf Node์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ํด๋ž˜์Šค๊ฐ€ ์˜ˆ์ธก ํด๋ž˜์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์•ž์—์„œ ๋ณด์•˜๋˜ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ์— ๊ฒฐ์ •ํŠธ๋ฆฌ์˜ ์„ฑ์žฅ์„ ๋ฉˆ์ถ˜๋‹ค๋ฉด, ์™ผ์ชฝ ๋…ธ๋“œ์— ๋„๋‹ฌํ•œ ์ƒ˜ํ”Œ๊ณผ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ์— ๋„๋‹ฌํ•œ ์ƒ˜ํ”Œ์€ ๋ชจ๋‘ ์–‘์„ฑ ํด๋ž˜์Šค๋กœ ์˜ˆ์ธก ๋ฉ๋‹ˆ๋‹ค.
๋‘ ๋…ธ๋“œ ๋ชจ๋‘ ์–‘์„ฑ ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์–‘์ˆ˜(ํŒŒ๋ž€์ƒ‰), ์Œ์ˆ˜(๋นจ๊ฐ„์ƒ‰)์œผ๋กœ ํ‘œํ˜„
ํ…Œ์ŠคํŠธ ์กฐ๊ฑด(sugar), ๋ถˆ์ˆœ๋„ (gini), ์ด ์ƒ˜ํ”Œ์ˆ˜(samples), ํด๋ž˜์Šค๋ณ„ ์ƒ˜ํ”Œ ์ˆ˜(value)
leaf node ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€:sugar
  • ๊ทผ๋ฐ...? ๋…ธ๋“œ ์ƒ์ž ์•ˆ์— gini ๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋„ค์š”..? ์ด๊ฒŒ ๋ญ”์ง€ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Gini Impurity (์ง€๋‹ˆ ๋ถˆ์ˆœ๋„)

Gini๋Š” ์ง€๋‹ˆ๋ถˆ์ˆœ๋„ ์ž…๋‹ˆ๋‹ค. DecisionTreeClassifier ํด๋ž˜์Šค์˜ Criterion ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์ด 'gini'์ž…๋‹ˆ๋‹ค.
Criterion ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์˜๋„๋Š” ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•  ๊ธฐ์ค€์„ ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?
์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” ํด๋ž˜์Šค์˜ ๋น„์œจ์„ ์ œ๊ณฑํ•ด์„œ ๋”ํ•œ ๋งŒํผ 1์„ ๋นผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ, ๋‹ค์ค‘ ํด๋ž˜์Šค๋ฉด ํด๋ž˜์Šค๊ฐ€ ๋” ๋งŽ๊ฒ ์ง€๋งŒ? ๊ณ„์‚ฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ด์ „ ํŠธ๋ฆฌ ๊ทธ๋ฆผ์— ์žˆ๋˜ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ๊ณ„์‚ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 5,197๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ์žˆ๊ณ  1,258๊ฐœ์˜ ์Œ์„ฑ ํด๋ž˜์Šค, 3,939๊ฐœ๊ฐ€ ์–‘์„ฑ ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด, ํ•œ๋ฒˆ ์™ผ, ์˜ค๋ฅธ์ชฝ์˜ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋„ ํ•œ๋ฒˆ ๊ณ„์‚ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ 100๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ์žˆ๋Š” ๋…ธ๋“œ์˜ ํด๋ž˜์Šค์˜ ๋น„์œจ์ด 1/2๋ฉด,
์ง€๋‹ˆ๋ถˆ์ˆœ๋„๋Š” 0.5๊ฐ€ ๋˜์–ด ์ตœ์•…์ด ๋ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ์— ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” 0์ด ๋˜์–ด์„œ ๊ฐ€์žฅ ์ž‘์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋…ธ๋“œ๋ฅผ ์ˆœ์ˆ˜ ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์˜ ํŠธ๋ฆฌ ๊ทธ๋ฆผ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋ผ ํ•˜๋ฉด ์™ผ์ชฝ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค
์™ผ์ชฝ ๋…ธ๋“œ๋กœ๋Š” 2,922๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ์ด๋™ํ–ˆ๊ณ  ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋กœ๋Š” 2,275๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด, ๋ถˆ์ˆœ๋„์˜ ์ฐจ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋Ÿฌํ•œ ๋ถ€๋ชจ์™€ ์ž์‹ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๋ถˆ์ˆœ๋„ ์ฐจ์ด๋ฅผ ์ •๋ณด์ด๋“(Imformation Gain)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ๊ทผ๋ฐ, Scikit-learn์— ๋˜ ๋‹ค๋ฅธ ๋ถˆ์ˆœ๋„ ๊ธฐ์ค€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • DecisionTreeClassifier ํด๋ž˜์Šค์—์„œ criterion=‘entropy’๋ฅผ ์ง€์ •ํ•˜์—ฌ ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๋ฅผ ์‹œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๋„ ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ๋น„์œจ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„์ฒ˜๋Ÿผ ์ œ๊ณฑ์ด ์•„๋‹ˆ๋ผ ๋ฐ‘์ด 2์ธ ๋กœ๊ทธ๋ฅผ ์‹œ์šฉํ•˜์—ฌ ๊ณฑํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

  • ๋ณดํ†ต ๊ธฐ๋ณธ๊ฐ’์ธ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„์™€ ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๊ฐ€ ๋งŒ๋“  ๊ฒฐ๊ณผ์˜ ์ฐจ์ด๋Š” ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ๋ณธ ๊ฐ’์ธ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‚˜๋‹ค.

๊ฐ€์ง€์น˜๊ธฐ

๊ฒฐ์ • ํŠธ๋ฆฌ์—์„œ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์ž๋ผ๋‚  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ์ง€์ •ํžˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
DecisionTreeClassifier ํด๋ž˜์Šค์˜ max_depth ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 3์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ ์•„๋ž˜๋กœ ์ตœ๋Œ€ 3๊ฐœ์˜ ๋…ธ๋“œ๊นŒ์ง€๋งŒ ์„ฑ์žฅ ํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.
# Logistic ํšŒ๊ท€๋Š” ์„ ํ˜•ํ•จ์ˆ˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํŠน์„ฑ์˜ scale์„ ๋งž์ถค.
# ๊ฒฐ์ • Tree๋Š” ์„ ํ˜•ํ•จ์ˆ˜ ํ›ˆ๋ จํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์„ฑ์˜ scale๋ฅผ ์กฐ์ •ํ•  ํ•„์š” ์—†์Œ.
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt.fit(train_scaled, train_target)

print(dt.score(train_scaled, train_target))
print(dt.score(test_scaled, test_target))
0.8454877814123533
0.8415384615384616
  • ํ›ˆ๋ จ ์„ธํŠธ์˜ ์„ฑ๋Šฅ์€ ๋‚ฎ์•„์กŒ์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ์„ฑ๋Šฅ์€ ๊ทธ๋Œ€๋กœ ์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ plot_tree() ํ•จ์ˆ˜๋กœ ๊ทธ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
plt.figure(figsize=(20,15))
plot_tree(dt, filled=True, feature_names=['alcohol', 'sugar', 'pH'])
plt.show()

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์–ด๋–ค ํŠน์„ฑ์ด ๊ฐ€์žฅ ์œ ์šฉํ•œ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์„ฑ ์ค‘์š”๋„๋ฅผ ๊ณ„์‚ฐํ•ด ์ค๋‹ˆ๋‹ค.
์ด ํŠธ๋ฆฌ ์˜ ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๊นŠ์ด 1์—์„œ ๋‹น๋„๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‹น๋„(sugar)๊ฐ€ ๊ฐ€์žฅ ์œ ์šฉํ•œ ํŠน์„ฑ ์ค‘ ํ•˜ ๋‚˜์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํŠน์„ฑ ์ค‘์š”๋„๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ชจ๋ธ์˜ feature_importances_ ์†์„ฑ์— ์ €์žฅ๋˜์–ด ์žˆ์Šต ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์ถœ๋ ฅํ•ด ํ™•์ธํ•ด ๋ณด์ฃ .
# ํŠน์„ฑ ์ค‘์š”๋„ ์ถœ๋ ฅ. 0.868๋กœ sugar์˜ ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํŠน์„ฑ์ด๋ผ๋Š”๊ฑธ ์•Œ์ˆ˜ ์žˆ์Œ
print(dt.feature_importances_)
[0.12345626 0.86862934 0.0079144 ]
  • ์ด ๊ฐ’๋“ค์„ ํ™•์ธํ•ด ๋ณด๋ฉด ๋‘๋ฒˆ์งธ ํŠน์„ฑ์ธ ๋‹น๋„๊ฐ€ 0.87์ •๋„๋กœ ํŠน์„ฑ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ๋†’๋„ค์š”.
  • ๊ทธ ๋‹ค์Œ์•Œ์ฝ”์˜ฌ, ๋„์ˆ˜, pH ์ˆœ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜๋ฉด 1์ด ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์„ฑ ์ค‘์š”๋„๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์ •๋ณด ์ด๋“๊ณผ ์ „์ฒด ์ƒ˜ํ”Œ์— ๋Œ€ํ•œ ๋น„์œจ์„ ๊ณฑํ•œ ํ›„ ํŠน์„ฑ๋ณ„๋กœ ๋”ํ•˜์—ฌ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์„ฑ ์ค‘์š”๋„๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ชจ๋ธ์„ ํŠน์„ฑ ์„ ํƒ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์ด ๊ฒฐ์ • ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋˜ ๋‹ค๋ฅธ ์žฅ์  ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค.

KeyWords

๊ฒฐ์ • ํŠธ๋ฆฌ

  • ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์˜ˆ / ์•„๋‹ˆ์˜ค์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์ด์–ด๋‚˜๊ฐ€๋ฉด์„œ ์ •๋‹ต์„ ์ฐพ์•„ ํ•™์Šตํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋น„๊ต์  ์˜ˆ์ธก๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์„ฑ๋Šฅ๋„ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

๋ถˆ์ˆœ๋„

  • ๋ถˆ์ˆœ๋„๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ์ตœ์ ์˜ ์งˆ๋ฌธ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์€ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„์™€ ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ •๋ณด ์ด๋“

  • ์ •๋ณด ์ด๋“์€ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ์˜ ๋ถˆ์ˆœ๋„ ์ฐจ์ด์ž…๋‹ˆ๋‹ค. ๊ฒฐ์ • ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ •๋ณด ์ด๋“์ด ์ตœ๋Œ€ํ™”๋˜๋„๋ก ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ • ํŠธ๋ฆฌ

  • ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์ œํ•œ ์—†์ด ์„ฑ์žฅํ•˜๋ฉด ํ›ˆ๋ จ ์„ธํŠธ์— ๊ณผ๋Œ€์ ํ•ฉ ๋˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ง€์น˜๊ธฐ

  • ๊ฐ€์ง€์น˜๊ธฐ๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ์˜ ์„ฑ์žฅ์„ ์ œํ•œํžˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‚ฌ์ด๊ฒƒ๋Ÿฐ์˜ ๊ฒฐ์ • ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ€์น˜์ง€๊ธฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠน์„ฑ ์ค‘์š”๋„

  • ํŠน์„ฑ ์ค‘์š”๋„๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ์— ์‹œ์šฉ๋œ ํŠน์„ฑ์ด ๋ถˆ์ˆœ๋„๋ฅผ ๊ฐ์†Œํ•˜๋Š”๋ฐ ๊ธฐ์—ฌํ•œ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ํŠน์„ฑ ์ค‘์š”๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ฒฐ์ • ํŠธ๋ฆฌ์˜ ๋˜๋‹ค๋ฅธ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

Pandas

  • info()๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์š”์•ฝ๋œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ธํ…์Šค์™€ ์ปฌ๋Ÿผ ํƒ€์ž…์„ ์ถœ๋ ฅํ•˜๊ณ  ๋„ (null)์ด ์•„๋‹Œ ๊ฐ’์˜ ๊ฐœ์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • verbose ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’ True๋ฅผ False๋กœ ๋น„๊พธ๋ฉด ๊ฐ ์—ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • describe()๋Š”๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์—ด์˜ ํ†ต๊ณ„ ๊ฐ’์„์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์น˜ํ˜•์ผ ๊ฒฝ์šฐ ์ตœ์†Œ, ์ตœ๋Œ€, ํ‰๊ท , ํ‘œ ์ค€ํŽธ์ฐจ์™€์‚ฌ๋ถ„์œ„๊ฐ’๋“ฑ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด ๊ฐ™์€ ๊ฐ์ฒด ํƒ€์ž…์˜ ์—ด์€๊ฐ€์žฅ์ง€์ฃผ๋“ฑ์žฅํ•˜๋Š”๊ฐ’๊ณผํšŸ์ˆ˜๋“ฑ์ด์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. percentiles ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ๋ฐฑ๋ถ„์œ„์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ [0.25, 0.5, 0.75]์ž…๋‹ˆ๋‹ค.

 

scikit-learn

  • DecisionTreeClassifier๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ถ„๋ฅ˜ ํด๋ž˜์Šค์ž…๋‚˜๋‹ค.
  • criterion ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ถˆ์ˆœ๋„๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ์˜๋ฏธํ•˜๋Š” ‘gini’์ด๊ณ  ‘entropy’๋ฅผ ์„ ํƒํ•˜์—ฌ ์—”ํŠธ๋กœํ”ผ ๋ถˆ์ˆœ๋„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • splitter ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋…ธ๋“œ๋ฅผ ๋ถ„ํ• ํžˆ๋Š” ์ „๋žต์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ‘best’๋กœ ์ •๋ณด ์ด๋“์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ‘random’์ด๋ฉด ์ž„์˜๋กœ ๋…ธ๋“œ๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
  • max_depth๋Š” ํŠธ๋ฆฌ๊ฐ€ ์„ฑ์žฅํ•  ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ None์œผ๋กœ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์ˆœ์ˆ˜ํ•˜๊ฑฐ๋‚˜ min_samples_split๋ณด๋‹ค ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ๊นŒ์ง€ ์„ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • min_samples_split์€ ๋…ธ๋“œ๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 2์ž…๋‹ˆ๋‹ค.
  • max_features ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ตœ์ ์˜ ๋ถ„ํ• ์„ ์œ„ํ•ด ํƒ์ƒ‰ํ•  ํŠน์„ฑ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ None์œผ๋กœ ๋ชจ๋“  ํŠน์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • plot tree()๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ชจ๋Œˆ์„ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • max_depth ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ None์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ ๋ฅผ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • feature_names ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํŠน์„ฑ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • filled ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ True๋กœ ์ง€์ •ํ•˜๋ฉด ํƒ€๊นƒ๊ฐ’์— ๋”ฐ๋ผ๋…ธ๋“œ ์•ˆ์— ์ƒ‰์„ ์ฑ„์๋‹ˆ๋‹ค.