线性回归练习

首先下载训练集数据ex2Data.zip, 里面有50个训练样本,x为50位小朋友的年龄,年龄段为2岁至8岁,y为对应小朋友的身高,年龄和身高都可以表示为小数形式,现在的需求是根据这50位小朋友的样本数据预测3.5岁和7岁小朋友的身高。

下面,我们首先画出这50位小朋友样本数据的散点图,使用的工具为Matlab。

第一步:加载数据

    x = load(‘ex2x.dat‘);
    y = load(‘ex2y.dat‘);

第二步:画散点图

figure %open a new figure window
plot(x, y, ‘o‘);
ylabel(‘Height in meters‘)
xlabel(‘Age in years‘)

通过上图,我们可以直观的发现,这些数据可以利用线性回归模型处理。我们在这里分别利用正规方程组和梯度下降两种方式求解。

方法一:正规方程求解

线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2中,我们曾经讲过关于正规方程组求解的方法。最后求解得到:

Matlab实现如下:

%%方法一
x = load(‘ex2x.dat‘); %加载数据
y = load(‘ex2y.dat‘);
plot(x,y,‘o‘)         %画散点图
xlabel(‘height‘)      %横轴含义标签
ylabel(‘age‘)
x = [ones(length(x),1),x];
% ones(length(x),1)用1填充x第一列长度的列向量(50*1)
% x = [ones(length(x),1),x]是在原来x基础上添加了一列全为1的列向量(50*2)
w=inv(x‘*x)*x‘*y   % 这个就是我们正规方程组求解公式,inv()是求逆,X‘是X转置
hold on            %仍在上面散点图画布上画图
plot(x(:,2),0.0639*x(:,2)+0.7502)  %w=inv(x‘*x)*x‘*y求解得到w0和w1
% w0=0.7502,w1=0.0639,所以直线方程为0.0639*x(:,2)+0.7502,其中x(:,2)代表x中第二列数据,即原始训练数据集中的年龄数据

方法二:梯度下降法



我们需要设定迭代次数(1500次)和学习率(alpha=0.07),并根据上面个两个式子迭代计算梯度求解。具体编程实现如下:

clear all; close all; clc

x = load(‘ex2x.dat‘);
y = load(‘ex2y.dat‘);

m = length(y); % number of training examples

% Plot the training data
figure; % open a new figure window
plot(x, y, ‘o‘);
ylabel(‘Height‘)
xlabel(‘Age‘)

% Gradient descent
x = [ones(m, 1) x]; % Add a column of ones to x
theta = zeros(size(x(1,:)))‘; % initialize fitting parameters
% 用零填充x第一行数据大小的向量(1*2),再转置为列向量(2*1)
MAX_ITR = 1500; % 最大迭代次数
alpha = 0.07;   % 学习率的大小

for num_iterations = 1:MAX_ITR
    % Here is the gradient
    grad = (1/m).* x‘ * ((x * theta) - y);
    % Here is the actual update
    theta = theta - alpha .* grad;
end

% print theta to screen
theta

% Plot the linear fit
hold on; % keep previous plot visible
plot(x(:,2), x*theta, ‘-‘)
legend(‘Training data‘, ‘Linear regression‘)%标出图像中各曲线标志所代表的意义,图例的意思
hold off % don‘t overlay any more plots on this figure,指关掉前面的那幅图

% Closed form solution for reference
% You will learn about this method in future videos
exact_theta = (x‘ * x)\x‘ * y

% Predict values for age 3.5 and 7
predict1 = [1, 3.5] *theta
predict2 = [1, 7] * theta

% Calculate J matrix损失函数
% Grid over which we will calculate J
theta0_vals = linspace(-3, 3, 100);%在-3到3的区间中均匀生成100个值
theta1_vals = linspace(-1, 1, 100);

% initialize J_vals to a matrix of 0‘s
J_vals = zeros(length(theta0_vals), length(theta1_vals));

for i = 1:length(theta0_vals)
      for j = 1:length(theta1_vals)
      t = [theta0_vals(i); theta1_vals(j)];
      J_vals(i,j) = (0.5/m) .* (x * t - y)‘ * (x * t - y);
    end
end

% Because of the way meshgrids work in the surf command, we need to
% transpose J_vals before calling surf, or else the axes will be flipped
J_vals = J_vals‘;
% Surface plot
figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel(‘\theta_0‘); ylabel(‘\theta_1‘);

% Contour plot
figure;
% Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 2, 15))%画出等高线
xlabel(‘\theta_0‘); ylabel(‘\theta_1‘);%类似于转义字符,但是最多只能是到参数0~9

上面三幅图分别表示数据拟合直线图、损失函数J的图像以及J的等高线图。

通过计算结果,我们得知,梯度下降算法与正规方程组得出的结果完全一致,挺好玩的。

参考资料: http://www.cnblogs.com/tornadomeet/archive/2013/03/15/2961660.html

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

时间: 2024-10-10 07:03:30

线性回归练习的相关文章

