Multivariance Linear Regression练习

 

%% 方法一:梯度下降法
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat');

x = [ones(size(x,1),1) x];
meanx = mean(x);%求均值
sigmax = std(x);%求标准偏差
x(:,2) = (x(:,2)-meanx(2))./sigmax(2);
x(:,3) = (x(:,3)-meanx(3))./sigmax(3);

figure
itera_num = 100; %尝试的迭代次数
sample_num = size(x,1); %训练样本的次数
alpha = [0.01, 0.03, 0.1, 0.3, 1, 1.3];%因为差不多是选取每个3倍的学习率来测试,所以直接枚举出来
plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'};

theta_grad_descent = zeros(size(x(1,:)));
for alpha_i = 1:length(alpha) %尝试看哪个学习速率最好
    theta = zeros(size(x,2),1); %theta的初始值赋值为0
    Jtheta = zeros(itera_num, 1);
    for i = 1:itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数       
        Jtheta(i) = (1/(2*sample_num)).*(x*theta-y)'*(x*theta-y);%Jtheta是个行向量
        grad = (1/sample_num).*x'*(x*theta-y);
        theta = theta - alpha(alpha_i).*grad;
    end
    plot(0:49, Jtheta(1:50),char(plotstyle(alpha_i)),'LineWidth', 2)%此处一定要通过char函数来转换
    hold on
    
    if(1 == alpha(alpha_i)) %通过实验发现alpha为1时效果最好,则此时的迭代后的theta值为所求的值
        theta_grad_descent = theta
    end
end
legend('0.01','0.03','0.1','0.3','1','1.3');
xlabel('Number of iterations')
ylabel('Cost function')

%下面是预测公式
price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]'
                                     
                                     
%%方法二:normal equations
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat');
x = [ones(size(x,1),1) x];

theta_norequ = inv((x'*x))*x'*y
price_norequ = theta_norequ'*[1 1650 3]'

 

 1 %% 方法一:梯度下降法
 2 x = load('E:\workstation\data\ex3x.dat');
 3 y = load('E:\workstation\data\ex3y.dat');
 4 
 5 x = [ones(size(x,1),1) x];
 6 meanx = mean(x);%求均值
 7 sigmax = std(x);%求标准偏差
 8 x(:,2) = (x(:,2)-meanx(2))./sigmax(2);
 9 x(:,3) = (x(:,3)-meanx(3))./sigmax(3);
10 
11 figure
12 itera_num = 100; %尝试的迭代次数
13 sample_num = size(x,1); %训练样本的次数
14 alpha = [0.01, 0.03, 0.1, 0.3, 1, 1.3];%因为差不多是选取每个3倍的学习率来测试,所以直接枚举出来
15 plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'};
16 
17 theta_grad_descent = zeros(size(x(1,:)));
18 for alpha_i = 1:length(alpha) %尝试看哪个学习速率最好
19     theta = zeros(size(x,2),1); %theta的初始值赋值为0
20     Jtheta = zeros(itera_num, 1);
21     for i = 1:itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数       
22         Jtheta(i) = (1/(2*sample_num)).*(x*theta-y)'*(x*theta-y);%Jtheta是个行向量
23         grad = (1/sample_num).*x'*(x*theta-y);
24         theta = theta - alpha(alpha_i).*grad;
25     end
26     plot(0:49, Jtheta(1:50),char(plotstyle(alpha_i)),'LineWidth', 2)%此处一定要通过char函数来转换
27     hold on
28     
29     if(1 == alpha(alpha_i)) %通过实验发现alpha为1时效果最好,则此时的迭代后的theta值为所求的值
30         theta_grad_descent = theta
31     end
32 end
33 legend('0.01','0.03','0.1','0.3','1','1.3');
34 xlabel('Number of iterations')
35 ylabel('Cost function')
36 
37 %下面是预测公式
38 price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]'
39                                      
40                                      
41 %%方法二:normal equations
42 x = load('E:\workstation\data\ex3x.dat');
43 y = load('E:\workstation\data\ex3y.dat');
44 x = [ones(size(x,1),1) x];
45 
46 theta_norequ = inv((x'*x))*x'*y
47 price_norequ = theta_norequ'*[1 1650 3]'
View Code

Multivariance Linear Regression练习

本文要解决的问题是给出了47个训练样本,训练样本的y值为房子的价格,x属性有2个,一个是房子的大小,另一个是房子卧室的个数。需要通过这些训练数据来学习系统的函数,从而预测房子大小为1650,且卧室有3个的房子的价格。

 

  实验基础:

  dot(A,B):表示的是向量A和向量B的内积。

  又线性回归的理论可以知道系统的损失函数如下所示:

                          

    其向量表达形式如下:

  

  当使用梯度下降法进行参数的求解时,参数的更新公式如下:

  

  当然它也有自己的向量形式(程序中可以体现)。

 

 

两种方法比较预测值:

l  :梯度下降法:

 1训练数据:

x = load('E:\workstation\data\ex3x.dat');

y = load('E:\workstation\data\ex3y.dat');

 

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

meanx = mean(x)  均值

sigmax = std(x)   标准差

x(:,2) = (x(:,2)-meanx(2))./sigmax(2);

x(:,3) = (x(:,3)-meanx(3))./sigmax(3);

2:Gradient descen梯度迭代

重点选择合适的下降下降梯度;

it's time to select a learning rate   The goal of this part is to pick a good learning rate in the range of 

    

 


You will do this by making an initial selection, running gradient descent and observing the cost function, and adjusting the learning rate accordingly. Recall that the cost function is defined as

 

    

 


The cost function can also be written in the following vectorized form,

 

    

 


where 

    

 

 

画图;展示每个学习速率对应的下降图像选取最佳的下降图像

 

 

预测值为;

price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]'

 

l  方法二   普通方法直接

x = load('E:\workstation\data\ex3x.dat');

y = load('E:\workstation\data\ex3y.dat');

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

 

theta_norequ = inv((x'*x))*x'*y

price_norequ = theta_norequ'*[1 1650 3]'

 

posted on 2015-06-27 18:16  梦在最晴天  阅读(264)  评论(0编辑  收藏  举报

导航