tensorflow๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋จํ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ค๊ณํ๊ณ ์ํ์์ผ ๋ณธ๋ค.
์ ์ฒด ์์ค ์ฝ๋
# ํ์ ์์ ํ์์ ๋ฐ์ดํฐ ์ (csv)๋ฅผ ๋ถ๋ฌ์จ๋ค. from google.colab import files uploaded = files.upload() my_data = 'ThoraricSurgery.csv' # ๋ฅ๋ฌ๋์ ๊ตฌ๋ํ๋ ๋ฐ ํ์ํ ์ผ๋ผ์ค ํจ์๋ฅผ ๋ถ๋ฌ์จ๋ค. from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense import pandas as pd # ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์จ๋ค. import numpy as np import tensorflow as tf # ์๋๋ฅผ ๊ณ ์ ์ํจ๋ค. (๊ฒฐ๊ณผ๋์ผ) np.random.seed(3) tf.random.set_seed(3) # .ํ์์ ๊ธฐ๋ก์ pandas๋ฅผ ํตํด date frameํ์์ผ๋ก ๋ถ๋ฌ์จ๋ค. df = pd.read_csv(my_data, header=None) Data_set = df.to_numpy() # ํ์์ ๊ธฐ๋ก๊ณผ ์์ ์ ๊ฒฐ๊ณผ(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', tf.ke ras.metrics.Recall()]) model.fit(X, Y, epochs=100, batch_size=10)
์ฝ๋๋ฅผ ๋ฏ์ด์ ํ๋ํ๋ ์ดํด๋ณด๋๋ก ํ๋ค.
ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ค.
ํ์ด์ฌ์ ์ธ๋ฑ์ฑ ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ์ธ๋ฑ์ฑ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ฃผ๋ชฉํ์.
์์ฑ : ์ข
์์ ์ ํ, ํํ๋, ํธํก ๊ณค๋ ์ฌ๋ถ, ๊ณ ํต ์ ๋ณด, ๊ธฐ์นจ, ํก์ฐ, ์ฒ์ ์ฌ๋ถ ๋ฑ
ํด๋์ค : ์์กด ์ฌ๋ถ (1 : ์์กด 0 : ์ฌ๋ง)
์
๋ ฅ 17๊ฐ(์์ฑ)์ด ๋ค์ด์ค๊ฒ ๋๊ณ , ์๋์ธต์ 1๊ฐ๋ก ์ด 30๊ฐ์ ๋
ธ๋๊ฐ ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ input_dim์ ๊ฐ์ด 17์ธ ์ด์ ๋, ์
๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ์์ฑ์ ๊ฐ์๊ฐ 17๊ฐ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๋ง๊ณผ ์์กด ์ฆ, 1๊ณผ 0์ 2์ง๋ถ๋ฅ์ ๋ฌธ์ ์ด๋ฏ๋ก ํ์ฑํจ์๋ก sigmoid๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Dense Layer๋ฅผ ํตํด์ Fullyconnectedํ ํ์ต์ ์งํํ๋ค.
๋น์ฉํจ์๋ก๋ binary_crossentropy๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ฐ์ ํด๋์ค๋ฅผ ๊ตฌ๋ถํ ๋ ์ฌ์ฉํ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ต์ Gradinet Descent ์ฆ, ๊ฒฝ์ฌํ๊ฐ๋ฒ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ ์ฌ๊ธฐ์ adam๋ํ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ผ์ข
์ด๋ค. (Adam์ ํ๋๋ชจ๋ธ์ ํ๋ ๋ชจ๋ธ์ ํฉ์ณ ๋ง๋ ๋ฐฉ๋ฒ์ด๋ผ ์๊ฐํ๋ฉด ์ฝ๋ค.)
- Adam์ด๋
๋ชจ๋ฉํ ์ ๊ธฐ๋ณธ ๊ฒฝ์ฌํ๊ฐ๋ฒ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ๊ฐ์ ์ํจ ๋ฐฉ๋ฒ์ด๊ณ , ์์ ์์คํ๋กญ์ ๋ณดํญ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด๋ค.
Adam์ ์ด๋ฌํ ์์ ์์คํ๋กญ๊ณผ ๋ชจ๋ฉํ ๋ฐฉ์์ด ํฉ์ณ์ง ๊ฒฝ์ฌํ๊ฐ๋ฒ์ด๋ค.
๊ฐ์ฅ ๋ง์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจ๊ณผ๊ฐ ์ข์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. (๋๋ถ๋ถ์ ๋ชจ๋ธ์์ ์ฌ์ฉ)
์ถ์ฒ : https://www.tensorflow.org/api_docs/python/tf/keras
๋ชจ๋ธ์ ๋ง๋ค๊ณ ํ์ต์ํ ๋, ์ด๋ฌํ ๋ชจ๋ธ์ด ์ ํ์ต๋๊ณ ์๋์ง ํ๊ฐํ๋ ์งํ๊ฐ ์์ด์ผ ํ ๊ฒ์ด๋ค. ๊ทธ๋์ผ ์ ๋๋ก ๋ ํ์ต์ด ๋๋์ง ์ ๊ฒ์ด๋..
์ฌ๊ธฐ์๋ ์ ํ๋์ AUC, Recall์ ์ฌ์ฉํ๋ค.
Accuracy : ๋ถ๋ฅ์ ์ ํ๋
AUC : AUC๊ฐ ๋์์๋ก ํด๋์ค๋ฅผ ๊ตฌ๋ณํ๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋๋ค๋ ๊ฒ์ ๋ปํจ.
Recall : ์ฌํ์จ ์ค์ True๋ค ์ค์ ๋ชจ๋ธ์ด True๋ผ๊ณ ์ฐพ์ ๋น์จ์ด ์ผ๋ง๋ ๋๋๊ฐ?
(์ค์ ์์กดํ ์ฌ๋๋ค ์ค ๋ชจ๋ธ์ด ์์กดํ ์ฌ๋์ด๋ผ๊ณ ์ฐพ์ ๋น์จ์ด ์ผ๋ง๊ฐ ๋๋๊ฐ?)
epochs๋ ๋ฐ๋ณตํ์๋ฅผ ๋ปํ๊ณ , batch_size๋ Batch๋ฐฉ๋ฒ๊ณผ SGD ๋ฐฉ๋ฒ์ ๋๋ค ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ ์ธ๋๋ฅผ ํ์ต์ํฌ๋ ์ ์ฒด๋ฅผ ๋ค ๋ณด๊ณ 1๋ฒ์ update๊ฐ ์ผ์ด๋๋ ๊ฒ์ด Batch, ๊ฐ ์ํ๋ง๋ค update๊ฐ ์ด๋ฃจ์ด์ง๋๊ฒ SGD์ด๋ค.
์ด๋, ๊ฐ ์ํ๋ง๋ค๊ฐ ์๋ ๋ช๊ฐ(์ฌ๊ธฐ์๋ 10)๋ฅผ ์์๋ก ์ง์ ํ์ฌ ํด๋น ์ํ๋ค์ ํ ๋ฌถ์์ผ๋ก ์ทจ๊ธํ์ฌ update๋ฅผ ์ํํ๋๊ฒ์ด ๋ฐ๋ก mini Batch๋ฐฉ๋ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, 170๊ฐ์ ์ํ์ 10 batch size๋ก ๋ฌถ๊ฒ๋๋ฉด 17๋ฒ์ ํ์ต์ด 1epoch(1์ธ๋)๋น ์ด๋ฃจ์ด ์ง๊ฒ ๋๋ค.