๋”ฅ๋Ÿฌ๋‹/Today I learned :

[๋”ฅ๋Ÿฌ๋‹] ๋ชจ๋ธ ์„ค๊ณ„ํ•˜๊ธฐ

์ฃผ์˜ ๐Ÿฑ 2021. 3. 21. 14:03
728x90
๋ฐ˜์‘ํ˜•

ํ์•” ์ˆ˜์ˆ  ํ™˜์ž์˜ ์ƒ์กด์œจ ์˜ˆ์ธกํ•˜๊ธฐ

 

์ „์ฒด ์ฝ”๋“œ

# -*- coding: utf-8 -*-
# ์ฝ”๋“œ ๋‚ด๋ถ€์— ํ•œ๊ธ€์„ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

# ๋”ฅ๋Ÿฌ๋‹์„ ๊ตฌ๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ€๋ผ์Šค ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
import numpy as np
import tensorflow as tf

# ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
np.random.seed(3)
tf.random.set_seed(3)

# ์ค€๋น„๋œ ์ˆ˜์ˆ  ํ™˜์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ๋“ค์ž…๋‹ˆ๋‹ค.
Data_set = np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")

# ํ™˜์ž์˜ ๊ธฐ๋ก๊ณผ ์ˆ˜์ˆ  ๊ฒฐ๊ณผ๋ฅผ X์™€ Y๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
X = Data_set[:,0:17]
Y = Data_set[:,17]

# ๋”ฅ๋Ÿฌ๋‹ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋ธ์„ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# ๋”ฅ๋Ÿฌ๋‹์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)

 

model ํ•จ์ˆ˜ : ๋ชจ๋ธ์„ ์„ค์ •ํ•˜๊ณ  ๊ตฌ๋™ (= ๋”ฅ๋Ÿฌ๋‹์˜ ๊ตฌ์กฐ)

 

model = Sequential()  : ๋”ฅ๋Ÿฌ๋‹์˜ ๊ตฌ์กฐ๋ฅผ ์งœ๊ณ  ์ธต์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„

 

model.compile() :์ปดํŒŒ์ผ 

 

model.fit() : ๋ชจ๋ธ์„ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰

 

 

 

์ž…๋ ฅ์ธต ์ถœ๋ ฅ์ธต ์€๋‹‰์ธต

model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

 

๋”ฅ๋Ÿฌ๋‹ = ํผ์…‰ํŠธ๋ก  ์œ„์— ํผ์…‰ํŠธ๋ก  ์ธต์„ ์ฐจ๊ณก์ฐจ๊ณก ์ถ”๊ฐ€ํ•˜๋Š” ํ˜•ํƒœ

 

Sequential()ํ•จ์ˆ˜๋ฅผ model๋กœ ์„ ์–ธํ•˜๊ณ  model.add() - ์ƒˆ๋กœ์šด ์ธต ์ถ”๊ฐ€

์œ„ ์ฝ”๋“œ๋Š” ๋‘๊ฐœ์˜ ์ธต์„ ๊ฐ€์ง„ ๋ชจ๋ธ์„ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค

๋งจ ๋งˆ์ง€๋ง‰ ์ธต = ์ถœ๋ ฅ์ธต (๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.)   ๋‚˜๋จธ์ง€ = ์€๋‹‰์ธต

 

๊ฐ๊ฐ์˜ ์ธต์€ Denseํ•จ์ˆ˜๋กœ ๊ตฌ์ฒด์  ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ • , ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ฒƒ์ธ์ง€

model.add(Dense(30, input_dim=17activation='relu'))

: 30๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค

: input_dim = ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์—์„œ ๋ช‡ ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ๊ฐ€?

 

:::  ๋ฐ์ดํ„ฐ์—์„œ 17๊ฐœ์˜ ๊ฐ’์„ ๋ฐ›์•„ ์€๋‹‰์ธต์œผ๋กœ 30๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๋ณด๋‚ธ๋‹ค   

 

  • keras๋Š” ์ž…๋ ฅ์ธต์„ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฒซ ๋ฒˆ์งธ ์€๋‹‰์ธต์— input_dim ๋ฅผ ์ ์Œ => ์ฒซ๋ฒˆ์งธ Dense๊ฐ€ ์€๋‹‰์ธต+์ž…๋ ฅ์ธต ์—ญํ• 
  • ๋‘๋ฒˆ์งธ Dense๋Š” ์ถœ๋ ฅ์ธต์„ ์˜๋ฏธ

์€๋‹‰์ธต์˜ ๊ฐ ๋…ธ๋“œ๋Š” 17๊ฐœ์˜ ์ž…๋ ฅ ๊ฐ’์—์„œ ์ž„์˜์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ ๋…ธ๋“œ๋กœ ์ „์†ก๋˜์–ด ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋‚œ๋‹ค

