딥러닝 선형회귀 모델을 활용한 공공데이터 분석(선형회귀 모델에 대한 개념정리)

공공데이터를 분석을 하기전, 선형회귀 모델에 대한 개념을 정리하고자 합니다.
2021.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook)이라고 합니다. 이번에는「딥러닝 선형회귀 모델을 활용한 공공데이터 분석」첫 번째 블로그로 공공데이터를 분석하기 전에 선형회귀 모델이 무엇인지, 어떻게 사용 하는지에 대해서 정리해보았습니다. 딥러닝의 개념과 머신러닝의 학습방법에 대해 궁금하신 분들은 아래 링크를 참고해주세요.

선형회귀 모델이란?

  • 주어진 x와 y값을 가지고 서로 간의 관계를 파악
  • 새로운 x값이 주어졌을 때 y값을 쉽게 유추
  • 어떤 입력에 대한 출력을 예측하는 것
  • 머신러닝의 기본 학습 방법

우선 선형회귀 모델을 만들어보자!

먼저 x_data = [1,2,3], y_data = [1,2,3]을 을 넣어줍니다.

그리고 w와 b에는 -1.0부터 1.0 사이의 값을 하나씩 초기화 시킵니다.

X,Y에는 플레이스홀더를 설정하여 나중에 값을 입력받습니다. 그리고 hypothesis = W * X + b 계산식을 통해서 선형관계를 분석합니다.

이전부터 봐왔던 H(x) = wx + b 입니다.

손실함수(Loss function)

그 다음에는 손실함수인 cost를 작성합니다.

  • tf.square는 제곱을 계산합니다.
  • reduce_mean은 모든 차원을 제거하고 평균값을 구합니다.

x = [[1,1],2,2]]가 있을 경우 reduce_mean은 1+1+2+2 / 4 를 통해서 평균 값을 구해내서 스칼라값만 출력합니다.

손실함수(Loss function)에 대해 설명하자면, 코스트는 머신러닝이 학습해서 예측한 하이퍼시스값, 실제 x를 넣었을때 우리가 알고있는 y값의 차이를 알아서 계산하는 것을 코스트 펑션이라고 합니다.

즉 0에 가까울수록 가장 정확하다는 건데,

  • x=1
  • y=1

이라고 우리는 알고 있지만 컴퓨터는 알지 못합니다.

예측값과 실제값이 차이가 있으며, 이 차이를 계산 하는 것이 바로 코스트 펑션입니다. 최적화 함수를 통해서 코스트가 0에 가까워 질수록 학습을 하면 가장 근접한 w와 b 값을 찾을 수 있습니다.

경사하강법(Gradient descent)

그 다음 경사하강법(gradient descent)이라는걸 사용합니다.

train_op = optimizer.minimize(cost)는 cost값을 최소화 할 수 있는 방향으로 0.1의 학습속도로 수정해나간다 라고 보면 됩니다. 경사하강법은 leaning_rate로 '학습을 얼마나 급하게 할 것인가' 를 결정하게 됩니다. 우리가 찾고자 하는 값이 1이라고 가정 했을 때, 이 경사하강법의 학습률을 바탕으로 컴퓨터를 학습시켜 보다 정확하게 1이라는 값을 찾을 수 있습니다.

선형회귀 모델 테스트 및 결과

여기서 feed_dict를 통해 X에는 x_data, Y에는 y_data 값을 넣습니다. 여기서 with 에서 에러가 뜰 수 있는데, 이 부분은

  • sess = tf.Session()
  • sess.run(tf.global_variables_initializer())

으로 고쳐주면 됩니다.

이제 마지막으로 sess.run으로 실행해서, hypothesis에 필요한 X값을 feed_dict를 통해 집어넣고 결과 값을 출력합니다.

전체 소스 코드입니다.

테스트 결과를 보면 X에는 5, 2.5를 넣었습니다. 그리고 100번의 반복을 통해서 X가 5 그리고 2.5일 때 Y값은 몇 인가에 대해서 컴퓨터가 학습을 하고 가장 근사치 값을 출력 했습니다. 테스트 결과 5와 가장 근사한 값인 4.9859576과 2.5와 가장 근사한 값인 2.498832를 출력합니다.

마지막으로

​다음은 선형회귀 모델을 바탕으로 공공데이터 분석을 해보도록 하겠습니다.

참고