๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€

AI์‹ค์Šต ๊ณผ์ œ ๊ธฐ๋ก: data set, unique value, tree by python

by hyerong 2022. 8. 26.

์ตœ์ดˆ ์ž‘์„ฑ ์ผ์ž : 2021๋…„ 7์›” 9์ผ 23์‹œ 56๋ถ„ 

 

๋‹น์‹œ ์ˆ˜๊ฐ•์‹ ์ฒญ ์‹ค์ˆ˜?๋กœ ์ปด๊ณต ์‹ ์ž…์ผ๋•Œ ๋“ค์€ 3ํ•™๋…„ ์ˆ˜์—….. 

๊ทธ๋•Œ์˜ ์—ด์ •๊ณผ ์ดํ•ด์— ๋Œ€ํ•œ ์ง‘์ฐฉใ… ์„ ๊ธฐ์–ตํ•˜๋ฉฐ ๋‹ค์‹œ ํŒŒ์ด์ฌ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•ด์•ผ๊ฒ ๋‹ค. 

๋‹น์‹œ์—” unique value๋ฅผ ์ดํ•ดํ•˜๊ธฐ๋„ ํž˜๋“ค์—ˆ๋Š”๋ฐ ๋‹ค์‹œ ๋Œ์•„๋ณด๋‹ˆ ๊ฐํšŒ๊ฐ€ ์ƒˆ๋กญ๋‹ค. 


์ง€๋‚œ 1ํ•™๊ธฐ, ์ˆ˜๊ฐ•์‹ ์ฒญ ์‹ค์ˆ˜๋กœ ์ˆ˜๊ฐ•ํ•œ ํ•œ ํ•™๋…„ ์œ„ ์ˆ˜์—…์ด์—ˆ๋˜ AI ํ”„๋กœ์ ํŠธ ์ž…๋ฌธ ์ˆ˜์—…์˜ ๋งˆ์ง€๋ง‰ ๋ฆฌํฌํŠธ๋ฅผ ๋ธ”๋กœ๊ทธ์—๋„ ์ •๋ฆฌํ•œ๋‹ค. 10%์˜ ๊ต์ˆ˜๋‹˜์˜ ์„ค๋ช…๊ณผ 90%์˜ ์…€ํ”„ ์‹ค์Šต์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋˜ ์ˆ˜์—…..

ํฌ๊ธฐํ•˜์ง€ ๋ง๊ณ  ๋”ฐ๋ผ๊ฐ€๋ณด์ž๋Š” ์ƒ๊ฐ์œผ๋กœ ์กด๋ฒ„(์กด๊ท€ํ•˜๊ฒŒ ๋ฒ„ํ‹ฐ๊ธฐ)ํ–ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋ฆฌํฌํŠธ ์ž‘์„ฑ ๋• ์ฝ”๋žฉ์—์„œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋„ ๋ชปํ•˜๊ณ  late๋ฅผ ์•ˆ ๋ฐ›์•„์ฃผ์‹œ๋Š” ๊ต์ˆ˜๋‹˜์ด๋ผ ์„ธ๋ฒˆ์งธ ๋ฆฌํฌํŠธ๋Š” ์ œ์ถœ๋„ ๋ชปํ–ˆ์—ˆ๋Š”๋ฐ, ๋งˆ์ง€๋ง‰์ด์—ˆ๋˜ ์—ฌ์„ฏ๋ฒˆ์งธ ๋ฆฌํฌํŠธ๋Š” ์šฐ๋ฆฌ ๋ถ„๋ฐ˜ ์•ˆ์—์„œ best report๋กœ ๋ฝ‘ํ˜€์„œ ์—‘์ŠคํŠธ๋ผ ์ ์ˆ˜๊นŒ์ง€ ๋ฐ›์œผ๋ฉฐ ์กด๋ฒ„์— ์„ฑ๊ณตํ•œ ์ˆ˜์—…์ด์—ˆ๋‹ค. ์ดˆ๋ฐ˜์—” ์ง„์งœ ์ž˜๋ชป ๋“ค์–ด์™”๋‹ค๋Š” ์ƒ๊ฐ๊ณผ ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋Š”๋ฐ, ํŒ€ํ”Œํ•  ๋•Œ ์„ ๋ฐฐ๋“ค๋„ ์ž˜ ๋งŒ๋‚˜๊ณ  ํŠนํžˆ ์šฐ์—ฐํžˆ ๊ฐ™์€ ํŒ€์ด์—ˆ๋˜ ์„ ๋ฐฐ๋‹˜๊ป˜์„  ์ง„์งœ 1:1 ๊ณผ์™ธ์ •๋„๋กœ ๊ฐ€๋ฅด์ณ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•˜๊ฒŒ ํŒ€ํ”Œ๊ณผ์ œ๋„ ์ž˜ ๋งˆ๋ฌด๋ฆฌํ•ด์„œ ํŒ€ํ”Œ ๊ณผ์ œ ๋ณด๊ณ ์„œ๋„ ์šฐ์ˆ˜ ๋ณด๊ณ ์„œ๋กœ ์„ ์ •ํ•ด์„œ ์—‘์ŠคํŠธ๋ผ ์ ์ˆ˜๋„ ๋ฐ›์•˜์—ˆ๋‹ค.

