[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต

2020. 2. 11. 16:54ยท๐Ÿฌ ML & Data/๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹
728x90

 ์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ๋ชจ๋ธ์˜ ๊ฒฐ์ • ๊ณผ์ •์„ ์„ค๋ช…ํ•  ๋•Œ ์•„์ฃผ ์ค‘์š”ํ•œ ๊ฒฐ์ • ํŠธ๋ฆฌ(decision tree) ๋ถ„๋ฅ˜๊ธฐ๋ผ๋Š” ๋ชจ๋ธ์„ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๊ฒฐ์ •ํŠธ๋ฆฌ๋ž€?

๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์–ด๋–ค ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•ดํ•˜๋Š” ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 1์—์„œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?

๊ทธ๋ฆผ 1. ๊ฒฐ์ •ํŠธ๋ฆฌ ์˜ˆ์‹œ

 ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ˜ํ”Œ์˜ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”์„ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ๊ฐœ๋…์€ ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์…‹ ๊ฐ™์€ ์‹ค์ˆ˜ํ˜• ํŠน์„ฑ์—์„œ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "๊ฝƒ์žŽ์˜ ๊ธธ์ด๊ฐ€ 3cm๋ณด๋‹ค ๊ธด๊ฐ€์š”?"๋ผ๋Š” ์˜ˆ/์•„๋‹ˆ์˜ค ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 ๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํŠธ๋ฆฌ์˜ ๊ธฐ์›์ด ๋˜๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ •๋ณด ์ด๋“(Information Gain, IG)๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ํŠน์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์„ ํ†ตํ•ด์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์ˆœ์ˆ˜ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์—์„œ ์ด ๋ถ„ํ•  ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊นŠ์€ ํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์„œ ์˜ค๋ฒ„ํ”ผํŒ…์ด ๋  ํ™•๋ฅ ์ด ๋†’์€๋ฐ, ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์ง€์น˜๊ธฐ(pruning)ํ•ฉ๋‹ˆ๋‹ค.

 ์œ„ ๋‹จ๋ฝ์—์„œ ์ •๋ณด ์ด๋“์ด ๋‚˜์™”์ฃ ? ์šฐ๋ฆฌ๋Š” ์ตœ๋Œ€ํ•œ ์ƒ˜ํ”Œ์—์„œ ์ •๋ณด๊ฐ€ ํ’๋ถ€ํ•œ ํŠน์„ฑ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ถ„๋ฅ˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋…ธ๋“œ๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ตœ์ ํ™”ํ•  ๋ชฉ์ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด ๋ชฉ์  ํ•จ์ˆ˜๋Š” ๊ฐ ๋ถ„ํ• ์—์„œ ์ •๋ณด ์ด๋“์„ ์ตœ๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ณด ์ด๋“์€ ์•„๋ž˜ ์‹๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 2. ์ •๋ณด์ด๋“

 ์ด ์‹์—์„œ f๋Š” ๋ถ„ํ• ์— ์‚ฌ์šฉํ•  ํŠน์„ฑ, ์ฆ‰ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. Dp์™€ Dj๋Š” ๋ถ€๋ชจ์™€ j๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ์ด๊ณ , I๋Š” ๋ถˆ์ˆœ๋„(impurity)์ž…๋‹ˆ๋‹ค. Np๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์— ์žˆ๋Š” ์ „์ฒด ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ƒ˜ํ”Œ์ด ์งˆ๋ฌธ์„ ๋งŒ๋‚˜๊ธฐ ์ „์˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Nj๋Š” j๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ์˜ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ •๋ณด ์ด๋“์€ ๋‹จ์ˆœํžˆ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋ถˆ์ˆœ๋„์™€ ์ž์‹ ๋…ธ๋“œ์˜ ๋ถˆ์ˆœ๋„ ํ•ฉ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค. ์ž์‹ ๋…ธ๋“œ์˜ ๋ถˆ์ˆœ๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ •๋ณด ์ด๋“์ด ์ปค์ง‘๋‹ˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด์ง„ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ถ€๋ชจ๋…ธ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 3. ์ •๋ณด์ด๋“ - ๊ฒฐ์ • ํŠธ๋ฆฌ

 ์ด์ง„ ๊ฒฐ์ • ํŠธ๋ฆฌ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๋ถˆ์ˆœ๋„ ์ง€ํ‘œ(๋ถ„ํ•  ์กฐ๊ฑด)์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„(Gini impurity), ์—”ํŠธ๋กœํ”ผ(entropy, IH), ๋ถ„๋ฅ˜ ์˜ค์ฐจ(classification error, IE)์ž…๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ์ด ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค p(i|t)!=0์— ๋Œ€ํ•œ ์—”ํŠธ๋กœํ”ผ์˜ ์ •์˜๋Š” ๊ทธ๋ฆผ 4์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 4. ์ƒ˜ํ”Œ์ด ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์—”ํŠธ๋กœํ”ผ ์ •์˜

 ์—ฌ๊ธฐ์„œ p(i|t)๋Š” ํŠน์ • ๋…ธ๋“œ t์—์„œ ํด๋ž˜์„œ i์— ์†ํ•œ ์ƒ˜ํ”Œ ๋น„์œจ์ž…๋‹ˆ๋‹ค. ํ•œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ƒ˜ํ”Œ์ด ๊ฐ™์€ ํด๋ž˜์Šค์ด๋ฉด ์—”ํŠธ๋กœํ”ผ๋Š” 0์ด ๋ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋ถ„ํฌ๊ฐ€ ๊ท ๋“ฑํ•  ๋•Œ ์—”ํŠธ๋กœํ”ผ๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๊ฒ ์ฃ . ์˜ˆ๋ฅผ ๋“ค์–ด, i=1์ผ ๋•Œ p๊ฐ€ 1์ด๊ฑฐ๋‚˜ i=0์ด๊ณ  p=1์ด๋ฉด ์—”ํŠธ๋กœํ”ผ๋Š” 0์ด๊ณ , i=1์ผ ๋•Œ p๊ฐ€ 0.5์™€ i=0์ผ ๋•Œ p๊ฐ€ 0.5๋กœ ๊ท ๋“ฑํ•˜๋ฉด ์—”ํŠธ๋กœํ”ผ๋Š” 1์ด ๋ฉ๋‹ˆ๋‹ค. ์—”ํŠธ๋กœํ”ผ๋Š” ๋ฌผ๋ฆฌ์—์„œ ๋ถˆ๊ทœ์น™ํ•จ์„ ๋œปํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋“ค์–ด๋ณด์…จ๊ฒ ์ฃ ? ํŽธํ•˜๊ฒŒ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ž˜๋ชป ๋ถ„๋ฅ˜๋  ํ™•๋ฅ ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์—”ํŠธ๋กœํ”ผ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” ํด๋ž˜์Šค๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๊ท ๋“ฑํ•˜๊ฒŒ ์„ž์—ฌ์žˆ์„ ๋•Œ ์ตœ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 5. ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„

 ์˜ˆ๋ฅผ ๋“ค์–ด ์ด์ง„ ํด๋ž˜์Šค ํ™˜๊ฒฝ, ์ฆ‰ c๊ฐ€ 2์ผ ๋•Œ๋Š” I๊ฐ€ 0.5๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„์™€ ์—”ํŠธ๋กœํ”ผ๋Š” ๋ชจ๋‘ ๋งค์šฐ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ, ๋ถˆ์ˆœ๋„ ์กฐ๊ฑด์„ ๋ฐ”๊พธ์–ด์„œ ํŠธ๋ฆฌ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๊ฐ€์ง€์น˜๊ธฐ์˜ ์ˆ˜์ค€์„ ๋ฐ”๊พธ๋Š” ํŽธ์ด ๋‚ซ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 ๋งˆ์ง€๋ง‰ ๋ถˆ์ˆœ๋„ ์ง€ํ‘œ๋Š” ๋ถ„๋ฅ˜ ์˜ค์ฐจ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ง€์น˜๊ธฐ๋Š” ์ข‹์€ ๊ธฐ์ค€์ด๋‚˜ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ๋Š” ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ํ™•๋ฅ  ๋ณ€ํ™”์— ๋‘”๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 6. ๋ถ„๋ฅ˜ ์˜ค์ฐจ

์ด์ œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”? ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ๋‘ ๊ฐœ์˜ ๋ถ„ํ•  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7. ๋ถ„ํ•  ์‹œ๋‚˜๋ฆฌ์˜ค

 ๋ถ€๋ชจ๋…ธ๋“œ์—์„œ ์œ„์— ๋งํ•œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ์…‹ Dp๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค 1์ด 40๊ฐœ, ํด๋ž˜์Šค 2๊ฐ€ 40์˜ ์ƒ˜ํ”Œ์„ ๊ฐ–๊ณ  ์žˆ๋„ค์š”. ์ด๊ฒƒ์„ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์…‹ Dleft์™€ Dright๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๋ถ„๋ฅ˜ ์˜ค์ฐจ๋ฅผ ๋ถ„ํ•  ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์„ ๋•Œ ์ •๋ณด ์ด๋“์€ ์‹œ๋‚˜๋ฆฌ์˜ค A์™€ B๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹ค.(IG = 0.25)

 ๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋กœ ๋‚˜๋ˆ„์–ด๋ณผ๊นŒ์š”? ์ด ๊ฒฝ์šฐ์—๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค A(IG = 0.125)๋ณด๋‹ค ์‹œ๋‚˜๋ฆฌ์˜ค B(IG = 0.16)์ด ๋” ์ˆœ์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ๋†’์Šต๋‹ˆ๋‹ค.

 ๋น„์Šทํ•˜๊ฒŒ ์—”ํŠธ๋กœํ”ผ์˜ ๊ธฐ์ค€๋„ ์‹œ๋‚˜๋ฆฌ์˜ค A(IG=0.19)๋ณด๋‹ค ์‹œ๋‚˜๋ฆฌ์˜ค B(IG = 0.31)์„ ๋” ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค

 

 ์•ž์„œ ๋‚˜์˜จ ์„ธ ๊ฐœ์˜ ๋ถˆ์ˆœ๋„ ๊ธฐ์ค€์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค 1์˜ ํ™•๋ฅ  ๋ฒ”์œ„์ธ 0๋ถ€ํ„ฐ 1 ์‚ฌ์ด์˜ ๋ถˆ์ˆœ๋„ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋ ค๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๊ฐ€ ์—”ํŠธ๋กœํ”ผ์™€ ๋ถ„๋ฅ˜ ์˜ค์ฐจ์˜ ์ค‘๊ฐ„์ž„์„ ๊ด€์ฐฐํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ผ€์ผ์ด ์กฐ์ •๋œ entropy/2๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณผ๊นŒ์š”?

import matplotlib.pyplot as plt
import numpy as np


def gini(p):
    return p * (1 - p) + (1 - p) * (1 - (1 - p))


def entropy(p):
    return - p * np.log2(p) - (1 - p) * np.log2((1 - p))


def error(p):
    return 1 - np.max([p, 1 - p])

x = np.arange(0.0, 1.0, 0.01)

ent = [entropy(p) if p != 0 else None for p in x]
sc_ent = [e * 0.5 if e else None for e in ent]
err = [error(i) for i in x]

fig = plt.figure()
ax = plt.subplot(111)
for i, lab, ls, c, in zip([ent, sc_ent, gini(x), err], 
                          ['Entropy', 'Entropy (scaled)', 
                           'Gini Impurity', 'Misclassification Error'],
                          ['-', '-', '--', '-.'],
                          ['black', 'lightgray', 'red', 'green', 'cyan']):
    line = ax.plot(x, i, label=lab, linestyle=ls, lw=2, color=c)
    
ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15),
          ncol=5, fancybox=True, shadow=False)

