코드 실습: 선형 회귀(케라스)

ParkJeongJoon·2022년 9월 10일
0

Machine Learning

목록 보기
12/13

이 코드는 제가 학습하면서 참고했던 https://wikidocs.net/111472 예제 코드임을 밝힙니다.
앞서 텐서플로우를 이용한 선형회귀 코드 실습을 해 보았는데,
사실 훨씬 더 간결하게 코드를 작성할 수 있다. 바로 케라스라는 라이브러리를 통해서이다. 사실 케라스는 딥러닝 맞춤 라이브러리이기 때문에 보통 머신러닝보다 훨씬 복잡한 인공 신경망과 같은 고수준의 모델을 개발하는 데 쓰인다. 그렇기 때문에 텐서플로우보다 훨씬 적은 코드만으로 간단한 모델(케라스 입장에서) 정도는 아주 쉽게 구현할 수 있는 듯 하다.

케라스 라이브러리를 이용해 모델을 정의할 때는 다음과 같은 형식이 사용된다.
model = Sequential()
model.add(keras.layers.Dense(1, input_dim=1))
Sequential로 model이라는 이름의 모델을 만들고, add를 통해 입력과 출력 벡터의 차원과 같은 필요한 정보들을 추가한다. add 옆 괄호에 주목해야 할 필요가 있는데,우선 keras는 인공신경망을 구성하는 라이브러리, layer.Dense는 덴즈 레이어라고 하는데 이는 딥러닝 챕터에서 후술할 것이다. 덴즈 레이어의 첫번째 인자인 1은 출력의 차원(output_dim)으로 표현되는 인자, 두번째 인자인 input_dim은 입력의 차원을 정의하는데 이번 실습과 같이 1개의 실수 x를 가지고 하는 1개의 실수 y를 예측하는 단순 선형 회귀를 구현하는 경우에는 각각 1의 값을 가지므로 모두 1에 해당한다.

이제 케라스로 모델을 구현하는 코드를 작성해보자.

앞서, Numpy와 Matplotlib 또한 파이썬의 라이브러리인데 케라스를 이용해서 모델을 구현하려면 케라스 단독이 아니라 넘파이나 맷플롯립, 텐서플로우 등과 같은 타 라이브러리와 함께 쓰이는 것이 일반적이다. 따로 print()를 적어주지 않아도 실행하면 알아서 출력이 되는 모습을 볼 수 있다. 그리고 코드의 자세한 설명은 딥러닝 챕터에서 따로 소개하는 게 더 나을 듯 하고 우선은 넘어가자.
그렇다면 실행 결과는 어떨까?


텐서플로우로 구현했을 때와 출력 양상은 달라졌지만, loss 값이 Epoch가 진행될 때마다 점차적으로 낮아지고 있는 경향은 동일하다. 마찬가지로 손실을 최적화하는 방향으로 모델이 잘 작동하고 있는 것(학습이 잘 이루어지고 있는 것)을 볼 수 있다.

그러면 이제, 위 결과를 보다 직관적으로 보기 쉽게 이해하기 위해 마지막으로 학습된 최종 결과(최적의 w와 b값을 찾은 직선)를 그래프로 나타내보자.
plt.plot(x, model.predict(x), 'b', x, y, 'k.') 코드를 이용한다. 아까 호출했던 matplotlib 라이브러리를 통해 나타낼 수 있다.

위의 그래프에서 각 점은 우리가 실제 주었던 실제값에 해당되며, 직선은 실제값으로부터 오차를 최소화하는 w와 b의 값을 갖는 직선이다. 이 직선을 통해 9시간 30분을 공부하였을 때의 시험 성적을 예측해보자.
print(model.predict([9.5]))
[[98.556465]]
model.predict()은 학습이 완료된 모델이 입력된 데이터에 대해서 어떤 값을 예측하는지를 보여준다. 위 최적화된 직선 결과에 따르면 9시간 30분을 공부하면 약 98.5를 받을 것이라고 예측한다.

profile
이제부터가 진짜 시작이야

0개의 댓글