January 18, 2016
課題のページ https://www.coursera.org/learn/machine-learning/programming/8f3qT/linear-regression
プログラミング課題はちょっと重いので今回の解答例を上げます。 わからないことや別の解答がありましたらコメントをお願いします。
必須課題 1. Computing Cost (for One Variable) Gradient DescentのCost function $J(\theta)$ は以下の通り
$$ J(\theta) = \frac{1}{2m}\sum_ {i=1}^m (h_ \theta(x^{(i)}) - y^{(i)} )^2 $$
ここで、仮定関数 $ h_ \theta(x) $は
$$ h_ \theta(x) = \theta^T x = \theta_ 0 + \theta_ 1x_ 1 $$
それで、
$$ J(\theta) = \frac{1}{2m}\sum_ {i=1}^m (\theta^T x^{(i)} - y^{(i)} )^2 $$
注意したいのは $\theta$ と $x^{(i)}$ はベクトルで、$ y^{(i)} $は実数です。 課題はこの関数をOctaveで書くことです。以下は解答例です。
function J = computeCost(X, y, theta) m = length(y); % number of training examples % 97 examplesがあるのでここで m == 97 % size(X) == [97 2] % size(y) == [97 1] % size(theta) == [2 1] % Xは97x2行列。1行は1つのtraining example [x0 x1] (x0はいつも1) % yは97次元ベクトル % thetaは2次元ベクトル J = 0; % まずは和の部分を計算します for i = 1:m J += (theta' * X(i,:)' - y(i))^2; end % X(i,:)は1つの行、つまりtraining exampleです。ベクトルに変換するので転置を取りました。 % 最後に2mを割るだけです J = J / (2*m); end 実行した結果、cost functionの値は32.