Vectorize
- $\Sigma$로 표현되는 식을 벡터로 표현할 수 있는 경우 –벡터는 $n \times 1$ 행렬이므로 사실상 행렬– 벡터로 변환하여 계산하면 식 자체가 간편해 질 뿐더러, 행렬의 병렬처리를 지원하는 프로그램을 사용하면 성능에서도 유리하다.
- 예컨대 아래의 식을
- $h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3^2 + ...$
- 벡터화 하면 아래와 같이 표현 가능하다.
- $\theta = [ \theta_0; \theta_1; \theta_2; ... \theta_n ]$
- $X = [ x_0; x_1; x_2; ... x_n ]$
- $h_{\theta}(x) = \theta^T X$
- $h_{\theta}(x)$를 Vectorize 했다면 비용함수 $J(\theta)$도 벡터로 간단하게 할 수 있다.
- 아래의 기존 식을
- $J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta (x_i) - y_i)^2$
- 벡터화하면 아래와 같이 표현 가능하다.
- $y = [ y_1; y_2; ... y_n ]$
- $J(\theta) = \frac{1}{2m} ((\theta^T X - y)^2)$
- 행렬의 제곱은 .^ 이라는 연산을 이용한다. 프로그램적으로 ‘.’ 은 element 연산을 의미한다.
- 프로그램상 $\Sigma$ 연산은 for 문을 도는 형식이 되며, 행렬 연산을 지원하는 프로그램의 경우 Vector 연산은 병렬로 처리가 된다.
- 물론 행렬 계산은 역행렬 계산과 같은 상황에서 부하가 많이 걸리지만, Octave와 같은 프로그램에서는 pinv 와 같은 함수로 계산해 pseudo 값을 계산해 주므로 행렬 계산에 익숙해질 필요가 있다.
Data Set 분류
- 데이터셋 전체를 훈련(Training)에만 사용하면 훈련 데이터에만 최적화된 Overfiting된 결과가 만들어 질 수 있다. 이것을 방지하기 위해 전체 데이터 셋의 70%만 훈련용으로 사용하고 나머지는 30%는 시험(Test) 용으로 사용하여 훈련된 결과를 시험하여 Overfiting 여부를 판별한다.
- 시험도 비용함수를 이용하여 계산하는 것은 마찬가지다.
- 다만, 선형 회귀할 때는 모든 에러를 다 더해서 평가를 하고, 로지스틱 회귀일 경우에는 0인지 1인지에 대한 갯수를 세는 식으로 평가를 한다.
- 만일 여러 모델을 만들고 그 모델들 사이에 우수한 것을 고르는 식으로 하는 경우엔 교차 검증(Cross Validation)이라는 것을 따로 두어서 모델들 사이에 경쟁할 때 교차 검증용으로 사용하고, 최종 결정된 모델에 대해 시험을 적용하여 결과를 판별한다. 데이터 셋을 6:2:2로 분배
- 결국 전체 Data Set을 한번에 사용하지 말고 나눠서 검증하라는 이야기
Bias vs Variance
https://drive.google.com/uc?id=1ikteyMa0oG9kSYVtYo2K5i4Qo-fQyOo6
https://www.coursera.org/learn/machine-learning/
- 알고리즘의 Bias가 높다는 것은 알고리즘이 아예 안 맞는다(Underfitting)는 이야기고, 알고리즘의 Variance가 높다는 것은 알고리즘이 특정 데이터 셋에만 과도하게 적합(Overfitting) 하여 훈련용 데이터 외의 다른 데이터에는 잘 적용되지 않는다는 이야기이다.
https://drive.google.com/uc?id=15yeoXASE49wXUqaDzBRofn3svGou2v2C
https://drive.google.com/uc?id=1umwDM5OW0rfBFXtFBxwrLjc-d15vX67T
https://www.coursera.org/learn/machine-learning/
- 알고리즘이 Bias가 높은 상태인지, Variance가 높은 상태인지는 훈련용 이외의 데이터를 적용해 보면 간단하다. 훈련용 데이터 셋에서조차 비용이 높게 나온다면 그것은 Underfitting 상태인 것이고, 훈련용 데이터 셋에서는 비용이 낮지만 교차검증용 데이터 셋에서 비용이 높다면 그것은 Overfitting 된 상태인 것.
- Bias가 높은 상태라면
- 다항식의 차수를 높이거나,
- feature를 추가하거나,
- Regularization의 $\lambda$ 값을 작게 하는 방법을 사용해 볼 수 있다.
- $\lambda$가 극단적으로 작아져서 0이 된다고 치면 Regularization 값은 적용이 안되는 것과 마찬가지 상태가 된다.