ax.axhline(y=0.5, linewidth=1, color='k', linestyle='--')
ax.axhline(y=1.0, linewidth=1, color='k', linestyle='--')
plt.ylim([0, 1.1])
plt.xlabel('p(i=1)')
plt.ylabel('Impurity Index')
plt.show()

๊ทธ๋ฆผ 8. ๋ถˆ์ˆœ๋„ ์ง€ํ‘œ ๋น„๊ต

 ๊ทธ๋ฆผ 8์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋Š” ์Šค์ผ€์ผ์ด 1/2๋กœ ์กฐ์ •๋œ entropy์™€ ๊ฑฐ์˜ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ถˆ์ˆœ๋„ ์ง€ํ‘œ ์„ธ ๊ฐ€์ง€, ๋ถ„๋ฅ˜ ์˜ค์ฐจ, ์—”ํŠธ๋กœํ”ผ, ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”?

 

2. ๊ฒฐ์ • ํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ

 ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ํŠน์„ฑ๊ณต๊ฐ„์„ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๊ณ  ๊นŠ์–ด์ง€๋ฉด ๊ฒฝ๊ณ„๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ณ  ์˜ค๋ฒ„ํ”ผํŒ…๋˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ๊ณผ ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„ ์กฐ๊ฑด์œผ๋กœ ์ตœ๋Œ€ ๊นŠ์ด๊ฐ€ 4์ธ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ํ›ˆ๋ จํ•ฉ๋‹ˆ๋‹ค.

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(criterion='gini', 
                              max_depth=4, 
                              random_state=1)
