まどかの戯言集

美しく、生きたい。

Machine Learning week 2でわからなかった「gradient descent」の実装がやっと理解できたので纏めておきたい。

前回

www.madoka-saotome.xyz

 

前回は「線形回帰における cost function」が分からないということでまとめしたが今回は「線形回帰における gradient descent」の実装についてのまとめです。

 

実装

Gradient Descent

function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
%GRADIENTDESCENTMULTI Performs gradient descent to learn theta
% theta = GRADIENTDESCENTMULTI(x, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha

% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);

for iter = 1:num_iters

% ====================== YOUR CODE HERE ======================
% Instructions: Perform a single gradient step on the parameter vector
% theta.
%
% Hint: While debugging, it can be useful to print out the values
% of the cost function (computeCostMulti) and gradient here.
%

h = X * theta; % hypothesis
% X' * (h - y) = sum((h - y) .* X)'
theta -= alpha * (1 / m) * (X' * (h - y));

% ============================================================

% Save the cost J in every iteration
J_history(iter) = computeCostMulti(X, y, theta);

end

end

 

theta -= alpha * (1 / m) * (X' * (h - y));

ここでどうして、こうなるのかわからなかったが・・・

 

こうして、こうじゃ!

 f:id:s-a-o-t-o-m-e:20170310140747j:image

まとめ

例のごとく、式をmarkdownで書くのが面倒だったのでノートの写メってアップしただけというとても手抜きなまとめです。行列ってすごいね。こんな考え方・発想をするにはまだまだ僕は力不足なのでもっと勉強しないといけません。

 

またまた本当に個人用のメモになってしまったけれど、勉強は楽しい。しっかり全て完了させて機械学習の基礎知識を身に着けたいところです。今はweek3中です。