ํ•œ๋ฒˆ ๊ณผ์ œ๋ฅผ ๋ชป ์ œ์ถœํ•ด์„œ PD๋Š” ๋‚ ์•„๊ฐ„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ฌด์‚ฌํžˆ P๋ฅผ ๋ฐ›์œผ๋ฉฐ ๋๋‚ฌ๋˜ ์ˆ˜์—…!

์•„๋ž˜ ์‹ค์Šต ๋‚ด์šฉ์€ ํŒŒ์ด์ฌ์œผ๋กœ data set์„ ์ง์ ‘ํ•˜๊ณ  unique data๋“ค๋งŒ ๋ฝ‘์•„๊ฐ€๋ฉฐ tree๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , best report๋กœ ๋ฝ‘ํžŒ ๋‚ด์šฉ์ด๋‹ค.


๋‚ด์šฉ 1. dataset์„ค์ • ํ›„, unique value์ฐพ๊ธฐ

1) Make a toy dataset : 

โ€‹

ํ•™์ƒ ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ง•์ด ๋  ๋งŒํ•œ ๊ฒƒ๋“ค๋กœ ์ž‘์„ฑํ•œ๋‹ค. 

๊ธฐ์ˆ™์‚ฌ ํ˜ธ๊ด€(rc), ํ•™๋ฒˆ(std_n), ์ „๊ณต(major)์œผ๋กœ dataset ์„ค์ •

 

2) Make useful functions : unique value๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

์ฃผ์–ด์ง„ row data์—์„œ, ๋ช‡๋ฒˆ์งธ columns๋ฅผ returnํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํ•จ์ˆ˜ 

 

3) Finding the unique value ๊ฒฐ๊ณผ 

2) Make useful functions : 

โ€‹

ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” class_counts ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

โ€‹

๊ฐ label๋“ค์ด ๋ช‡๊ฐœ์ธ์ง€ counts์— ์ €์žฅํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— return 

 

 

 

 

3) Finding the unique value ๊ฒฐ๊ณผ 

โ€‹

: (ํ•™์ƒ)ํ•ญ๋ชฉ๋“ค์— ๋Œ€ํ•ด์„œ Grace 1๋ช…, Rodem 3๋ช…, Vision 2๋ช…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. โ€‹

 

 

โ€‹

โ€‹

 

๋‚ด์šฉ 2 Let's calculate "Entropy" ์—”ํŠธ๋กœํ”ผ ๊ณ„์‚ฐ 

 

1) In pure dataset, about entrpoy -> Entropy๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ์ƒ์„ฑ

 

 

 

2) pure dataset ์—์„œ์˜ entropy value ์ฐพ๊ธฐ 

โ€‹

 

