多元线性回归练习

数据

数据下载: ex3Data.zip。看过斯坦福大学吴恩达老师的机器学习课程的同学都知道一个关于房子大小与房子价格的数据集,我们本次选用的数据集正是这47个样本数据,x表示房子面积与卧室的数量,y表示房子的价格。我们的目标是预测房子大小为1650,且卧室有3个的房子的价格。

数据预处理

数据添加x0项,该项数据初始化为1

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

数据尺寸大小的不同对梯度下降算法的影响较大,我们应对数据进行一种映射处理。具体方法是先求标准偏差以及平均值,然后该数据减去均值后再除以标准偏差即可。

sigma = std(x);%求标准偏差
mu = mean(x);  %求均值
x(:,2) = (x(:,2) - mu(2))./ sigma(2); %对第二列房子面积进行处理
x(:,3) = (x(:,3) - mu(3))./ sigma(3); %对第三列房子卧室数量进行处理

梯度下降

关于梯度下降相关公式可参考上一篇博文,此处不再重复介绍。

学习率的选择 

学习率的选择范围一般在

 

通过运行梯度下降法观察损失函数的函数值变化相应的调整学习率大小,以便寻找最佳的学习率

theta = zeros(size(x(1,:)))‘; % initialize fitting parameters
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-eth iteration
% but Matlab/Octave doesn‘t have a zero index
figure;
plot(0:49, J(1:50), ‘-‘)
xlabel(‘Number of iterations‘)
ylabel(‘Cost J‘)

如果你在一个比较好的范围内选择了一个学习率,你应该会出现如下图所示的曲线图。

如果你得到的曲线图与它很不相同时,你应该试着去调整你的学习率。

当然,你也可以使用正规方程组方式求解。

下面我们给出主要程序代码:

