๐Ÿ’ป My Work/๐Ÿง  AI

[์ธ๊ณต์ง€๋Šฅ/ํ˜ผ๊ณต๋จธ์‹ ] 07-1. ์ธ๊ณต ์‹ ๊ฒฝ๋ง (1)

Jaeseo Kim 2022. 12. 17. 23:30

๐Ÿšฉ ๋”ฅ๋Ÿฌ๋‹๊ณผ ์ธ๊ณต ์‹ ๊ฒฝ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ํ…์„œํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํ•œ ์ธ๊ณต ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.

 

ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ์…‹ ๐Ÿ‘•

๋”ฅ๋Ÿฌ๋‹์—์„œ๋Š” MNIST ๋ฐ์ดํ„ฐ์…‹์ด ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ MNIST : ์†์œผ๋กœ ์“ด ์ˆซ์ž(0~9)๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋Œ€ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

MNIST ์˜ˆ์‹œ

๐Ÿ“ ํ…์„œํ”Œ๋กœ

ํŠนํžˆ, ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ๋Š” ์›Œ๋‚™ ์œ ๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ,

์ด ์ค‘ ํ…์„œํ”Œ๋กœ(TensorFlow)๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค!

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ์…‹ ์˜ˆ์‹œ

 

๐Ÿ“ ์ผ€๋ผ์Šค

์šฐ๋ฆฌ๊ฐ€ ์ด์šฉํ•  ๋ฐ์ดํ„ฐ์…‹์€ 10์ข…๋ฅ˜์˜ ํŒจ์…˜ ์•„์ดํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋Ÿผ, ํ…์„œํ”Œ๋กœ์˜ ์ผ€๋ผ์Šค ํŒจํ‚ค์ง€๋ฅผ ์ž„ํฌํŠธํ•œ ํ›„, ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ผ€๋ผ์Šค keras.datasets.fashion_mnist ๋ชจ๋“ˆ์˜ load_data() : ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ฐ˜ํ™˜
from tensorflow import keras
(train_input, train_target), (test_input, test_target) =\
  keras.datasets.fashion_mnist.load_data()

๋ฐ์ดํ„ฐ์…‹ ๋‹ค์šด๋กœ๋“œ

 

๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ์˜† ํด๋” ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ํ™•์ธ

๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~_~

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ํ™•์ธ

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ค‘ ์ž…๋ ฅ์€ 60,000๊ฐœ์˜ ์ด๋ฏธ์ง€๋กœ, ๊ฐ ์ด๋ฏธ์ง€๋Š” 28x28 ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ค‘ ํƒ€๊นƒ๋„ 60,000๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ๋Š” 1์ฐจ์› ๋ฐฐ์—ด์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„ค์š”~!

โ–ถ๏ธ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋Š” 60,000๊ฐœ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ํ™•์ธ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ค‘ ์ž…๋ ฅ์€ 10,000๊ฐœ์˜ ์ด๋ฏธ์ง€๋กœ, ๊ฐ ์ด๋ฏธ์ง€๋Š” 28x28 ํฌ๊ธฐ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ค‘ ํƒ€๊นƒ๋„ 10,000๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ๋Š” 1์ฐจ์› ๋ฐฐ์—ด

โ–ถ๏ธ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” 10,000๊ฐœ

 

๐Ÿ“ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅ

๋งทํ”Œ๋กฏ๋ฆฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์—์„œ ๋ช‡ ๊ฐœ์˜ ์ƒ˜ํ”Œ์„ ๊ทธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๐Ÿ“Œ ๋งทํ”Œ๋กฏ๋ฆฝ์˜ subplots() : ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ (figure ์™€ axes ๋ฅผ ๋ฐ˜ํ™˜)
๐Ÿ“Œ figure : ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ํ”„๋ ˆ์ž„ (subplot ์€ ๊ทธ๋ž˜ํ”„์ด๊ณ , ํ•œ figure ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ)
๐Ÿ“Œ axes : ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ ค์ง€๋Š” ์บ”๋ฒ„์Šค

ex) fig, axs = plt.subplots(2,2) : 4๊ฐœ(2x2)์˜ ax๋“ค์„ ๊ฐ€์ง€๋Š” ํ•˜๋‚˜์˜ figure ์ƒ์„ฑ

์ฐธ๊ณ 

import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 10, figsize=(10, 10))
for i in range(10):
  axs[i].imshow(train_input[i], cmap="gray_r")
  axs[i].axis("off")
plt.show()

