单变量线性回归属于监督式学习。给定训练集,定义下面的变量:
m = Number of training examples
x’s = “input” variable / features
y’s = “output” variable / “target” variable
单变量的回归函数是:
Cost function是:
我们的目标是选取合适的theta0,theta1使h(x)的取值尽可能的接近y - 用平方差来度量。考虑所有的m个输入,这里用cost function J来衡量总的差值。
大学好像学过,可以用梯度下降算法来解,不过都忘了。核心思想是从某个theta0,theta1出发,不断改变他们的取值使J越来越小,直到不能再小为止。听着这意思跟极限有关啊,然后导数等于0就可以了。这也是Normal equation的思想,下一讲里介绍。
梯度下降算法的公式:
把J带进去求偏导,得如下公式:
注意要同时更新theta0和theta1。高数很重要呀,都忘记了的说。线性代数也很重要啊。买本书,随便看看这些概念吧。
梯度下降的每一步都要用所有的训练集数据来计算,感觉是计算密集型算法。具体的实现呢,得用一个循环来迭代计算theta0,theta1,框架如下:
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 (computeCost) and gradient here.
%
sum = zeros(2, 1);
for i = 1:m
delta = X(i,:)*theta - y(i);
sum(1) = sum(1) + delta;
sum(2) = sum(2) + delta*X(i,2);
end
sum = sum .* alpha ./ m;
theta = theta - sum;
% ============================================================
% Save the cost J in every iteration
J_history(iter) = computeCost(X, y, theta);
% fprintf('%f\n', J_history(iter))
end