用scikit-learn和pandas学习线性回归

对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习啦.:) 这里我们用UCI大学公开的机器学习数据来跑线性回归. 数据的介绍在这: http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant 数据的下载地址在这: http://archive.ics.uci.edu/ml/ma

线性回归

线性回归简介 线性回归是指利用线性回归方程中的最小平方函数对一个或多个自变量和因变量之间的关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合. 案例简介 本案例中的数据是一组男孩年龄与身高的数据,我们将年龄作为自变量,身高作为因变量,二组数据分别从.dat文件中读取,最后拟合出一个线性关系式. 具体分析见http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearni

Spark MLlib Linear Regression线性回归算法

1.Spark MLlib Linear Regression线性回归算法 1.1 线性回归算法 1.1.1 基础理论 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合. 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析.如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间

正规方程(Normal Equation)——对于线性回归问题的一种快速解法

对于某些线性回归问题,正规方程方法可能更加简单高效. 正规方程推导过程如下: 梯度下降法和正规方程的比较: 总结: 只要特征数量并不是特别大,对于线性回归问题正规方程是一个比梯度下降算法更快的替代算法.但是当特征数量非常多的时候或者模型更复杂的时候(比如logistic regression等),正规方程就不再适用了.而梯度下降方法都可以使用.另外,当XTX是奇异矩阵(也称退化矩阵,不可逆)时,正规方程也不能使用,但是这种情况很少会发生(m≤n或者存在有依赖关系的特征).

线性回归的应用——容量预测

一个发展中的电信市场,网络容量往往是线性增加的,我们可以通过拟合历史网络容量指标,来判断未来网络规模,从而提前进行网络扩容,防患于未然. 线性回归实际上是找到一条直线,使得所有观测点y值到直线的离差平方和最小. 一.多元线性回归 多元线性回归使用矩阵方程可以很好的描述: 1. 拟合的p元线性方式格式 2. 回归拟合直线满足观测值与理论值离差平方和最小 3. 分别对p+1个因变量系数Beta求导,得到如下方程组 4. 进一步化简 5. 采用矩阵形式表示方程 6. 则方程系数如下 二.一元线性回归

一元线性回归

1.概念 一元线性回归是最简单的一种模型,但应用广泛,比如简单地预测商品价格.成本评估等,都可以用一元线性模型,本节主要讲解scikit-learn一元线性回归的使用以及作图说明. y=f(x)叫做一元函数,回归的意思就是根据已知数据复原某些值,线性回归(regression)就是用线性的模型做回归复原. 那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值. 比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解

对线性回归,logistic回归和一般回归的认识

假设有一个房屋销售的数据如下:这个表类似于北京5环左右的房屋价钱,我们可以做出一个图,x轴是房屋的面积.y轴是房屋的售价,如下: 如果来了一个新的面积,假设在销售价钱的记录中没有的,我们怎么办呢? 我们可以用一条曲线去尽量准的拟合这些数据,然后如果有新的输入过来,我们可以在将曲线上这个点对应的值返回.如果用一条直线去拟合,可能是下面 的样子:绿色的点就是我们想要预测的点. 首先给出一些概念和常用的符号. 房屋销售记录表:训练集(training set)或者训练数据(training data)

简单线性回归

协方差:两个变量总体误差的期望. 简单的说就是度量Y和X之间关系的方向和强度. X :预测变量Y :响应变量 Y和X的协方差:[来度量各个维度偏离其均值的程度] 备注:[之所以除以n-1而不是除以n,是因为这样能使我们以较小的样本集更好的逼近总体的协方差,即统计上所谓的"无偏估计".而方差则仅仅是标准差的平方] 如果结果为正值,则说明两者是正相关的(从协方差可以引出"相关系数"的定义), 如果结果为负值就说明负相关的 如果为0,也是就是统计上说的"相互独立

SPSS数据分析—多重线性回归

只有一个自变量和因变量的线性回归称为简单线性回归,但是实际上,这样单纯的关系在现实世界中几乎不存在,万事万物都是互相联系的,一个问题的产生必定多种因素共同作用的结果. 对于有多个自变量和一个因变量的线性回归称为多重线性回归,有的资料上称为多元线性回归,但我认为多元的意思应该是真的因变量而非自变量的,而且多重共线性这个说法,也是针对多个自变量产生的,因此我还是赞同叫做多重线性回归. 多重线性回归是适用条件和简单线性回归类似,也是自变量与因变量之间存在线性关系.残差相互独立.残差方差齐性,残差呈正态

2nd Class_监督学习_线性回归算法

感谢博临天下,笔记太好,我就直接搬过来再添加了.http://www.cnblogs.com/fanyabo/p/4060498.html 一.引言 本材料参考Andrew Ng大神的机器学习课程 http://cs229.stanford.edu,以及斯坦福无监督学习UFLDL tutorial http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial 机器学习中的回归问题属于有监督学习的范畴.回归问题的目标是给定D维输入变量x,并且每一个