Deep learning:二(Multivariance Linear Regression练习)

练习及数据来源:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex3/ex3.html

一. 练习要求:

    1.对数据进行尺度变换预处理

    2.编写代码实现梯度下降求解theta

    3.利用损失函数J求合适的学习率(并绘图)

    4.编写代码实现正规方程求theta


二. 实验结果:


三. 遇到的问题:

    对正规方程的输入进行尺度变换,出现警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND =  1.582251e-18。

原因:X'X矩阵不可逆。用该方法预测出的价格也不正确。


四. 注意事项:

    用该模型进行预测时,新的输入值也应当进行尺度变换。

    该链接最后给出的答案里,正规方程没有进行尺度变换。若进行尺度变换,则会出现上面的问题。

    在进行对theta的值进行迭代时,要注意求出的ΔJ是一个矩阵,并非一个数。


五. matlab实验代码:

clear,clc;
x = load('ex3x.dat');
y = load('ex3y.dat');
max_itr = 100;

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

J1 = zeros([max_itr,1]);
J2 = J1;
J3 = J1;
theta1 = zeros([n,1]);
theta2 = theta1;
theta3 = theta1;
alpha1 = 1.3;
alpha2 = 1;
alpha3 = 0.7;

%========预处理=========
sigma = std(x);
mu = mean(x);
x(:,2) = (x(:,2)-mu(2))./sigma(2);
x(:,3) = (x(:,3)-mu(3))./sigma(3);
%========预处理=========

%==========梯度下降求解+求损失函数=========
for i = 1:max_itr
    h1 = x*theta1;
    J1(i) = 1/2/m*(sum(h1-y).^2);
    theta1 = theta1-(alpha1/m).*((h1-y)'*x)';
    
    h2 = x*theta2;
    J2(i) = 1/2/m*(sum(h2-y).^2);
    theta2 = theta2-(alpha2/m).*((h2-y)'*x)';
    
    h3 = x*theta3;
    J3(i) = 1/2/m*(sum(h3-y).^2);
    theta3 = theta3-(alpha3/m).*((h3-y)'*x)';
end
%==========梯度下降求解+求损失函数=========

%============对J绘图求alpha=============
figure;
plot(0:max_itr-1, J1(1:max_itr), 'b-');
hold on;
plot(0:max_itr-1, J2(1:max_itr), 'r-');
plot(0:max_itr-1, J3(1:max_itr), 'k-');
xlabel('Number of iterations')
ylabel('Cost J')
legend('alpha = 1.3','alpha = 1','alpha = 0.7');
%============对J绘图求alpha=============

%============正规方程求解=============
x = load('ex3x.dat');
y = load('ex3y.dat');
[m n] = size(x);
x = [ones(m,1),x];
theta = inv(x'*x)*x'*y;


猜你喜欢

转载自blog.csdn.net/Chanon_Lee/article/details/80696675
今日推荐