์ƒ˜ํ”Œ ์ผ๋ถ€ ์ถœ๋ ฅ

 

๐Ÿ“ ํƒ€๊นƒ ๊ตฌ์„ฑ

ํŒจ์…˜ MNIST์˜ ํƒ€๊นƒ์€ ๊ฐ๊ฐ 0~9๊นŒ์ง€์˜ ์ˆซ์ž ๋ ˆ์ด๋ธ”๋กœ ๋˜์–ด ์žˆ๊ณ , ๊ฐ ์ˆซ์ž๋งˆ๋‹ค ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. (10๊ฐœ ๋ถ„๋ฅ˜)

Label		|0	|1	|2	|3	|4	|5	|6	|7	  |8	|9
Description	|ํ‹ฐ์…”์ธ 	|๋ฐ”์ง€	|์Šค์›จํ„ฐ	|๋“œ๋ ˆ์Šค	|์ฝ”ํŠธ	|์ƒŒ๋‹ฌ	|์…”์ธ 	|์Šค๋‹ˆ์ปค์ฆˆ |๊ฐ€๋ฐฉ	|์•ตํด ๋ถ€์ธ 

 

๊ทธ๋Ÿผ ์œ„ ๊ทธ๋ฆผ ์ƒ˜ํ”Œ์˜ ํƒ€๊นƒ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํƒ€๊นƒ ์ˆซ์ž ๋ ˆ์ด๋ธ”

์ˆซ์ž 5๋กœ ๊ฐ™์€ ๋งˆ์ง€๋ง‰ 2๊ฐœ ์ƒ˜ํ”Œ์ด ๋ณด์ด๋„ค์š”!

์ฆ‰, ๋งˆ์ง€๋ง‰ 2๊ฐœ ์ƒ˜ํ”Œ์€ ์œ„ ์‚ฌ์ง„์—์„œ ๋ดค์„ ๋•Œ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์‹ ๋ฐœ(์ƒŒ๋‹ฌ)์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ๊ฐ ๋ ˆ์ด๋ธ”๋งˆ๋‹ค์˜ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋‹ˆ 6,000๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ“Œ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€๋กœ ํŒจ์…˜ ์•„์ดํ…œ ๋ถ„๋ฅ˜ํ•˜๊ธฐ

๐Ÿ’ก ํ•ด๋‹น ํ›ˆ๋ จ ์ƒ˜ํ”Œ์€ 60,000๊ฐœ๋‚˜ ๋˜์—ˆ์ฃ ..! ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด, ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋Š” ๊ฒƒ๋ณด๋‹จ ์ƒ˜ํ”Œ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ›ˆ๋ จํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

โœจ ์ƒ˜ํ”Œ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ›ˆ๋ จํ•œ๋‹ค..?! ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์ด ๋”ฑ์ด๋„ค์š”! ๊ทธ๋ ‡๊ธฐ์— 4์žฅ์—์„œ ๋ฐฐ์šด SGDClassifier ๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๊ณ , 4์žฅ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.๐Ÿ˜

 

[์ธ๊ณต์ง€๋Šฅ/ํ˜ผ๊ณต๋จธ์‹ ] 04-2. ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (1)

์ ์ง„์ ์ธ ํ•™์Šต์„ ์œ„ํ•œ ๋ฌธ์ œ ์ธ์‹ ๋ชจ๋ธ์ด ๋งค๋ฒˆ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ƒˆ๋กญ๊ฒŒ ํ›ˆ๋ จํ•˜๋Š” ๋ฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ์— ์ค€๋น„๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์กฐ๊ธˆ์”ฉ ์ „๋‹ฌ๋œ๋‹ค๋ฉด, ๊ณ 

avoc-o-d.tistory.com

 

๐Ÿ“ ์ƒ˜ํ”Œ ์ค€๋น„ํ•˜๊ธฐ

๐Ÿ“04 ์žฅ ๋ฆฌ๋งˆ์ธ๋“œ !

  • SGDClassifier ํด๋ž˜์Šค์˜ loss ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 'log'๋กœ ์ง€์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๐Ÿค” ์ด์œ ๋Š”? ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.
  • ํ‘œ์ค€ํ™” ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๐Ÿค” ์ด์œ ๋Š”? ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์€ ์—ฌ๋Ÿฌ ํŠน์„ฑ ์ค‘ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ ๋ฐฉํ–ฅ์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๋‹ˆ๊นŒ, ๋งŒ์•ฝ ํŠน์„ฑ๋งˆ๋‹ค ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋งŽ์ด ๋‹ค๋ฅด๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์†์‹ค ํ•จ์ˆ˜์˜ ๊ฒฝ์‚ฌ๋ฅผ ๋‚ด๋ ค์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์ค€ํ™” ์ „์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