%% 方法一:梯度下降法
x = load(‘ex3x.dat‘);
y = load(‘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(‘ex3x.dat‘);
y = load(‘ex3y.dat‘);
x = [ones(size(x,1),1) x];

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

用梯度下降法在各个不同学习率下求得的曲线图如下:


由图可知,当学习率为1时,收敛的最快,所以我们选用学习率为1,求得的参数及预测数据结果如下

当我们采用正规方程组求解时,得到的参数及预测结果数据如下:


计算结果略有误差,但差异不大,基本为29万多点。

参考文章:

http://www.cnblogs.com/tornadomeet/archive/2013/03/15/2962116.html

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

时间: 2024-10-03 22:04:22

多元线性回归练习的相关文章

多元线性回归和多项式回归

多项式回归也称多元非线性回归,是指包含两个以上变量的非线性回归模型.对于多元非线性回归模型求解的传统解决方案,仍然是想办法把它转化成标准的线性形式的多元回归模型来处理. 多元非线性回归分析方程 如果自变数与依变数Y皆具非线性关系,或者有的为非线性有的为线性,则选用多元非线性回归方程是恰当的.例如,二元二次多项式回归方程为: 令,及于是上式化为五元一次线性回归方程: 这样以来,便可按多元线性回归分析的方法,计算各偏回归系数,建立二元二次多项式回归方程. -参考文献:智库百科,点击打开 多元二项式回

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

多元线性回归

之前我们涉及过线性回归,不过那个是单元的(一个未知数X),这回我们来学习一下多元线性回归(多个X). 首先我们给一组房子数据: 我们给出几个关于多元线性回归的概念(我们把价格设为y,其他设为x): n : 特征数量(这里就是4) :第i组特征里的第j个特征 :第i组特征 可以用向量的方式表示.比如x(2) =  多元线性回归方程就为: 还可以写成: hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+?+θnxn (x0 = 1) 然后我们可以用矩阵来表示这个多元线性回归函数.(矩阵的知识请看我

R语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论.这其中可能包括了因为更好的家庭条件,所以有了更好的教育:因为在一线城市发展,所以有了更好的工作机会:所处的行业赶上了大的经济上行周期等.要想解读这些规律,是复杂的.多维度的,多元回归分析方法更适合解读生活的规律. 由于本文为非统计的专业

线性模型(1) —— 多元线性回归

提纲: 线性模型的基本形式 多元线性回归的损失函数 最小二乘法求多元线性回归的参数 最小二乘法和随机梯度下降的区别 疑问 学习和参考资料 1.线性模型的基本形式 线性模型是一种形式简单,易于建模,且可解释性很强的模型,它通过一个属性的线性组合来进行预测,其基本的形式为: 式(1) 转换成向量形式之后写成: 式(2) 为什么说其解释性很强呢,是因为模型的权值向量十分直观地表达了样本中每一个属性在预测中的重要度,打个比方,要预测今天是否会下雨,并且已经基于历史数据学习到了模型中的权重向量和截距b,则

【机器学习实战】多元线性回归模型

在许多实际问题中,影响因变量Y的自变量不止一个,通常设为p个,此时无法借助于图形的帮助来确定模型,这里则使用一种最为简单且普遍的模型--多元线性模型来进行回归计算. 1.数学模型 当影响Y值的因素不唯一时,我们可以使用多元线性回归模型: 当未知参数有两个时,我们可以画出此方程的图形表示(此时是一个平面,如图).如果未知数大于2时,则很难把此超平面给画出来. 如上图,为了求得等参数的值,我们由各个样本点(图中为红点)做一条平行于Y轴的直线,此直线交平面方程于一点,然后我们求得此线段的程度,并进行平

R语言:多元线性回归和模型检验

利用swiss数据集进行多元线性回归研究 # 先查看各变量间的散点图 pairs(swiss, panel = panel.smooth, main = "swiss data", col = 3 + (swiss$Catholic > 50)) # 利用全部变量建立多元线性回归 a=lm(Fertility ~ . , data = swiss) summary(a) ## ## Call: ## lm(formula = Fertility ~ ., data = swiss

SPSS--回归-多元线性回归模型案例解析

多元线性回归,主要是研究一个因变量与多个自变量之间的相关关系,跟一元回归原理差不多,区别在于影响因素(自变量)更多些而已,例如:一元线性回归方程 为: 毫无疑问,多元线性回归方程应该为: 上图中的 x1,  x2, xp分别代表"自变量"Xp截止,代表有P个自变量,如果有"N组样本,那么这个多元线性回归,将会组成一个矩阵,如下图所示: 那么,多元线性回归方程矩阵形式为: 其中: 代表随机误差, 其中随机误差分为:可解释的误差 和 不可解释的误差,随机误差必须满足以下四个条件,

多元线性回归的预测

  回归模型除了对参数进行估计和检验,以弄清楚变量的相关性和因果性之外,另一个目的便是进行预测. 那么,由OLS方法的出来的预测结果是否可靠呢?预测结果的可靠性又会受什么因素的影响呢?除了点估计的预测结果,能否有区间估计的预测结果呢? 本文就这些问题,来进行一一探讨  1.引入why? 回归模型除了对参数进行估计和检验,以弄清楚变量的相关性和因果性之外,另一个目的便是进行预测. 那么,由OLS方法的出来的预测结果是否可靠呢?预测结果的可靠性又会受什么因素的影响呢?除了点估计的预测结果,能否有区间

多元线性回归(Linear Regression with multiple variables)与最小二乘(least squat)

1.线性回归介绍 X指训练数据的feature,beta指待估计得参数. 详细见http://zh.wikipedia.org/wiki/%E4%B8%80%E8%88%AC%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B 使用最小二乘法拟合的普通线性回归是数据建模的基本方法. 令最小二乘项的偏导为0(为0时RSS项最小),求Beta估计值,得到最小二乘的向量形式. 最小二乘其实就是找出一组参数beta使得训练数据到拟合出的数据的欧式距离最小.如下图所示,使所有红点(训练