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

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

代码link

用到的matlab函数

由于以前对MATLAB也不是非常熟悉,这里用到了一些MATLAB的 内建函数 ,顺便学习一下。

linespace

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

如果我们需要产生列向量,我们使用'就可以了:

pi

内置的常量,圆周率。

代码

line 1

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

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

大概看下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,形状是这样的:

这两个列向量里面所有元素都是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 的时候:

然后j = 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');

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

这个示意图可以让我们大致看出回归的过程。

[Machine-Learning] 一个线性回归的简单例子的更多相关文章

  1. 一个epoll的简单例子

    epoll事件机制的触发方式有两种:LT(电平触发)和ET(边沿触发) EPOLLIN事件: 内核中的socket接收缓冲区 为空(低电平) 内核中的socket接受缓冲区 不为空(高电平) EPOL ...

  2. 一个poll的简单例子

    该程序使用poll事件机制实现了一个简单的消息回显的功能,其服务器端和客户端的代码如下所示: 服务器端: //start from the very beginning,and to create g ...

  3. [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)

    线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...

  4. php mysql 一个查询优化的简单例子

    PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子 ...

  5. SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子

    本文档结合 SpringMVC. Mybatis. MySQL,说明如何实现一个简单的数据库单表 CRUD操作.开发工具使用集成了spring mvc的eclipse(Spring Tool Suit ...

  6. [Machine Learning] 多变量线性回归(Linear Regression with Multiple Variable)-特征缩放-正规方程

    我们从上一篇博客中知道了关于单变量线性回归的相关问题,例如:什么是回归,什么是代价函数,什么是梯度下降法. 本节我们讲一下多变量线性回归.依然拿房价来举例,现在我们对房价模型增加更多的特征,例如房间数 ...

  7. Java中死锁的简单例子及其避免

    死锁:当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞.比如,线程1已经持有了A锁并想要获得B锁的同时,线程2持有B锁并尝试获取A锁,那么这两个线程将永远地等待下去. ...

  8. Machine Learning分类:监督/无监督学习

    从宏观方面,机器学习可以从不同角度来分类 是否在人类的干预/监督下训练.(supervised,unsupervised,semisupervised 以及 Reinforcement Learnin ...

  9. 队列BlockingQueue的简单例子

    队列,当进行多线程编程的时候,很多时候可能会用到,队列是先进先出的,我们可以将要执行的任务放置在队列内缓存起来,当线程池中线程可以使用的时候,我们就从队列中获取一个任务执行.. 当前是一个队列的简单例 ...

随机推荐

  1. springMVC下载文件前修改文件名字

    很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了. 但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名 ...

  2. 此博客停止更新,请访问chenshuo.net

    非常感谢博客园,该博客不在更新,请访问 chenshuo.net

  3. mvc ChildActionOnly + ActionName的用法

    ChildActionOnly的目的主要就是让这个Action不通过直接在地址栏输入地址来访问,而是需要通过RenderAction来调用它. <a href="javascript: ...

  4. 增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略

    http://blog.csdn.net/silenceburn/article/details/6083375 =========================================== ...

  5. php的表单安全处理

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...

  6. UIView(包括子类)的几个初始化时执行动作的时机

    转载自:http://www.tqcto.com/article/mobile/56963.html 根据你需要执行的动作, 这里有几个方法: -(id)initWithFrame:(CGRect)f ...

  7. 转:Visual Studio进行Web性能测试- Part II

    原文作者:Ambily.raj 对于一个多用户的应用程序,性能是非常重要的.性能不仅是执行的速度,它包括负载和并发方面.Visual Studio是可以用于性能测试的工具之一.Visual Studi ...

  8. line-box(转)

    inline-block是什么? Inline-block是元素display属性的一个值.这个名字的由来是因为,display设置这个值的元素,兼具行内元素( inline elements)跟块级 ...

  9. 圖片裁剪大頭貼功能 - ASP.NET WebForm + jQuery + imgAreaSelect

    系統操作環境: ASP.NET WebForm .NET Framework 4.0 (C#) jQuery 1.7.1 imgAreaSelect 0.9.8 目錄結構: 與之前使用ASP.NET ...

  10. phpstrom 快捷键

    常用的PHPStorm快捷键:ctrl+j 插入活动代码提示ctrl+alt+t 当前位置插入环绕代码alt+insert 生成代码菜单ctrl+q 查看代码注释ctrl+d 复制当前行ctrl+y ...