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