ํŒจ์…˜ MNIST์˜ ๊ฒฝ์šฐ ๊ฐ ํ”ฝ์…€์€ 0~255 ์‚ฌ์ด์˜ ์ •์ˆซ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, 255๋กœ ๋‚˜๋ˆ„์–ด 0~1 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.
(์ฐธ๊ณ ) ํ‘œ์ค€ํ™”๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์–‘์ˆ˜๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ์ „์ฒ˜๋ฆฌํ•  ๋•Œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก SGDClassifier ๋Š” 2์ฐจ์› ์ž…๋ ฅ์„ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ 2์ฐจ์› ๋ฐฐ์—ด์ธ ๊ฐ ์ƒ˜ํ”Œ์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํŽผ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

28x28 ์ด๋ฏธ์ง€๋ฅผ ํŽผ์ณ์„œ ๊ธธ์ด๊ฐ€ 784์ธ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

train_scaled = train_input / 255.0
train_scaled = train_scaled.reshape(-1, 28*28) # ์ฒซ ๋ฒˆ์งธ ์ฐจ์›(์ƒ˜ํ”Œ ๊ฐœ์ˆ˜)์€ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋‘ ๋ฒˆ์จฐ, ์„ธ ๋ฒˆ์จฐ ์ฐจ์›์ด 1์ฐจ์›์œผ๋กœ ํ•ฉ์ณ์ง

train_scaled์˜ ํฌ๊ธฐ ํ™•์ธ

784๊ฐœ์˜ ํ”ฝ์…€๋กœ ์ด๋ฃจ์–ด์ง„ 60,000๊ฐœ์˜ ์ƒ˜ํ”Œ์ด ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์„ฑ๋Šฅ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“ ์„ฑ๋Šฅ ํ™•์ธ

SGDClassifier ํด๋ž˜์Šค์™€ cross_validate() ๋ฅผ ์ด์šฉํ•ด ์ค€๋น„๋œ ์ƒ˜ํ”Œ์—์„œ ๊ต์ฐจ ๊ฒ€์ฆ์œผ๋กœ ์„ฑ๋Šฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

  • SGDClassifier ํด๋ž˜์Šค์˜ loss ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 'log'๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค” ํ˜„์žฌ ๋ฌธ์ œ๋Š” 10๊ฐœ ํด๋ž˜์Šค(0~9)๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋‹ค์ค‘ ๋ถ„๋ฅ˜ ๋ฌธ์ œ์ธ๋ฐ, ์™œ ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜(์ด์ง„ ํฌ๋กœ์Šค์—”ํŠธ๋กœํ”ผ ์†์‹ค ํ•จ์ˆ˜ : ์ด์ง„ ๋ถ„๋ฅ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์‹ค ํ•จ์ˆ˜) ์“ฐ๋Š” ๊ฑด๊ฐ€์š”?

๐Ÿ’ก ์‚ฌ์ดํ‚ท๋Ÿฐ SGDClassifier์— ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํฌ๋กœ์Šค์—”ํŠธ๋กœํ”ผ ์†์‹ค ํ•จ์ˆ˜(๋‹ค์ค‘ ๋ถ„๋ฅ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์‹ค ํ•จ์ˆ˜)๋ฅผ ์ง€์ •ํ•  ๊ณณ์ด ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿค” ๊ทธ๋Ÿผ ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋‚˜์š”?

๐Ÿ’ก(์•„๋ž˜ ๊ทธ๋ฆผ)

๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€๋กœ ๋‹ค์ค‘ ๋ถ„๋ฅ˜ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ • ์š”์•ฝ

๐Ÿ“(์ฐธ๊ณ ์šฉ) 04์žฅ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€๋กœ ๋‹ค์ค‘ ๋ถ„๋ฅ˜ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋ฆฌ๋งˆ์ธ๋“œ

ํด๋ž˜์Šค๋งˆ๋‹ค ์„ ํ˜• ๋ฐฉ์ •์‹์„ ๋งŒ๋“ค์–ด z๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊ณ„์‚ฐ

