zoukankan      html  css  js  c++  java
  • [Machine-Learning] 一个线性回归的简单例子

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

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

    代码link

    用到的matlab函数

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

    linespace

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

    linspace

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

    linspace-with-column-vector

    pi

    内置的常量,圆周率。

    pi

    代码

    line 1

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

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

    line-1

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

    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=py; 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');
    

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

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

  • 相关阅读:
    批处理手动设置电脑的ip
    用shell脚本生成日志文件
    编译小米mini openwrt
    Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明
    swagger注释API详细说明
    com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
    在Java中如何高效判断数组中是否包含某个元素
    阿里云服务器端口开放对外访问权限
    macos 安装telnet命令
    在 Docker 上配置 Oracle
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/6287920.html
Copyright © 2011-2022 走看看