PART 14. 딥러닝

목차


학습 목표

📖 목차


14.1 딥러닝의 개요

딥러닝은 신경망(neural network)을 기반으로 한 머신러닝의 한 분야로, 여러 층(layer)을 쌓아 복잡한 패턴을 학습한다.

은닉층의 개수가 많아질수록 더 복잡한 문제를 학습할 수 있다.


14.2 딥러닝 분류

당뇨병 발병 예측

이진 분류 문제로, 출력층 활성화 함수는 sigmoid를 사용한다.

본 예제는 read_csv()로 CSV 파일을 불러와 데이터프레임으로 적재하는 절차를 제시한다. head()로 일부 행을 확인하면 열 구조와 데이터 상태를 빠르게 점검할 수 있다.


import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

df = pd.read_csv("diabetes.csv")

X = df.drop("Outcome", axis=1)
y = df["Outcome"]

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

모델 정의 및 학습

본 예제는 이진 분류 문제를 대상으로 Keras의 Sequential 모델을 구성한다. 은닉층에는 relu, 출력층에는 sigmoid를 사용하고, 손실 함수로 binary_crossentropy를 지정하여 학습이 진행되도록 설정한다.


model = Sequential()
model.add(Dense(12, activation="relu", input_dim=8))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))

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

model.fit(X_train, y_train, epochs=50, batch_size=10, validation_split=0.2)

14.3 딥러닝 회귀

보스턴 주택 가격 예측

회귀 문제이므로 출력층에는 활성화 함수를 사용하지 않는다.

본 예제는 회귀 문제를 대상으로 신경망을 구성한다. 출력층의 노드 수를 1로 두고 활성화 함수를 지정하지 않으며, 손실 함수로 mse, 지표로 mae를 사용하여 예측 오차를 평가한다.


from tensorflow.keras.datasets import boston_housing
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

(X_train, y_train), (X_test, y_test) = boston_housing.load_data()

model = Sequential()
model.add(Dense(64, activation="relu", input_shape=(13,)))
model.add(Dense(64, activation="relu"))
model.add(Dense(1))

model.compile(
    optimizer="adam",
    loss="mse",
    metrics=["mae"]
)

model.fit(X_train, y_train, epochs=100, batch_size=16, validation_split=0.2)

14.4 [플러스 예제] 당뇨병 진행도 예측

본 예제는 회귀 문제를 대상으로 신경망을 구성한다. 출력층의 노드 수를 1로 두고 활성화 함수를 지정하지 않으며, 손실 함수로 mse, 지표로 mae를 사용하여 예측 오차를 평가한다.


from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

data = load_diabetes()
X = data.data
y = data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

model = Sequential()
model.add(Dense(16, activation="relu", input_dim=10))
model.add(Dense(16, activation="relu"))
model.add(Dense(1))

model.compile(optimizer="adam", loss="mse", metrics=["mae"])
model.fit(X_train, y_train, epochs=50, batch_size=2, validation_data=(X_test, y_test))