DeepLearning 1 - 线性回归

来源:互联网 发布:雀巢网络授权编号查询 编辑:程序博客网 时间:2024/06/05 15:06

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不同,或者你可能没有足够的迭代。例如,在MATLAB500次迭代运行梯度下降给出THETA = [ 0.7318  0.0672 ] 。这是接近收敛,但THETA仍然可以得到接近精确值,如果你运行的梯度下降更多一些。
 
如果你的答案大大不同,从上面的解决方案,有可能在你实现中的错误。检查你使用的0.07正确的学习率。然后,请检查您的XY向量确实是你所期望的那样。请记住,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')
结果如下:
现在最小的位置更明显。
 

 

0 0
原创粉丝点击