2주차 테스트를 풀고, 프로그래밍 과제도 완료하였습니다. 프로그래밍 과제는 매트랩이나 옥타브로 하는데, 저는 매트랩으로 수행하였습니다. 홈페이지에서 토큰을 생성해주는데, 매트랩에서 코드를 시행하고 "submit" 을 창에 입력하면 이메일과 토큰을 입력하라고 합니다. 생각보다 체계적이어서 신선했습니다. 프로그래밍 과제는 cost function 과 gradient descent 를 함수 코드에 직접 생성하는 것인데, 수식 이해에 도움이 됩니다.
과제를 풀다가 추가할 수식/프로그램 코드가 있어서 내용을 추가합니다.
Cost function
cost function 수식입니다. 이전 링크에서 gradient scent 수식의 매트릭스 형태는 작성하였는데, cost function 은 직접적으로 다루지 않은 것 같아서 표기합니다.
$\frac{1}{m} \sum_{i=1}^m \Big( h_\theta (x_i) - y_i \Big)^2$
$= \frac{1}{m} \Big( \theta' x_i - y_i \Big)^2$
$= \frac{1}{m} \Big[ (\theta' x_1 - y_1) (\theta' x_1 - y_1) + ... + (\theta' x_n - y_n) (\theta' x_m - y_m) \Big]$
$= \frac{1}{m} \begin{bmatrix} \theta' x_1 - y_1 \\ \theta' x_2 - y_2 \\ ... \\ \theta' x_n - y_n \end{bmatrix}' \begin{bmatrix} \theta' x_1 - y_1 \\ \theta' x_2 - y_2 \\ ... \\ \theta' x_n - y_n \end{bmatrix}$
$= \frac{1}{m} (\theta' x - y)' (\theta' x - y)$
(Matlab Code) for loop
매트랩 과제 수행 중에 vectorization 코드가 잘 안되서, loop 로 수행했습니다. Vectorization 이 아직은 완전히 익숙하지는 않은 것 같네요. 파이썬으로 추후 연습을 더 해보아야겠습니다.
temp1 = theta(1) - alpha*(sum(X*theta - y)/m);
temp2 = theta(2) - alpha*(sum((X*theta - y).*X(:,2))/m);
theta(1) = temp1;
theta(2) = temp2;