Multivariate Linear Regression

clear,clc
%梯度下降法
x = load('ex3x.dat');
y = load('ex3y.dat');
m = length(y);
x = [ones(m,1),x];
%归一化数据feature scaling
sigma = std(x); %求标准差
mu = mean(x);   %求均值
x(:,2) = (x(:,2) - mu(2))./ sigma(2); 
x(:,3) = (x(:,3) - mu(3))./ sigma(3);
n = 50;    %n为迭代次数
J = zeros(n , 1); 
alpha =[0.01, 0.03, 0.1, 0.3, 1, 1.3]; 
plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'};

for alpha_i = 1: size(alpha,2)
    theta = zeros(size(x(1,:)))'  % initialize fitting parameters
    for k=1:n  %n为迭代次数   
          J(k) = 1/(2*m).* (x * theta - y)' * (x * theta - y);
          theta = theta - alpha(alpha_i)*(1/m)*(x'*(x*theta - y));  
    end
    
    if(1 == alpha(alpha_i)) %通过实验发现alpha为1时效果最好,则此时的迭代后的theta值为所求的值
        theta_grad_descent = theta
    end
    
    plot(0:n-1, J(1:n), char(plotstyle(alpha_i)),'LineWidth',2)
    hold on
end
% now plot J
% technically, the first J starts at the zero-eth iteration
% but Matlab/Octave doesn't have a zero index

legend('0.01','0.03','0.1','0.3','1','1.3');
xlabel('Number of iterations')
ylabel('Cost J')

%预测:1650平方米,3个卧室的价格
%测试数据x=[1,1650,3]
x_test=[1,1650,3];
price_grad_descend = theta_grad_descent'*[1 (x_test(2)-mu(2))/sigma(2) (x_test(3)-mu(3)/sigma(3))]'

%Normal Equations
x = load('ex3x.dat');
y = load('ex3y.dat');
x = [ones(size(x,1),1) x];
format long g %取消matlab的科学计数法
theta_norequ = inv((x'*x))*x'*y;
price_norequ = theta_norequ'*x_test'

运行结果如下:


图 1 学习速率alpha为不同值得时候,代价函数J的变换曲线


图2 梯度下降法和最小二乘法的预测结果


由上面的图可以知道当学习率alpha=1的时候,梯度下降时最快的,并且梯度下降法和最小二乘法的对于测试数据[1,1650,3]的预测结果是一样的。。


Gradient Descent Vs Normal Equation

Gradient Descent的特点:

(1)需要预先设定Learning rate;

(2)需要多次iteration

(3)需要Feature Scaling(如归一化处理:0-1之间),如果不做处理的话,梯度下降困难。

Normal Equation的特点:

(1)简单

(2)方便

(3)不需要Feature Scaling;

(4)需要大量的矩阵运算,特别是逆运算,在矩阵很大的情况相下会增加计算复杂度和内存容量

在Feature较少的时候,可以使用Normal Equation

如:当feature > 100000时 使用Gradient Descent ,feature < 100000时,使用Normal Equation




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值