[Machine-Learning] 一个线性回归的简单例子

这篇博客中作一个使用最小二乘法实现线性回归的简单例子。数据结构

代码来自《图解机器学习》 图3-2,使用MATLAB实现。机器学习

代码link函数

用到的matlab函数

因为之前对MATLAB也不是很是熟悉,这里用到了一些MATLAB的 内建函数 ,顺便学习一下。学习

linespace

linspace用于产生指定范围内的指定数量点数,相邻数据跨度相同,并返回一个行向量:spa

linspace

若是咱们须要产生列向量,咱们使用'就能够了:.net

linspace-with-column-vector

pi

内置的常量,圆周率。code

pi

代码

line 1

n=50; N=1000; x=linspace(-3,3,n)'; X=linspace(-3,3,N)';

这句先定义了n和N两个整形变量,而后生成了2个长度分别为50和100的列向量,数据结构为:blog

line-1

大概看下x,是这个样子的:get

x

x是列向量(这么细致是为了能在数学上面有一个更加深入的了解)。pix 的内容就是x的内容都乘了一个π博客

line 2

pix=pi*x; y=sin(pix)./(pix)+0.1*x+0.05*randn(n,1);

获取y轴坐标,并加入一些随机的“噪声”,用于回归。

line 3

p(:,1)=ones(n,1); P(:,1)=ones(N,1);

这里创建了二个列向量,分别是pP,形状是这样的:

p-and-P

这两个列向量里面全部元素都是1;其实我奇怪为何不p = ones(n,1);,多是方便后面的格式统一吧。

line 4-7 (for循环)

for j=1:15
  p(:,2*j)=sin(j/2*x); p(:,2*j+1)=cos(j/2*x);
  P(:,2*j)=sin(j/2*X); P(:,2*j+1)=cos(j/2*X);
end

直接循环不是很直观,先手动作一两步试试:

咱们此次仅对p这个矩阵进行操做,当j = 1 的时候:

1

而后j = 2 的时候:

2

咱们会发现,每次执行一次循环,p矩阵就会增长2列,咱们能够根据语句的内容看出来增长了的内容和x与j的关系。在循环结束的时候,这个矩阵会有31列。

line 8

t=p\y; F=P*t;

我以为这行t = p \ y; 这句最关键了,\左除,用于解出矩阵t 使得 p * t = y

而后经过解出的t,算出F = p * t

line 9-10

figure(1); clf; hold on; axis([-2.8 2.8 -0.5 1.2]);
plot(X,F,'g-'); plot(x,y,'bo');

这两行技术含量不大,就是画图了:

这个示意图可让咱们大体看出回归的过程。

相关文章
相关标签/搜索