Deep Learning 2 - 多元线性回归

来源:互联网 发布:说说大全软件 编辑:程序博客网 时间:2024/05/29 17:32

Deep Learning 2 - 多元线性回归


参考自:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex3/ex3.html

数据

下载ex3Data.zip,这是一个数据集,波兰的房屋价格。输出yi是价格,输入xi是生活区域和房间数目,共有m=47组测试数据。

数据预处理

加载数据,x0 = 1,matlab中代码为:

x = [ones(m,1), x];

对于输入数据xi,生活面积为1000乘以房间数,这种不同意味着预处理的输入数据会提升梯度下降法的计算效率。

程序中,采用均方差对输入进行放缩, 并设置其均值为0,matlab中,代码如下

sigma =std(x);

mu = mean(x);

x(:,2) =(x(:,2) - mu(2))./ sigma(2);

x(:,3) =(x(:,3) - mu(3))./ sigma(3);

梯度下降

之前是在一个单变量回归问题来实现梯度下降。唯一的不同是,现在在矩阵X多一个特征。

假设方程仍然成立:





根据梯度下降法,更新原则为:


初始时,θ= 0

利用J(θ)选择学习率

选择θ时,可以在以下范围选择:


选择一初始值,计算梯度下降的代价函数,并相应调整学习率,代价函数定义如下:


写成向量,如下:


其中,



当用Matlab进行数值运算时,向量形式更有用、有效。之前的计算是J(θ)关于θ0和θ1的值,现在是计算J(θ)关于θ在不通过程度下的梯度下降,在进行了很多程度的计算后,可以得到J(θ)的变化。

现在,进行50次迭代在初始的学习率下,在每次迭代时,计算J(θ),并保存J的值。在最后一次迭代时,回执J关于迭代次数的曲线。Matlab中,代码如下:

theta = zeros(size(x(1,:)))'; % initialize fittingparameters

alpha = %% Your initial learning rate %%

J = zeros(50, 1);

 

for num_iterations = 1:50

   J(num_iterations) = %% Calculate your cost function here %%

    theta =%% Result of gradient descent update %%

end

 

% now plot J

% technically, the first J starts at the zero-ethiteration

% but Matlab/Octave doesn't have a zero index

figure;

plot(0:49, J(1:50), '-')

xlabel('Number of iterations')

ylabel('Cost J')

如果选择的学习率在一个很好的范围内,绘制的曲线如下:



如果图像和上图不同,尤其是J(θ)增加,或者甚至波动,调整学习率并再试一次。我们推荐测试学习率3倍于最小的值,(i.e. 0.01, 0.03, 0.1,0.3 and so on)。

为了比较学习率不同时的曲线,将价格学习率的曲线放在同一张图上很有帮助。

具体而言,如果你已经尝试三个不同的值(你也许应该尝试比这更值),并存储在J1,J2和J3的值,你可以用下面的命令来绘制它们放在同一图所示:

plot(0:49, J1(1:50), 'b-');

hold on;

plot(0:49, J2(1:50), 'r-');

plot(0:49, J3(1:50), 'k-');

观察到,代价函数在不同学习率下不同,当学习率很小或者很大时是什么情形呢?

使用找到的最佳学习率,运行梯度下降知道收敛,得到最后的θ,预测1650平方英尺和3卧室的价格。

一般方程求解:

在一般方程的求解中,如下:


使用上述方程不需要对特征进行缩放,就可以得到一确切的解。没有像梯度下降一样的循环直到收敛。

1.    在你的程序中,使用上述公式计算θ,记住不需要放缩,但需要增加截距项。

2.    当求得θ时,用它做价格预测。比较是否与梯度下降法预测的值相同。

解决方案:

代码如下:ex3.m。

选择学习率

做出的代价函数图如下:

 

注意到小的学习率比如0.01,代价函数下降的很慢,意味着梯度下降时收敛慢,在1.3时是最大的学习率;为1时收敛很快。说明在一个确切的点后,学习率下降速度不在增加。

事实上,学习率很大时,梯度下架到最后不在收敛。下图是学习率为1.4时图像:


糟糕的是,J(θ)无法绘制出,因为计算的数值过于大。Matlab中,给出了NaN的值,

1. 最终求解的值为:


上述结果为学习率为1时100次迭代后结果。

2. 预测值为 $293,081. 

一般解

1.一般解为:


2.预测值为: $293,081


0 0