다변수 선형 회귀(Multi-variable Linear Regression)
변수가 하나일 때 선형 회귀에 사용했던 방법
Hypothesis :
\begin{equation} H(x) = W\times x + b \tag{1}\end{equation}
cost(loss) 함수 : 가설 식 (1)과 실제 값과의 차이
\begin{eqnarray} \textrm{cost(loss)}(W,b) &=& \frac{1}{m}\sum_{i=1}^m\Big(H(x_i)-y_i\Big)^2\\ &=& \frac{1}{m}\sum_{i=1}^m\Big( \big(W\times x_i + b\big) -y_i \Big)^2 \tag{2}\end{eqnarray}
Gradient Descent Algorithm : cost(loss) 함수가 극소가 되는 값을 구하는 방법
\begin{equation} W = W - \alpha \times \frac{\partial}{\partial W}\textrm{cost(loss)}(W,b) \tag{3}\end{equation}
변수가 3개일 때의 선형 회귀식
- 다음과 같이 3개의 입력값에 대한 결과값이 있을 때 선형 회귀식을 구하는 방법을 생각해본다.
- 인스턴스(instance) : 실제 각각의 데이터
- 아래 표에서는 5개의 인스턴스를 사용해 가설을 만들게 된다.
- 가설(hypothesis) : 인스턴스가 1개일 때, 변수는 3개이기 때문에 단변수일 때의 가설 식 (1)을 다음 식 (4)처럼 쓸 수 있다.
\begin{eqnarray} H(x_1, x_2, x_3) = w_1\times x_1 + w_2\times x_2 + w_3\times x_3 + b\tag{4} \end{eqnarray}
cost(loss) 함수 : 위 식 (2)는 다음 식 (5)처럼 쓸 수 있다.
\begin{eqnarray}\textrm{cost(loss)}(W,b) = \frac{1}{m} \sum_{i=1}^m\Big(H(x_{1_i},x_{2_i},x_{3_i}) - y_i\Big)^2\tag{5}\end{eqnarray}
변수가 $n$개일 때로 일반화한 선형 회귀식
- 가설(hypothesis) : 인스턴스가 1개에 대하여 변수가 \(n\)개일 때의 가설은 식 (6)처럼 쓸 수 있다
\begin{eqnarray} H(x_1, x_2,\ldots,x_n) = w_1\cdot x_1 + w_2\cdot x_2 +\cdots + w_n\cdot x_n + b\tag{6} \end{eqnarray}
다변수일 때의 식은 항이 여러 개로 나와 길게 쓰는 것이 불편하기 때문에 식 (6)은 행렬식을 이용하여 식 (7)처럼 쓸 수 있다.
- 데이터 \(x_i\)의 값들이 주어지기 때문에 계수로 쓰고, \(w_i\)는 우리가 예측해야 하는 값이기 때문에 변수로 표기해 식을 정리한다.
\begin{eqnarray} H(x_1, x_2,\ldots,x_n) &=& w_1\cdot x_1 + w_2\cdot x_2 +\cdots + w_n\cdot x_n + b\\&=& x_1\cdot w_1 + x_2\cdot w_2 +\cdots + x_n\cdot w_n + b\\&=&(x_1,x_2,\ldots, x_n)\cdot\left( \begin{array}{c} w_1\\ w_2\\ \vdots\\ w_n\end{array} \right) + b\tag{7} \end{eqnarray}
위의 변수들을 행렬로 해서 정리하면 다음과 같이 간단히 정리할 수 있다.
- \(\mathbf{X}=[x_1,x_2,x_3,\ldots,x_n]\)
- \(\mathbf{W}=[w_1,w_2,w_3,\ldots,w_n]\)
\begin{eqnarray}H(\mathbf{X}) = \mathbf{X}\times \mathbf{W}^T+b\tag{8}\end{eqnarray}
행렬식을 사용하는 가설식
- 아래 시험성적표에 대한 가설식을 만들어 보자.
변수가 3개이기 때문에 가설은 식 (9)처럼 쓸 수 있다.
\begin{eqnarray} H(x_1, x_2,x_3) &=& x_1\times w_1 + x_2\times w_2 + x_e\times w_3 + b\\&=&(x_1,x_2,x_3)\left(\begin{array}{c}w_1\\w_2\\w_3\end{array}\right)+b\\&=&\mathbf{X}\mathbf{W}^T + b=H(\mathbf{X})\tag{9}\end{eqnarray}
우리의 예에서는 인스턴스가 5개이기 때문에 가설은 식(10)처럼 쓸 수 있다.
\begin{eqnarray}\left( \begin{array}{c} x_{1_1} w_1 + x_{1_2} w_2 + x_{1_3} w_3 + b_1\\ x_{2_1} w_1 + x_{2_2} w_2 + x_{2_3} w_3 + b_2\\ x_{3_1} w_1 + x_{3_2} w_2 + x_{3_3} w_3 + b_3\\x_{4_1} w_1 + x_{4_2} w_2 + x_{4_3} w_3 + b_4\\ x_{5_1} w_1 + x_{5_2} w_2 + x_{5_3} w_3 + b_5\end{array} \right) &=&\left( \begin{array}{ccc}x_{1_1} & x_{1_2} & x_{1_3}\\ x_{2_1} & x_{2_2} & x_{2_3}\\ x_{3_1} & x_{3_2} & x_{3_3}\\ x_{4_1} & x_{4_2} & x_{4_3}\\x_{5_1} & x_{5_2} & x_{5_3}\end{array}\right)\cdot\left( \begin{array}{c}w_1\\ w_2\\ w_3\end{array} \right)+\left( \begin{array}{c}b_1\\b_2\\b_3\\b_4\\b_5\end{array} \right)\tag{10}\\ &=&\mathbf{X}\cdot\mathbf{W}+\mathbf{B}\\ &=& H(\mathbf{X})\end{eqnarray}
식 (10)을 차원(dimension)(텐서플로우의 데이터 모양(shape))으로 표현하면 다음과 같다.
- instance \(\mathbf{X}\) 행렬의 차원은 $[5,3]$
- weight \(\mathbf{W}\) 행렬의 차원은 $[3,1]$
- bias \(\mathbf{B}\) 행렬의 차원은 $[5,1]$
$$[5,1]=[5,3] \times [3,1] + [5,1]$$
결과값이 2개인 경우의 가설식
결과값이 여러 개인 경우도 고려해볼 수가 있는데 2개의 경우에 몇 차원의 weight 행렬식을 사용해야할까?
- 식 (11)과 같이 \([3,2]\) 차원의 행렬식 weight를 사용하면 된다.
\begin{eqnarray}\begin{array}{lcl}[5, 3] \times [?, ?] &=& [?, 2]\\ [5,3] \times [3, 2]&=&[5,2]\end{array}\tag{11}\end{eqnarray}
\begin{eqnarray}\left( \begin{array}{cc} x_{1_1} w_{1_1} + x_{1_2} w_{2_1} + x_{1_3} w_{3_1} + b_1&x_{1_1} w_{1_2} + x_{1_2} w_{2_2} + x_{1_3} w_{3_2} + b_2\\ x_{2_1} w_{1_1} + x_{2_2} w_{2_1} + x_{2_3} w_{3_1} + b_1&x_{2_1} w_{1_2} + x_{2_2} w_{2_2} + x_{2_3} w_{3_2} + b_2\\ x_{3_1} w_{1_1} + x_{2_2} w_{2_1} + x_{3_3} w_{3_1} + b_1&x_{3_1} w_{1_2} + x_{3_2} w_{2_2} + x_{3_3} w_{3_2} + b_2\\x_{4_1} w_{1_1} + x_{4_2} w_{2_1} + x_{4_3} w_{3_1} + b_1&x_{4_1} w_{1_2} + x_{4_2} w_{2_2} + x_{4_3} w_{3_2} + b_2\\ x_{5_1} w_{1_1} + x_{5_2} w_{2_1} + x_{5_3} w_{3_1} + b_1&x_{5_1} w_{1_2} + x_{5_2} w_{2_2} + x_{5_3} w_{3_2} + b_2\end{array} \right) &=&\left( \begin{array}{ccc}x_{1_1} & x_{1_2} & x_{1_3}\\ x_{2_1} & x_{2_2} & x_{2_3}\\ x_{3_1} & x_{3_2} & x_{3_3}\\ x_{4_1} & x_{4_2} & x_{4_3}\\x_{5_1} & x_{5_2} & x_{5_3}\end{array}\right)\cdot\left( \begin{array}{cc}w_{1_1} & w_{1_2}\\ w_{2_1} & w_{2_2}\\ w_{3_1} & w_{3_2}\end{array} \right)+\left( \begin{array}{cc}b_{1_1} & b_{1_2}\\b_{2_1} & b_{2_2}\\b_{3_1} & b_{3_2}\\b_{4_1} & b_{4_2}\\b_{5_1} & b_{5_2}\end{array} \right)\end{eqnarray}
결론 : 행렬식을 사용하면 많은 인스턴스 및 다변수의 경우에도 쉽게 수식으로 정리, 표현할 수 있다.
- 이론으로 가설식을 다룰 때에는 weight \(w\)를 계수로 하고 변수 \(x\)의 순서로 쓰지만, 실제에서는 weight와 변수의 순서를 바꾸면 행렬식을 그대로 쓸 수 있게 코딩으로 바로 구현하는 것이 쉽다.
이론 가설식(theory hypothesis) : \(H(\mathbf{X}) = \mathbf{W}\times \mathbf{X}+\mathbf{B}\)
- 구현 가설식(implementation hypothesis) : \(H(\mathbf{X}) = \mathbf{X}\times \mathbf{W}^T+\mathbf{B}\)
'모두를 위한 머신러닝' 카테고리의 다른 글
Lesson 4 : Logistic (regression) classification (0) | 2017.04.19 |
---|---|
Lesson 3 연습 : Multi-variable Linear Regression (1) | 2017.04.16 |
Lesson 2 연습 : Linear Regression의 Hypothesis와 cost의 개념 (0) | 2017.04.11 |
Lesson 2 : Linear Regression의 Hypothesis와 cost의 개념 (0) | 2017.04.10 |
Lesson 1 연습 : TensorFlow의 개념 (0) | 2017.04.03 |