들어가며

지난 시간에는 케라스로 간단한 이미지 분류기 모델을 구축,훈련,평가 그리고 결과를 시각화하는 방법에 대해서 알아보았습니다. 이번 시간에는 케라스를 이용해서 회귀 다층퍼셉트론 모델을 만들어보겠습니다.

 

목차

1. Regression MLP 구현 방안

2. Sequential API를 이용해서 모델 구현

3. 시각화

1. Regression MLP 구현 방안

Regression MLP를 구현하는 방법은 이전 글에서 이미지 분류기 모델을 만들었다면 매우 간단히 해결할 수 있습니다.

회귀는 수치를 예상하는 것이므로 훈련전에 스케일링을 하고 모델의 출력층에서 활성화함수를 사용하지 않으면 쉽게 구현할 수 있습니다. Sequentail API를 이용해서 직접구현해보겠습니다. (Sequential API를 모른다면 이전 글을 참조하시기바랍니다.)

2. Sequential API를 이용해서 모델 구현

여기서는 예시로 california_housing데이터를 이용해서 주택 가격을 예측하는 모델을 구현해보겠습니다.

우선, 데이터를 다운로드하고 세트를 나눈 다음 스케일링을 해보겠습니다.

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

housing = fetch_california_housing()

#훈련, 검증 그리고 테스트 세트 추출
X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data, housing.target, random_state=42)
X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=42)

#회귀를 위한 스케일링 전처리
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid)
X_test = scaler.transform(X_test)

데이터가 준비되었으니 은닉층 1개(뉴런 수는 30)와 출력층 1개로 구성된 MLP를 Sequential API로 구축,컴파일 그리고 훈련과 평가를 수행합니다.

model = keras.models.Sequential([
    keras.layers.Dense(30, activation="relu", input_shape=X_train.shape[1:]),
    keras.layers.Dense(1)
])
model.compile(loss="mean_squared_error", optimizer=keras.optimizers.SGD(lr=1e-3))
history = model.fit(X_train, y_train, epochs=20, validation_data=(X_valid, y_valid))
mse_test = model.evaluate(X_test, y_test)
X_new = X_test[:3]
y_pred = model.predict(X_new)

3. 시각화

위 데이터를 시각화해봅시다.

plt.plot(pd.DataFrame(history.history))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()

+ Recent posts