3) impure dataset ์—์„œ์˜ entropy value ์ฐพ๊ธฐ

โ€‹

: ์ฒซ๋ฒˆ์งธ๋Š” ๋‘๊ฐœ๋ฟ์ธ์˜ impure dataset, ๋‘๋ฒˆ์งธ๋Š” ์›๋ž˜ ํ•ญ๋ชฉ์— ์—†๋˜ ํ•ญ๋ชฉ๋„ ์ถ”๊ฐ€ํ•œ impure dataset 

โ€‹

 

๋‚ด์šฉ 3 : calculate information gain ์•ž์„œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ dataset์„ ๊ฐ€์ง€๊ณ  ์ถ”๊ฐ€ ์ •๋ณด ์–ป๊ธฐ 

- ์ˆ˜์—… ์ž๋ฃŒ mnist, tree_scratch ์ž๋ฃŒ ์ฐธ๊ณ  

โ€‹

2) How much information do we gain by partitioning on 'CS'?

โ€‹

๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด๋‘” dataset ํ•ญ๋ชฉ์—์„œ CS๊ฐ€ major๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ true rows , CS์™ธ์— ๋‹ค๋ฅธ major๊ฐ€ ์ €์žฅ๋œ ํ•ญ๋ชฉ๋“ค์€ false rows ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์ถœ๋ ฅ๋ฌธ ๋ณด์ด๋„๋ก ์ถœ๋ ฅํ•˜๊ธฐ 

โ€‹

 

3) How much information do we gain by partitioning on student number >= 19?

โ€‹

์ฃผ์–ด์ง„ ์ž๋ฃŒ๋“ค์—์„œ ํ•™๋ฒˆ์ด 19ํ•™๋ฒˆ ์ด์ƒ์ธ ํ•™๋ฒˆ(19,21)๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ํ•™๋ฒˆ(17)์„ ๋ถ„๋ฅ˜ํ•˜๊ณ  uncertainty ๊ตฌํ•˜๊ธฐ 

4) Find the best split based on Information Gain ์ •๋ณด๋“ค์„ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ์งˆ๋ฌธ๊ณผ gain ์ฐพ๊ธฐ 

โ€‹

- - ์ˆ˜์—… ์ž๋ฃŒ tree_scratch ์ž๋ฃŒ ์ฐธ๊ณ  

 

<best question ์ถœ๋ ฅ>

 

 

5) tree๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค ์ƒ์„ฑ

 

- ์ˆ˜์—… ์ž๋ฃŒ mnist, tree_scratch ์ž๋ฃŒ ์ฐธ๊ณ  

 

 

 

<ํŠธ๋ฆฌ ์ถœ๋ ฅ๋ฌธ ํ•จ์ˆ˜ ์ƒ์„ฑ> 

 

6) Let's build one Decision Tree : ํŠธ๋ฆฌ ์„ค๊ณ„ 

โ€‹

major, std_n์— ๋Œ€ํ•œ question๋“ค ์ถœ๋ ฅํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๊ฒŒ ํ•˜๊ธฐ 

 

 

 

โ€‹

โ€‹

7) ํŠธ๋ฆฌ ์ถœ๋ ฅํ•˜๊ธฐ 

+) Which results do you get when you classify 'train_data[0]'? 

classifyํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  train_data์˜ [0]๋ฒˆ์งธ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ classify์ ์šฉํ•œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ 

โ€‹

++) Then, Which class is 'train_data[0]' classified into? 

๋˜ํ•œ train_data์˜[0]๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋“ค์ด ์–ด๋–ค ํด๋ž˜์Šค์— ๋“ค์–ด์žˆ๋Š”์ง€๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋”” ํด๋ž˜์Šค์— ์†ํ•˜๋Š”์ง€๋ฅผ ์ถœ๋ ฅ 

10) ๋งˆ๋ฌด๋ฆฌ : ์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋˜ ํ•จ์ˆ˜๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ ์‹œ๊ฐํ™” ํ•˜๊ธฐ 

 

 

 

โ€‹