본문 바로가기
언어/Python

[Machine Learning] 텐서플로우 딥러닝 - 4. Multi-variable Linear Regression과 이를 TensorFlow 로 구현 (edwith)

by 민-Zero 2020. 4. 17.

앞서 정리한 Linear Regression은 Simple Linear Regression으로 가장 단순한 예제인 한 개의 스칼라 독립 변수 x와 한 개의 종속 변수 y에 관해 이루어진 문제였다. 이번에는 독립 변수를 여러 개로 확장한 Multi-variable Linear Regression에 대해 정리하자.

주의) 실세계의 거의 대부분의 문제는 여러 개의 독립 변수를 포함하며, 선형 회귀라 함은 보통 Multi-variable Linear Regression을 일컫는다. 하지만 이러한 경우에도 종속 변수 y는 한 개의 스칼라 변수이다. 다변량 선형 회귀는 응답 변수 y가 벡터인 경우를 의미한다. 이러한 경우를 일반 선형 회귀라 부른다. 다중 선형 회귀 다변량 선형 회귀는 다른 의미이므로, 혼동하지 않도록 주의해야 한다.

 

Multi-variable Linear Regression

앞선 정리의 예를 바꿔서 x데이터가 공부 시간이 아니라 퀴즈1, 2와 중간고사의 데이터이고 이를 통해 기말고사의 점수를 예측한다고 하자. 그럼 변수가 1개일때 보다 좀더 다양한 상황에 대해 예측을 수행하므로 정확한 예측을 진행할 수 있다. 이처럼 변수가 많아야 예측이 훨씬 더 잘된다. 이것을 prediction power 혹은 예측력이라고도 얘기한다.

 

x데이터가 많아진 Multi-variable Linear Regression의 가설함수와 cost함수는 위와 같다. simple linear regression에서 x 변수가 많아진것 말고는 달라지는 것이 없다.

 

지금은 3개의 데이터에 대해 진행하지만 만약 수많은 x 데이터가 필요한 계산을 하게 된다면 w1*x1 + w2*x2 + ... 이런 식을 일일이 다 써주는 것이 굉장히 불편하기 때문에 matrix의 곱셈을 활용하여 식을 전개한다.

행렬곱 dot product는 왼쪽 행렬의 행과 오른쪽 행렬의 열을 곱하여 새로운 행렬의 원소를 곱하여 진행한다.

따라서 이와 같이 가설함수를 행렬의 곱을 통해 구할수 있으며 행렬의 곱은 실수의 곱과 달리 순서가 변경되면 값이 변하기 때문에 H(X)=XW로 X행렬을 먼저 곱하도록 표현한다. 이때 왼쪽 행렬의 행과 오른쪽 행렬의 열을 곱하기 때문에 두개의 원소의 개수가 다르면 곱연산이 되지 않는다 따라서 행렬의 곱은 행과 열의 수를 맞추어 (l,m)행렬 * (m,k)행렬 의 곱으로 수행해야 하며 나머지 l, k의 수는 결과값의 수에만 관계있고 곱연산에는 관계 없다. 

구현

행렬 사용X)

행렬을 사용하지 않고 위에 예시로 사용한 시험점수를 통한 기말고사 점수 예측을 구현했다. simple linear regression과 다른점은 hypothsis가 w*x + b 로만 이루어지지 않고 입력받은 x개수 만큼 w를 곱하여 구현된다. 또한 x변수의 개수가 늘어났기 때문에 x의 개수만큼 기본 weight값과 업데이트, x변수 설정등이 개수만큼 작성했지만 이를 행렬로 구현하게 되면 코드가 훨씬 줄어든다.

 

행렬 사용O)

행렬을 사용하여 구현한 모습이다. 행렬을 통해 x와 y데이터를 선언하고 슬라이싱을 통해 각 데이터를 나누었다. W 또한 행렬로 선언하여 가설함수를 tf.matmul()함수를 통해 행렬의 곱을 연산하였다. weight나 x데이터를 갯수만큼 선언하지 않고 행렬로 한번에 처리하기 때문에 코드의 가독성이 높이지고 뿐만 아니라 코드 동작시간 또한 행렬을 사용하였을때 훨씬 나이진 모습을 확인할 수 있다.

댓글