DeepLearning 1 - 线性回归
参考自:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex2/ex2.html
数据
数据地址:ex2Data.zip。
该文件包含了2到8岁之间的男孩的身高测量。 y值是高度(单位:m),x值是与其相对应得年龄。
每个身高和年龄组成了一个数据集,(xi,yi),共有m=50个样本数据,并用它们建立逻辑回归模型。
有监督学习问题
在这个问题中,使用梯度下降求解线性回归。在Matlab中,则可以使用以下命令加载的训练集
x = load('ex2x.dat');
y = load('ex2y.dat');
上述训练集为监督学习模型的数据集,维度为n=1,(x0 = 1)。
在Matlab中,运行以下命令绘制训练集(并标记轴):
figure % open a new figure window
plot(x, y, 'o');
ylabel('Height in meters')
xlabel('Age in years')
结果如下:
开始梯度下降之前,我们需要将x0 = 1截距项添加到每个实例。在matlab中,命令如下:
m = length(y); % store the number of training examples
x = [ones(m, 1), x]; % Add a column of ones to x
从这个角度上,训练数据中的年龄值实际上是x的第二列。
线性回归
线性回归模型为:
根据梯度下降法,更新原则为:
1. 在用梯度下降法求解时,学习率取α=0.07。第一次迭代的初始参数,θ=0,即θ0=0,θ1=0。
2. 继续迭代,直到θ不再变化,大约迭代1500次,记录最终的θ值。
当求得θ时,在数据图像中绘制直线,命令如下:
hold on % Plot new data without clearing old plot
plot(x(:,2), x*theta, '-') % remember that x is now a matrix with 2 columns
% and the second column contains the time info
legend('Training data', 'Linear regression')
一般的,由于x的维度很高,hθ(x)很难绘制,但是本样例中,仅有1维,是可以绘制出的。
3. 最后,可以进行一些预测。例如预测3.5岁和7岁小孩的身高。
调试:如果您使用的是基于Matlab运行时,看到许多错误,请检查您的矩阵运算乘法的方式,矩阵尺寸可能不相符。
理解J(θ)
为了更好的理解J(θ),可以将其可视化。本模型中,J(θ)为一3D图。然而,其他问题中,x为多维,很难将其可视化。J(θ)如下:
Matlab 的代码如下:
J_vals = zeros(100, 100); % initialize Jvals to 100x100 matrix of 0's
theta0_vals = linspace(-3, 3, 100);
theta1_vals = linspace(-1, 1, 100);
for i = 1:length(theta0_vals)
for j = 1:length(theta1_vals)
t = [theta0_vals(i); theta1_vals(j)];
J_vals(i,j) = %% YOUR CODE HERE %%
end
end
% Plot the surface plot
% Because of the way meshgrids work in the surf command, we need to
% transpose J_vals before calling surf, or else the axes will be flipped
J_vals = J_vals'
figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1')
得到的图形如下图:
解决方案:
代码如下:ex2.m。
1. 第一次运行结果:
2. 运行梯度下降直至收敛后,确认您的参数是约等于确切的封闭形式的解决方案:
如果你在MATLAB 1500次迭代且以0.07学习速率运行梯度下降,你应该看到这些确切的数字为上述结果。如果使用较少的迭代,你的结果应不超过0.01不同,或者你可能没有足够的迭代。例如,在MATLAB为500次迭代运行梯度下降给出THETA = [ 0.7318 , 0.0672 ] 。这是接近收敛,但THETA仍然可以得到接近精确值,如果你运行的梯度下降更多一些。
如果你的答案大大不同,从上面的解决方案,有可能在你实现中的错误。检查你使用的0.07正确的学习率。然后,请检查您的X和Y向量确实是你所期望的那样。请记住,X需要的那些额外的1列。
3. 3.5岁的预言高度0.9737米,以及7岁是1.1975米。
绘制与梯度下降的最合适的训练数据的曲线应类似于下图。
通过梯度下降。在一般情况下,成本函数的线性回归问题将碗形的,全局最小。
根据你的表面积的观察窗上,它可能不那么明显的看出代价函数J(θ)为碗形。要更好的看出其是全局最有的,,这可能有助于绘制等高线图。在Matlab中,
figure;
% Plot the cost function with 15 contours spaced logarithmically
% between 0.01 and 100
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 2, 15))
xlabel('\theta_0'); ylabel('\theta_1')
结果如下:
现在最小的位置更明显。