๊ทธ๋ฆฌ๊ณ  ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์นœ ๊ฒฐ๊ด๊ฐ’์ด ์ถœ๋ ฅ์ธต์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

activation๋ถ€๋ถ„์— ์›ํ•˜๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ์ ๊ธฐ (๋ ๋ฃจ)

 

์ถœ๋ ฅ์ธต : model.add(Dense(1, activation='sigmoid'))์ถœ๋ ฅ์ธต์˜ ๋…ธ๋“œ ์ˆ˜๋Š” 1 (์ถœ๋ ฅ๊ฐ’์„ ํ•˜๋‚˜๋กœ ์ •ํ•ด์„œ ๋ณด์—ฌ ์ค˜์•ผ ํ•˜๋ฏ€๋กœ)์ด ๋…ธ๋“œ์—์„œ ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’ ์—ญ์‹œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ์ตœ์ข… ์ถœ๋ ฅ ๊ฐ’์œผ๋กœ ๋‚˜์™€์•ผ ํ•จ (์‹œ๊ทธ๋ชจ์ด๋“œ ์‚ฌ์šฉ)

 

 

 

๋ชจ๋ธ ์ปดํŒŒ์ผ

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

 

  1. ์–ด๋–ค ์˜ค์ฐจํ•จ์ˆ˜ ์‚ฌ์šฉํ• ์ง€ ์ •ํ•œ๋‹ค
    • (ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ ํ•จ์ˆ˜ ์‚ฌ์šฉ - ์ˆ˜๋ ดํ•˜๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆผ/// ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ ๊ณ„์—ด์˜ ํ•จ์ˆ˜๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  2. ์ตœ์ ํ™” ์œ„ํ•œ ๋ฐฉ๋ฒ• ๊ฒฐ์ •
  3. metrics() ์ปดํŒŒ์ผ๋  ๋•Œ ๋ชจ๋ธ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ ๋‚˜ํƒ€๋‚˜๊ฒŒ๋” ์„ค์ •
    • ์ •ํ™•๋„ ์ธก์ •์— ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ŠคํŠธ ์ƒ˜ํ”Œ์„ ํ•™์Šต ๊ณผ์ •์—์„œ ์ œ์™ธ์‹œํ‚ด์œผ๋กœ์จ ๊ณผ์ ํ•ฉ ๋ฌธ์ œ ๋ฐฉ์ง€

๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ

์ฃผ๋กœ ๋ถ„๋ฅ˜ ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ

ํŠนํžˆ, ์˜ˆ์ธก ๊ฐ’์ด ์ฐธ.๊ฑฐ์ง“ ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์ผ ๋•Œ ์ดํ•ญ ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ (binary crossentropy) ์‚ฌ์šฉ ( ์‚ฌ๋ง(0),์ƒ์กด(1) ๋‘˜ ์ค‘ ํ•˜๋‚˜)

 

 

๋”ฅ๋Ÿฌ๋‹ ๊ด€๋ จ keras์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ค์ฐจ ํ•จ์ˆ˜

 

 

 

๋ชจ๋ธ ์‹คํ–‰ํ•˜๊ธฐ

model.fit(X, Y, epochs=100, batch_size=10)

 

model.fit() ์ปดํŒŒ์ผ ๋‹จ๊ฒŒ์—์„œ ์ •ํ•ด์ง„ ํ™˜๊ฒฝ์„ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜

 

 

1 epoch (์—ํฌํฌ) = ํ•™์Šต ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋“  ์ƒ˜ํ”Œ(์ฒซ๋ฒˆ์งธํ™˜์ž,๋‘๋ฒˆ์งธ ํ™˜์ž....)์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฒƒ

epochs = 100 ๊ฐ ์ƒ˜ํ”Œ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ 100๋ฒˆ ์žฌ์‚ฌ์šฉ๋ ๋•Œ๊นŒ์ง€ ์‹คํ–‰ ๋ฐ˜๋ณต

 

batch size = ์ƒ˜ํ”Œ์„ ํ•œ ๋ฒˆ์— ๋ช‡ ๊ฐœ์”ฉ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? 

10 : ์ „์ฒด 470๊ฐœ์˜ ์ƒ˜ํ”Œ์„ 10๊ฐœ์”ฉ ๋Š์–ด์„œ ์ง‘์–ด๋„ฃ์–ด๋ผ

 

๋„ˆ๋ฌด ํฌ๋ฉด ํ•™์Šต ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๊ฐ ์‹คํ–‰ ๊ฐ’์˜ ํŽธ์ฐจ๊ฐ€ ์ƒ๊ฒจ ์ „์ฒด ๊ฒฐ๊ด๊ฐ’์ด ๋ถˆ์•ˆ์ •

์ž์‹ ์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ๋‹นํ•  ๋งŒํผ์˜ batch size๋กœ ์„ค์ •!

 

 

 


์‹คํ–‰๊ฒฐ๊ณผ

 

๋ฐ˜์‘ํ˜•