๐Ÿ’ก ์ฆ‰, ์ด์ง„ ๋ถ„๋ฅ˜๋“  ๋‹ค์ค‘ ๋ถ„๋ฅ˜๋“  ์ƒ๊ด€ ์—†์ด SGDClassifier ํด๋ž˜์Šค์˜ loss ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 'log'๋กœ ์ง€์ •ํ•˜๋ฉด ๊ฐ ๋ถ„๋ฅ˜์— ๋งž๊ฒŒ ํ›ˆ๋ จ์ด ๋ฉ๋‹ˆ๋‹ค.

from sklearn.model_selection import cross_validate
from sklearn.linear_model import SGDClassifier

sc = SGDClassifier(loss="log", max_iter=5, random_state=42) # ๋ฐ˜๋ณต ํšŸ์ˆ˜ 5๋ฒˆ (ํšŸ์ˆ˜ ๋Š˜๋ ค๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ๋ฏธ๋ฏธํ•จ)
scores = cross_validate(sc, train_scaled, train_target, n_jobs=-1)

์„ฑ๋Šฅ ํ‰๊ท ๊ฐ’ ํ™•์ธ

์ •ํ™•๋„ 82%๋ผ๋‹ˆ! ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹๋„ค์š”. ๐Ÿ˜

์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด! ์šฐ์„  ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๊ณต์‹์— ๋Œ€ํ•ด ๋ฆฌ๋งˆ์ธ๋“œ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“04 ์žฅ ๋ฆฌ๋งˆ์ธ๋“œ !

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๊ณต์‹
    z = a x (๋ฌด๊ฒŒ) + b x (๊ธธ์ด) + c x (๋Œ€๊ฐ์„  ๊ธธ์ด) + d x (๋†’์ด) + e x (๋„ˆ๋น„) + f

๐Ÿ’ก ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๊ณต์‹์„ ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ์— ๋งž๊ฒŒ ๋ณ€ํ˜•ํ•˜๋ฉด?

  • ์ด 784๊ฐœ์˜ ํ”ฝ์…€, ์ฆ‰ 784๊ฐœ์˜ ํŠน์„ฑ์ด ์žˆ์Œ
  • ๊ฐ ๋ ˆ์ด๋ธ”(0~9)๋งˆ๋‹ค ๋ฐฉ์ •์‹์„ ์„ธ์›€
  • โœจ ์ฃผ์˜! ๊ฐ ๋ ˆ์ด๋ธ”๋งˆ๋‹ค ๊ฐ€์ค‘์น˜์™€ ์ ˆํŽธ์€ ๋‹ค๋ฅธ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
    ๐Ÿค” ์™œ? ๋ ˆ์ด๋ธ” ๋ชจ๋‘ ๊ฐ™์€ ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์„ ๋ฆฌ๊ฐ€ ์—†๊ฒ ์ฃ !
     
    • [๋ ˆ์ด๋ธ” 0] z_ํ‹ฐ์…”์ธ   = w1 x (ํ”ฝ์…€1) + w2 x (ํ”ฝ์…€2) + ... + w784 x (ํ”ฝ์…€784)  + b
    • [๋ ˆ์ด๋ธ” 1] z_๋ฐ”์ง€ = w1' x (ํ”ฝ์…€1) + w2' x (ํ”ฝ์…€2) + ... + w784' x (ํ”ฝ์…€784)  + b'
    • ...

ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ฐฉ์ •์‹ ๊ณ„์‚ฐ

 

โ–ถ๏ธ 4์žฅ์—์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ,,! 10๊ฐœ์˜ ํด๋ž˜์Šค(ํ‹ฐ์…”์ธ , ๋ฐ”์ง€, ...)์— ๋Œ€ํ•œ ์„ ํ˜• ๋ฐฉ์ •์‹์„ ๋ชจ๋‘ ๊ณ„์‚ฐ(z_ํ‹ฐ์…”์ธ , z_๋ฐ”์ง€, ...)ํ•œ ๋‹ค์Œ ์†Œํ”„ํŠธ๋งฅ์Šค ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ™•๋ฅ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค~! ๐Ÿฆ•๐Ÿฆ•

 

์ง€๊ธˆ๊นŒ์ง€ ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์— ๋Œ€ํ•ด ๋ณต์Šต์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ! ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ธ๊ณต ์‹ ๊ฒฝ๋ง์€ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์™€ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค..!!! ๐Ÿ˜

 

๋‹ค์Œ ๊ธ€์—์„œ ์ธ๊ณต ์‹ ๊ฒฝ๋ง์— ๋Œ€ํ•ด ์ด์–ด ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!