tree.fit(X_train, y_train)

X_combined = np.vstack((X_train, X_test))
y_combined = np.hstack((y_train, y_test))
plot_decision_regions(X_combined, y_combined, 
                      classifier=tree, test_idx=range(105, 150))

plt.xlabel('petal length [cm]')
plt.ylabel('petal width [cm]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 9. ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ํ•™์Šตํ•œ ๊ฒฐ์ • ๊ฒฝ๊ณ„

 ์‚ฌ์ดํ‚ท๋Ÿฐ์€ ํ›ˆ๋ จ ์ดํ›„์— ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ .dot ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraphViz ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๊ธฐ์—์„œ ๋‹ค์šด ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค! 

 GraphViz ์ด์™ธ์—๋„ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ pydotplus๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” pip ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‚˜์ฝ˜๋‹ค์˜ ๊ฒฝ์šฐ์—๋Š” ๋‘˜์งธ ์ค„์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

pip3 install pydotplus

conda install pydotplus

 

์š” ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— pngํ˜•ํƒœ์˜ ๊ฒฐ์ • ํŠธ๋ฆฌ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. out_file์„ none์œผ๋กœ ์„ค์ •ํ•˜๋ฉด tree.dot ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  dot ๋ฐ์ดํ„ฐ๋ฅผ dot_data ๋ณ€์ˆ˜์— ์ „ํ•ด์ค๋‹ˆ๋‹ค. filled, rounded, class_names, feature_names๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

from pydotplus import graph_from_dot_data
from sklearn.tree import export_graphviz

dot_data = export_graphviz(tree,
                           filled=True, 
                           rounded=True,
                           class_names=['Setosa', 
                                        'Versicolor',
                                        'Virginica'],
                           feature_names=['petal length', 
                                          'petal width'],
                           out_file=None) 
graph = graph_from_dot_data(dot_data) 
graph.write_png('tree.png')

๊ทธ๋ฆผ 10. ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์…‹ ๊ฒฐ์ • ํŠธ๋ฆฌ

 ๊ทธ๋ฆผ 10์„ ๋ณด๋ฉด ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ์„ ํƒํ•œ ๋ถ„ํ• ์„ ์‰ฝ๊ฒŒ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ 105๊ฐœ์˜ ์ƒ˜ํ”Œ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ๊ฝƒ์žŽ ๋„ˆ๋น„ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•ด 0.75๋ฅผ ๊ธฐ์ค€์œผ๋กœ 35๊ฐœ์™€ 70๊ฐœ ์ƒ˜ํ”Œ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ฒซ ๋ถ„ํ• ๋กœ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋Š” Iris-setasaํด๋ž˜์Šค์˜ ์ƒ˜ํ”Œ๋งŒ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ์—์„œ ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜์„œ Iris-versicolor์™€ Iris-verginica ํด๋ž˜์Šค์˜ ์ƒ˜ํ”Œ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

3. ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฐ์ • ํŠธ๋ฆฌ ์—ฐ๊ฒฐ

 ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ(random forest)๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ์˜ ์•™์ƒ๋ธ”(ensemble)๋กœ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ํ‰๊ท  ๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ํŠธ๋ฆฌ๋Š” ๋ถ„์‚ฐ์ด ๋„ˆ๋ฌด ๋†’์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์•™์ƒ๋ธ”ํ•˜๋ฉด ๊ฒฌ๊ณ ํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด์„œ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ  ์˜ค๋ฒ„ํ”ผํŒ…์˜ ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ 4๋‹จ๊ณ„๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค.

  1. n๊ฐœ์˜ ๋žœ๋คํ•œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ(bootstrap)์ƒ˜ํ”Œ์„ ๋ฝ‘์Šต๋‹ˆ๋‹ค. (์ค‘๋ณตํ—ˆ์šฉํ•˜๋ฉฐ ๋žœ๋คํ•˜๊ฒŒ n๊ฐœ ์ƒ˜ํ”Œ ์„ ํƒ)
  2. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ƒ˜ํ”Œ์—์„œ ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค
    1. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ๋žœ๋คํ•˜๊ฒŒ d๊ฐœ์˜ ํŠน์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    2. ์ •๋ณด ์ด๋“๊ณผ ๊ฐ™์€ ๋ชฉ์  ํ•จ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ์„ ์˜ ๋ถ„ํ• ์„ ๋งŒ๋“œ๋Š” ํŠน์„ฑ์„ ์ด์šฉํ•ด ๋…ธ๋“œ๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹จ๊ณ„ 1๊ณผ 2๋ฅผ k๋ฒˆ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐ ํŠธ๋ฆฌ์˜ ์˜ˆ์ธก์„ ๋ชจ์•„์„œ ๋‹ค์ˆ˜๊ฒฐ ํˆฌํ‘œ(majority voting)๋กœ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

 ๋‹จ๊ณ„ 2์—์„œ ํ›ˆ๋ จํ•  ๋•Œ ์กฐ๊ธˆ ๋‹ค๋ฅธ ์ ์€ ๊ฐ ๋…ธ๋“œ์—์„œ ์ตœ์„ ์˜ ๋ถ„ํ• ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ํŠน์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋žœ๋คํ•˜๊ฒŒ ์„ ํƒ๋œ ์ผ๋ถ€ ํŠน์„ฑ๋งŒ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 

 ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ์ฒ˜๋Ÿผ ํ•ด์„์ด ์‰ฌ์šด ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์— ์‹œ๊ฐ„์„ ๋งŽ์ด ํˆฌ์žํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์•™์ƒ๋ธ” ๋ชจ๋ธ์ด ๊ฐœ๋ณ„ ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์žก์Œ์ด ๊ฑฐ์˜ ์—†์ด ์•ˆ์ •๋˜์–ด์žˆ์–ด ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ „์—์„œ ์‹ ๊ฒฝ์จ์•ผํ•  ๊ฒƒ์€ ๋‹จ๊ณ„ 3 ๋ฟ์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๊ณ„์‚ฐ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ๊ทธ๋งŒํผ ๋ถ„๋ฅ˜๊ธฐ์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

 ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ƒ˜ํ”Œ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด ๊ฐœ๋ณ„ ํŠธ๋ฆฌ์˜ ๋‹ค์–‘์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ , ๋”ฐ๋ผ์„œ ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ์˜ ๋ฌด์ž‘์œ„์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์˜ค๋ฒ„ํ”ผํŒ… ์˜ํ–ฅ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณดํ†ต ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ƒ˜ํ”Œ์ด ์ž‘์„์ˆ˜๋ก ์„ฑ๋Šฅ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ํ›ˆ๋ จ ์„ฑ๋Šฅ๊ณผ ํ…Œ์ŠคํŠธ ์„ฑ๋Šฅ ์‚ฌ์ด์˜ ๊ฒฉ์ฐจ๊ฐ€ ์ž‘์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋ฐ˜๋Œ€๋กœ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์˜ค๋ฒ„ํ”ผํŒ…๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ๊ณผ ๊ฐœ๋ณ„ ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ์„œ๋กœ ๋น„์Šทํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 ์‚ฌ์ดํ‚ท๋Ÿฐ์˜ RandomForestClassifier์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ƒ˜ํ”Œ ํฌ๊ธฐ๋ฅผ ์›๋ณธ ํ›ˆ๋ จ ์„ธํŠธ์˜ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์™€ ๊ฐ™๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ท ํ˜•์žกํžŒ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋ถ„ํ• ํ•  ๋•Œ ์‚ฌ์šฉํ•  ํŠน์„ฑ ๊ฐœ์ˆ˜ d๋Š” ์ „์ฒด ํŠน์„ฑ ๊ฐœ์ˆ˜๋ณด๋‹ค ์ž‘๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ ๋‹นํ•œ ๊ธฐ๋ณธ๊ฐ’์€ d = m^(1/2)์ž…๋‹ˆ๋‹ค.

from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(criterion='gini',
                                n_estimators=25, 
                                random_state=1,
                                n_jobs=2)
forest.fit(X_train, y_train)

plot_decision_regions(X_combined, y_combined, 
                      classifier=forest, test_idx=range(105, 150))

plt.xlabel('petal length [cm]')
plt.ylabel('petal width [cm]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 11. ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ์˜ ๊ฒฐ์ • ๊ฒฝ๊ณ„

 ์œ„ ์ฝ”๋“œ์˜ n_estimators ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ 25๊ฐœ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›ˆ๋ จํ–ˆ๊ณ , ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. k-์ตœ๊ทผ์ ‘ ์ด์›ƒ: ๊ฒŒ์œผ๋ฅธ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜

 ์ด๋ฒˆ ์„ธ์…˜์˜ ๋งˆ์ง€๋ง‰ ์ง€๋„ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ(K-Nearest Neighbor, KNN)์ž…๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด์ „์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค๊ณผ๋Š” ์•„์ฃผ ๋‹ค๋ฅธ๋ฐ, KNN์ด ๊ฒŒ์œผ๋ฅธ ํ•™์Šต๊ธฐ(lazy learner)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฐ์„œ ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์—์„œ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์…‹์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

 KNN์„ ์š”์•ฝํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ˆซ์ž k์™€ ๊ฑฐ๋ฆฌ ์ธก์ • ๊ธฐ์ค€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ„๋ฅ˜ํ•˜๋ ค๋Š” ์ƒ˜ํ”Œ์—์„œ k๊ฐœ์˜ ์ตœ๊ทผ์ ‘ ์ด์›ƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ๋‹ค์ˆ˜๊ฒฐ ํˆฌํ‘œ๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 12. k-์ตœ๊ทผ์ ‘ ์ด์›ƒ๊ณผ ๋‹ค์ˆ˜๊ฒฐ ํˆฌํ‘œ

 ๊ทธ๋ฆผ 12๋ฅผ ํ†ตํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋ฌผ์Œํ‘œ๋กœ ํ‘œ์‹œ๋œ ํฌ์ธํŠธ๊ฐ€ ๋™๊ทธ๋ผ๋ฏธ ์•ˆ ๋‹ค์„ฏ ๊ฐœ์˜ ๋‹ค์ˆ˜๊ฒฐ ํˆฌํ‘œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ๊ฐํ˜• ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”์— ํ• ๋‹น๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. 

 ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ถ„๋ฅ˜๊ธฐ๋Š” ์ˆ˜์ง‘๋œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ์ฆ‰์‹œ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋‹จ์ ์€ ์ƒˆ๋กœ์šด ์ƒ˜ํ”Œ์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ณ„์‚ฐ์ด ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๋‹ค๋Š” ์ ์ด์ฃ . ๋ฐ์ดํ„ฐ์˜ ์ฐจ์›์ด ์ ๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ณ„์‚ฐ์˜ ๋ณต์žก๋„๋Š” ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์— ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ํ•  ๊ฒ๋‹ˆ๋‹ค. ๋˜ ํ›ˆ๋ จ ๋‹จ๊ณ„๊ฐ€ ์—†์œผ๋‹ˆ ํ›ˆ๋ จ ์ƒ˜ํ”Œ์„ ๋ฒ„๋ฆด ์ˆ˜ ์—†์–ด์„œ ์ €์žฅ๊ณต๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ฃ .

 ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์œ ํด๋ฆฌ๋””์•ˆ(euclidean)๊ฑฐ๋ฆฌ ์ธก์ • ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ KNN๋ชจ๋ธ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5, 
                           p=2, 
                           metric='minkowski')
knn.fit(X_train_std, y_train)

plot_decision_regions(X_combined_std, y_combined, 
                      classifier=knn, test_idx=range(105, 150))

plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 13. k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ชจ๋ธ์˜ ๊ฒฐ์ •๊ฒฝ๊ณ„

 ์ ์ ˆํ•œ k๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ฒ„ํ”ผํŒ…๊ณผ ์–ธ๋”ํ”ผํŒ… ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์— ์•Œ๋งž๋Š” ๊ฑฐ๋ฆฌ ์ธก์ • ์ง€ํ‘œ๋ฅผ ์„ ํƒํ•ด์•ผํ•˜์ฃ . ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‹ค์ˆ˜ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ์—๋Š” ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ ํด๋ฆฌ๋””์•ˆ์€ ํ‘œ์ค€ํ™”ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ minkowski ๊ฑฐ๋ฆฌ๋Š” ์œ ํด๋ฆฌ๋””์•ˆ๊ณผ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ฅผ ์ผ๋ฐ˜ํ™”ํ•œ ๊ฒƒ์œผ๋กœ, ์•„๋ž˜ ๊ทธ๋ฆผ 14์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 14. minkowski

 ๋งค๊ฐœ๋ณ€์ˆ˜ p=2๋กœ ์ง€์ •ํ•˜๋ฉด ์œ ํด๋ฆฌ๋””์•ˆ์ด, p-1๋กœ ์ง€์ •ํ•˜๋ฉด ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์—๋Š” ๋‹ค๋ฅธ ๊ฑฐ๋ฆฌ ์ธก์ • ๊ธฐ์ค€์ด ๋งŽ์œผ๋‹ˆ ์š”๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

 


๋ถ„๋Ÿ‰ ์กฐ์ ˆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค! ์ฃ„์†กํ•ฉ๋‹ˆ๋‹คใ… ใ…  ์–ด์ฉ์ง€ ๊ธ€์„ ์“ธ ๋•Œ๋งˆ๋‹ค ์ ์  ์„ธ์…˜์ด ๊ธธ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋ถ„์ด๋„ค์š”. ์ด๋ฒˆ ์„ธ์…˜์—์„œํ‹‘ ๊ฒฐ์ • ํŠธ๋ฆฌ, ์•™์ƒ๋ธ”์ด๋ผ๋Š” ๊ฐœ๋…๊ณผ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€์˜ ๋ถˆ์ˆœ๋„ ์ง€ํ‘œ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ง€๋‹ˆ ๋ถˆ์ˆœ๋„, ์—”ํŠธ๋กœํ”ผ, ๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ฅ˜ ์˜ค์ฐจ์˜€์ฃ . ์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ๋ฐฉ๊ธˆ ์–ธ๊ธ‰๋œ ํ‚ค์›Œ๋“œ๋“ค๋งŒ ์ œ๋Œ€๋กœ ์•„์…”๋„ ์ถฉ๋ถ„ํ•˜์‹ค ๊ฒ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์ด ๋งค๋„๋Ÿฝ์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ํ›„์— ๊ฒ€์ˆ˜ํ•˜๋ฉด์„œ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ €๋Š” ๋‹ค์Œ ์„ธ์…˜์—์„œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋“ค๊ณ  ์˜ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

728x90
์ €์ž‘์žํ‘œ์‹œ

'๐Ÿฌ ML & Data > ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 11. ๋ฐ์ดํ„ฐ์…‹ ๋‚˜๋ˆ„๊ธฐ์™€ ํŠน์„ฑ ์Šค์ผ€์ผ๊ณผ ์„ ํƒ  (0) 2020.02.13
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ  (0) 2020.02.11
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 8. ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜์™€ ๋น„์„ ํ˜• ๋ฌธ์ œ ํ’€๊ธฐ  (0) 2020.02.07
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹]Session 7. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€(logistic regression)  (0) 2020.02.05
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 6. ์‚ฌ์ดํ‚ท๋Ÿฐ ์ž…๋ฌธ!  (0) 2020.02.03
'๐Ÿฌ ML & Data/๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 11. ๋ฐ์ดํ„ฐ์…‹ ๋‚˜๋ˆ„๊ธฐ์™€ ํŠน์„ฑ ์Šค์ผ€์ผ๊ณผ ์„ ํƒ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 8. ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜์™€ ๋น„์„ ํ˜• ๋ฌธ์ œ ํ’€๊ธฐ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹]Session 7. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€(logistic regression)
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
      • ๐Ÿฌ ML & Data (50)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (12)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐Ÿณ Docker & Kubernetes (3)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (8)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”