Decision Tree
์ด๋ฏธ์ง์ถ์ฒ : ALGOBEANS https://algobeans.com/2016/07/27/decision-trees-tutorial/
- ๊ฒฐ๊ณผ ๋ชจ๋ธ์ด Tree ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ Decision Tree
- ์ค๋ฌด๊ณ ๊ฐ ํ๋ฏ์ด ์/์๋์ค ์ง๋ฌธ์ ์ด์ด ๋๊ฐ๋ฉด์ ํ์ต
- ๊ฒฐ์ ํธ๋ฆฌ์์ ์ง๋ฌธ์ด๋ ์ ๋ต์ ๋
ธ๋Node๋ผ๊ณ ํจ
- ๋งจ ์ฒ์ ๋ถ๋ฅ ๊ธฐ์ค์ Root Node
- ์ค๊ฐ ๋ถ๋ฅ ๊ธฐ์ค์ Intermediate Node
- ๋ง์ง๋ง ๋ ธ๋๋ฅผ Terminal Node ๋๋ Leaf Node
- ๊ฒฐ์ ํธ๋ฆฌ์ ๊ธฐ๋ณธ ์์ด๋์ด๋ Leaf Node๊ฐ ๊ฐ์ฅ ์์ด์ง ์์ ์ํ๋ก ์์ ํ ๋ถ๋ฅ๋๋ ๊ฒ
- ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ์ ๋๋ฆฌ ์ฌ์ฉํ๋ ๋ชจ๋ธ
- ๋ถ๋ฅ : Leaf Node์ ๊ฐ์ฅ ๋ง์ ํด๋์ค๊ฐ ์์ธก ํด๋์ค๊ฐ ๋จ
- ํ๊ท : Leaf Node์ ๋๋ฌํ ์ํ์ ํ๊ฒ์ ํ๊ท ํ์ฌ ์์ธก๊ฐ์ผ๋ก ์ฌ์ฉ
๋ถ์๋ Impurity
- ๋ถ๊ธฐ ๊ธฐ์ค์ ์ ํํ๊ธฐ ์ํด ๋ถ์๋๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉ
- ๊ฒฐ์ ํธ๋ฆฌ๊ฐ ์ต์ ์ ์ง๋ฌธ์ ์ฐพ๊ธฐ ์ํ ๊ธฐ์ค
- ๋ณต์ก์ฑ์ ์๋ฏธํ๋ฉฐ, ํด๋น ๋ฒ์ฃผ ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์์ฌ ์๋์ง๋ฅผ ๋ปํจ
- ๋ค์ํ ๊ฐ์ฒด๋ค์ด ์์ฌ ์์์๋ก ๋ถ์๋๊ฐ ๋์์ง
- ๋ถ๊ธฐ ๊ธฐ์ค ์ค์ ์ ํ์ฌ๋ ธ๋์ ๋ถ์๋์ ๋นํด ์์๋ ธ๋์ ๋ถ์๋๊ฐ ๊ฐ์๋๋๋ก ์ค์ ํด์ผํจ
์ ๋ณด ํ๋ Information gain
- ํ์ฌ ๋ ธ๋์ ๋ถ์๋์ ์์๋ ธ๋์ ๋ถ์๋์ ์ฐจ์ด๋ฅผ ์ ๋ณด ํ๋Information gain์ด๋ผ๊ณ ํจ
- ๋ถ์๋๊ฐ 1์ธ ์ํ์์ 0.7์ธ ์ํ๋ก ๋ฐ๋์๋ค๋ฉด ์ ๋ณด ํ๋์ 0.3
- ๊ฒฐ์ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ณด ํ๋์ ์ต๋ํํ๋ ๋ฐฉํฅ์ผ๋ก ํ์ต์ด ์งํ๋จ
- root ๋ ธ๋์ ๋ถ์๋ ๊ณ์ฐ
- ๋๋จธ์ง ์์ฑ์ ๋ํด ๋ถํ ํ ์์๋ ธ๋์ ๋ถ์๋ ๊ณ์ฐ
- ๊ฐ ์์ฑ์ ๋ํ ์ ๋ณด ํ๋ ๊ณ์ฐ ํ, ์ ๋ณด ํ๋์ด ์ต๋๊ฐ ๋๋ ๋ถ๊ธฐ์กฐ๊ฑด์ ์ฐพ์ ๋ถ๊ธฐ
- ๋ชจ๋ Leaf๋ ธ๋์ ๋ถ์๋๊ฐ 0์ด ๋ ๋๊น์ง 2,3 ๋ฐ๋ณต ์ํ
๋ถ์๋ ํจ์ Gini, Entropy
- ์ง๋ ์ง์ Gini Index
- ํด๋์ค์ ๋น์จ์ ์ ๊ณฑํด์ ๋ํ ๋ค์ 1์์ ๋บ
- ์ง๋ ์ง์์ 0.5๋ฉด ๋ถ์๋๊ฐ ์ต๋ => ํ ๋ฒ์ฃผ ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ ํํ ๋ฐ๋ฐ ์๋ค
- ๊ณต์
\[\begin{split} I(A) &= 1 - (์์ฑ ํด๋์ค ๋น์จ^2 + ์์ฑ ํด๋์ค ๋น์จ^2) \\ &= 1 - \textstyle\sum_{k=1}^m p_k^2 \end{split}\]
-
\[p_k^2 = ๋ฒ์ฃผ ์์์ k ํน์ฑ์ ๊ด์ธก์น ๋น์จ\]
- ๋ฒ์ฃผ ์์ ๋นจ๊ฐ์ ์ 10๊ฐ, ํ๋์ ์ 6๊ฐ ์์ ๋์ ๊ณ์ฐ ์์
\[\begin{split} I(A) &= 1 - \textstyle\sum_{k=1}^m p_k^2 \\ &= 1 - \left(\cfrac{6}{16}\right)^2 - \left(\cfrac{10}{16}\right)^2 \\ &\approx 0.47 \end{split}\]
- ์ํธ๋กํผ ์ง์ Entropy Index
- ๋ถ์๋๋ฅผ ์์น์ ์ผ๋ก ๋ํ๋ธ ์ฒ๋
- ์ํธ๋กํผ๊ฐ ๋๋ค๋ ๊ฒ์ ๋ถ์๋๊ฐ ๋๋ค๋ ๋ป์ด๊ณ , ์ํธ๋กํผ๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ๋ถ์๋๊ฐ ๋ฎ๋ค๋ ๋ป
- ์ํธ๋กํผ๊ฐ 1์ด๋ฉด ๋ถ์๋๊ฐ ์ต๋ => ํ ๋ฒ์ฃผ ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ ํํ ๋ฐ๋ฐ ์๋ค
- ์ํธ๋กํผ๊ฐ 0์ด๋ฉด ๋ถ์๋๊ฐ ์ต์ => ํ ๋ฒ์ฃผ ์์ ํ๋์ ๋ฐ์ดํฐ๋ง ์๋ค
- ํด๋์ค์ ๋น์จ์ ๋ฐ์ด 2์ธ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณฑํจ
- ๊ณต์
\[\begin{split} E(A) &= - ์์ฑ ๋น์จ * \log_2(์์ฑ ๋น์จ) - ์์ฑ ๋น์จ * \log_2(์์ฑ ๋น์จ) \\ &= - \textstyle\sum_{i=1}^k p_i\log_2(p_i) \end{split}\]
- ๋ฒ์ฃผ ์์ ๋นจ๊ฐ์ ์ 10๊ฐ, ํ๋์ ์ 6๊ฐ ์์ ๋์ ๊ณ์ฐ ์์
\[\begin{split} E(A) &= - \textstyle\sum_{k=1}^m p_k^2 \\ &= - \cfrac{6}{16}\log_2\left(\cfrac{6}{16}\right) - \cfrac{10}{16}\log_2\left(\cfrac{10}{16}\right) \\ &\approx 0.95 \end{split}\]
๊ฐ์ง์น๊ธฐ Pruning
- ๊ฒฐ์ ํธ๋ฆฌ๋ ์ ํ ์์ด ์ฑ์ฅํ๋ฉด ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉOverfitting๋๊ธฐ ์ฌ์
- ๊ณผ๋์ ํฉOverfitting ์ ๋ง๊ธฐ ์ํ ์ ๋ต
- ํธ๋ฆฌ์ ์ต๋ ๊น์ด(max_depth)๋ ํฐ๋ฏธ๋ ๋ ธ๋์ ์ต๋ ๊ฐ์, ํ ๋ ธ๋๊ฐ ๋ถํ ํ๊ธฐ ์ํ ์ต์ ๋ฐ์ดํฐ ์(min_sample_split)๋ฑ ์ ํ ๊ฐ๋ฅ
์ฅ์
- ๋ถ์๊ฒฐ๊ณผ๊ฐ โ์กฐ๊ฑดA && ์กฐ๊ฑดB = ๊ฒฐ๊ณผ Cโ๋ผ๋ ํํ์ ๊ท์น์ผ๋ก ํํ๋๋ฏ๋ก ์ฝ๊ฒ ์ดํดํ๊ณ ํ์ฉ ํ ์ ์์
- ๋ง๋ค์ด์ง ๋ชจ๋ธ์ ์ฝ๊ฒ ์๊ฐํ ํ ์ ์์ด์ ๋น์ ๋ฌธ๊ฐ๋ ์ดํดํ๊ธฐ ์ฌ์ (ํน์ฑ์ด ๋ช๊ฐ ์์ด ํธ๋ฆฌ๊ฐ ๋น๊ต์ ์์ ๋)
- ํน์ฑ๊ฐ์ ์ค์ผ์ผ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ํฅ์ ๋ฏธ์น์ง ์์ ํ์คํ ์ ์ฒ๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์์
- ์์นํ๊ณผ ๋ฒ์ฃผํ ๋ณ์๋ฅผ ํ๊บผ๋ฒ์ ๋ค๋ฃฐ ์ ์์
- ํน์ฑ ์ค์๋ํน์ฑ์ด ๋ถ์๋๋ฅผ ๊ฐ์ํ๋๋ฐ ๊ธฐ์ฌํ ์ ๋๋ฅผ ๊ณ์ฐ ํ ์ ์์
- ํน์ฑ ์ ํ์ ํ์ฉํ ์ ์์
๋จ์
- ๊ฐ์ง์น๊ธฐ๋ฅผ ์ฌ์ฉํจ์๋ ๋ถ๊ตฌํ๊ณ ๊ณผ๋์ ํฉOverfitting๋๋ ๊ฒฝํฅ์ด ์์ด ์ผ๋ฐํ ์ฑ๋ฅ์ด ์ข์ง ์์
=> ์์๋ธ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํธ๋ฆฌ์ ๋์์ผ๋ก ์ฌ์ฉ (๋ค์ ์ฅ์์!)