zoukankan      html  css  js  c++  java
  • 线性回归 Linear regression(1)线性回归的基本算法与求解

    本系列内容大部分来自Standford公开课machine learning中Andrew老师的讲解,附加自己的一些理解,编程实现和学习笔记。

    第一章 Linear regression

    1.线性回归

    线性回归是一种监督学习的方法。

    线性回归的主要想法是给出一系列数据,假设数据的拟合线性表达式为:

    如何求得参数θ成为这个方法唯一的问题,为此我们需要定义损失函数:

    ,其中m表示样本个数,表示第i组样本,所以J表示总的m个样本的损失函数。

    这个损失函数的表达式我们一定很熟悉,方差?最小二乘法?没错,这就是我们最原始的最小二乘模型。我们的任务就是让损失函数J尽可能的小。

    P.S:至于为什么要选择J作为我们的损失函数,从表面上看很自然,当然选择这个函数也有概率解释,概率解释会放在之后的文章中讨论。

     

    2.LMS最小均方算法

    我们现在要做的任务就是选择参数θ,使得损失函数J尽可能小,很自然我们会想到梯度下降的方法。

    梯度下降的思想最形象的解释就是:你站在山顶,环顾四周,寻找一个下山最快的方向走一小步,然后再次环顾四周寻找一个下山最快的方向走一小步,在多次迭代之后就会走到最低点。

    放在这里也就要求我们先选择一个初始的然后利用梯度下降进行迭代,其中α表示学习的步长。

    对于单个样本来说最后迭代公式为,这就是我们熟知的Widrow-Hoff规则。

    我们可以来分析一下这个迭代公式,的更新取决于真实值与拟合值的误差,从直观上我们就很能理解梯度下降和Widrow-Hoff规则了。

    有了这个规则,我们就可以设计相应的算法,使得J取到最小值了。

    方法一:批量梯度下降

    意思很简单,每次迭代都迭代所有的m个已知样本,直到收敛。

    Repeat until convergence{

         (for every j)

    }

    方法二:随机梯度下降

    批量梯度下降其实存在一个比较大的问题,当数据组数m特别大的时候,我们迭代一次就需要很长的时间。使用随机梯度下降虽然有可能走一些“弯路”,但因为每次迭代只使用一组数据所以相比较而言,反而能更快的收敛。

    Loop{

      for i=1 to m{

              
               if  convergence;

         }

    }

    其实在梯度下降算法中,还有一个问题,学习率如何控制,AndrewNg并没有太多的介绍,但是其实对于学习率α的控制相当重要,如果α略大就会导致最后无法收敛。我会针对自己做的demo再写一篇博客讨论学习率控制的问题。

    3.如何直接求出θ

    其实我们是能利用矩阵运算直接求出参数θ,不过需要一些矩阵计算,可能会重新开一篇文章来计算这个θ。

    这里就直接给出答案

  • 相关阅读:
    http协议详解
    001http协议
    django整合版
    数据库整合版
    并发编程整合版
    网络编程整合版
    面向对象编程
    LeetCode OJ:Binary Tree Postorder Traversal(后序遍历二叉树)
    LeetCode OJ:Populating Next Right Pointers in Each Node II(指出每一个节点的下一个右侧节点II)
    LeetCode OJ:Populating Next Right Pointers in Each Node(指出每一个节点的下一个右侧节点)
  • 原文地址:https://www.cnblogs.com/samsons/p/4370425.html
Copyright © 2011-2022 走看看