[ ML ] 모두를 위한 TensorFlow (5) 다중 선형 회귀 구현하기

본 글은 홍콩과기대 김성훈 교수님의 강의를 바탕으로 함
(참고 : https://hunkim.github.io/ml/ )


본 포스팅은 다중 선형 회귀 분석 기본 포스팅에 이어 직접 텐서플로를 활용하여 다중 선형 회귀를 구현해보는 포스팅입니다. 각각 배열, 행렬, txt파일를 활용하여 크게 3가지 방법으로 구현해보도록 하겠습니다.

1.array를 이용한 구현

선형 회귀에서 변수 하나를 추가한 x2_data (array)를 추가한 형태로 구현했습니다. 동시에 x2_data의 가중치인 W2가 추가되었습니다. ▼

코드를 돌려보니 w1는 1, w2는 1, b는 0으로 수렴하고 있습니다. cost는점차 낮아지고 있습니다. ▼


2.Matrix를 이용한 구현

이제 각 변수는 각각의 array가 아닌 matrix로 나타낼 수 있습니다. 변경한 부분은 아래와 같습니다. ▼

  • x_data를 matrix로 변경
  • 가중지 W를 1x2 marix로 변경
  • hypothesis 부분을 행렬곱 tf.matmul()로 변경
  • 출력 부분 수정

코드를 돌려보니 W는 [1,1]로, b는 0으로 수렴하고 있습니다. cost는 점차 낮아지고 있습니다. ▼


3.Matrix를 이용한 구현2 — bias 없애기

이번에는 bias 부분을 행렬에 포함시켜 단순화보도록 하겠습니다.▼

변경한 부분은 아래와 같습니다. ▼

  • x_data의 matrix에 [1,1,1,1,1] 추가
  • 가중지 W를 1x3 marix로 변경
  • hypothesis 부분의 b 삭제
  • 출력 부분 수정

코드를 돌려보니 W는 [0,1,1]로 수렴하고 있습니다. cost는 점차 낮아지고 있습니다. ▼


4.txt 혹은 csv 파일 활용하기

대용량 데이터의 경우는 txt나 csv 파일을 활용하는 것이 가장 현실적이라고 할 수 있습니다. 우선은 numpy를 활용해서 파일을 읽어옵니다. ▼

  • numpy의 loadtxt 함수 활용
  • x_data는 xy에서 마지막열 직전 행까지 (xy[0:-1])
  • y_data는 xy에서 마지막행 (xy[-1])
(+) unpack의 역할이 궁금했는데 확인해보니 Transpose의 역할을 하는 것 같습니다. 본래 파일대로 라면 x_data는 첫 열부터 마지막 직전 열까지지만, unpack=True로 파일을 불러왔기 때문에 전치가 된 상태입니다. 따라서 첫 행부터 마지막 직전행까지 불러오도록 합니다.
https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html

출력된 x와 y는 전치된 상태인 것을 확인 할 수 있습니다. 코드를 돌려보니 W는 [0,1,1]로 수렴하고 있습니다. cost는 점차 낮아지고 있습니다.▼