zoukankan      html  css  js  c++  java
  • 线性最小二乘两种方法

    线性最小二乘拟合 y = w0 +w1x  (参数 w0, w1)

    (1)如何评价一条拟合好的直线 y = w0 +w1x 的误差?

      "cost" of a given line : Residual sum of squares (RSS)

        

    (2)最小二乘方法的思路

      使 RSS 尽量小。

      即

          

      而RSS 函数的图像是这样的:

          

       极小值 处导数为0.

      

       对RSS 求导:

          

        

      有两种方法求解。

     1.closed form:

      解析解, 使gradient = 0

      得到:

      w1:  slope = ((sum of X * Y) - (1/N)*(sum of X)*(sum of Y)) / ((sum of X^2) -(1/N)* (sum of X)*(sum of X))

      w0:  intercept = (1/N)*(sum of Y) - slope * (1/N)* (sum of X)

      

      2.gradient descent

      梯度下降方法。

      对于简单的函数拟合,可以直接求出解析解。但对于一些不能直接求出解析解的情况(例如神经网络),就可以使用梯度下降方法。

      注意到:

       

        w0 的导数 = sum (yi - (w0+w1xi) ) ,即  w0导数 =  sum( error )

       w1的导数  = sum( error*x )

      

      算法过程:

       step 0.初始化:

          initial_w0 = 0

          initial_w1 = 0

          step_size = 0.05

          tolerance = 0.01

        step 1 ~. 对于接下来的每一步:

        (1)根据当前 w0、 w1 计算 y ,并计算w0 、w1的导数 sum( error ) 和 sum( error *x)

         (2)更新 w0 、w1 的值:

               adjustment  =  step_size *  derivative(导数)

              w0 = w0 - adjustment (w1 同理)

          (3)检查算法是否应该结束(导数是否已经收敛到一个很小的值了):

              magnitude = sqrt(sum (derivative ^2))

              if magnitude < tolerance:

                   end

    出处:华盛顿大学machine learning:regression  week 1

  • 相关阅读:
    Java最大栈深度有多大?-从一道面试题开始学习JVM
    高性能队列——Disruptor
    高性能的Redis之对象底层实现原理详解
    高性能的Redis之数据持久化小结
    高性能的Redis之数据结构小结
    Redis单线程为什么如此之快?
    kafka partition与 group的特性
    深扒Disruptor高性能的原因
    Python 元类编程实现一个简单的 ORM
    用vue.js实现的期货,股票的实时K线
  • 原文地址:https://www.cnblogs.com/smartweed/p/8257818.html
Copyright © 2011-2022 走看看