• 【cs229-Lecture2】Gradient Descent 最小二乘回归问题解析表达式推导过程及实现源码(无需迭代)


    视频地址:http://v.163.com/movie/2008/1/B/O/M6SGF6VB4_M6SGHJ9BO.html

    机器学习课程的所有讲义及课后作业:http://pan.baidu.com/s/1i3xcljJ

    视频前半部分讲了梯度下降算法的迭代过程求的局部最小值,后半部分介绍了利用数学方法给出参数向量的解析表达式,从而求出参数的值,也就是一种无需迭代的方法。

    由于PC上编辑不太方便,以下推导过程我会尽可能详细地呈现在草稿纸上,其实视频中AndrewNg已经讲解的很详细了,其实我也只是在看了推导过程之后,自己完全独立地推导了一遍,毕竟自己亲自有动笔了,印象自然深刻。如有不对之处,请指正。

    我觉得,当我们表示出J(θ)的表达式后,就已经可以把问题转化为多元函数的极值问题了,因此,也就出现了下面中要求偏导数,以及要设偏导数为0的步骤。而这里之所以会涉及到线代的知识,是因为线代可以用来简化运算,矩阵的表示的优雅。

    1、定义新符号;

    2、给出5个定理;

    3、把问题转化为数学计算;

    说明:m代表数据量(即有多少行数据);n代表特征个数(从x0~xn,其中x0恒等于1)

    1、定义新符号:

    2、给出5个定理;

    IMG_0599[1]

    3、把问题转化为数学计算;

    IMG_0601[1]

    IMG_0600[1]

     noIteration.java(导入jama包)

     1 package noIteration;
     2 
     3 import java.io.IOException;
     4 import java.util.List;
     5 
     6 import Jama.Matrix;
     7 
     8 public class noIteration{
     9     
    10     public static List<Data> DS;
    11     public static int m;
    12     
    13     public static double[][] initX(){
    14         double[][] x =new double[m][2];
    15         int m=DS.size();
    16         for(int i=0;i<m;i++){
    17             x[i][0]=DS.get(i).x[0];
    18             x[i][1]=DS.get(i).x[1];
    19         }
    20         return x;
    21     }
    22     
    23     public static double[][] initY(){
    24         double[][] y = new double[m][1];
    25         int m=DS.size();
    26         for(int i=0;i<m;i++){
    27             y[i][0]=DS.get(i).y;
    28         }
    29         return y;
    30     }
    31     
    32     public static void main(String[] args) throws IOException{
    33         
    34         DS=new DataSet().ds;        
    35         m=DS.size();
    36         
    37         double[][] x=initX();
    38         double[][] y=initY();
    39         Matrix mtx=new Matrix(x);
    40         Matrix mty=new Matrix(y);
    41         Matrix mtxT=mtx.transpose();
    42         Matrix ans=(mtxT.times(mtx)).inverse().times(mtxT).times(mty);
    43         for(int i=0;i<2;i++){
    44             System.out.print("   theta ["+i+"] : "+ans.get(i, 0));
    45         }
    46     }
    47 }

    总结:这个算式,简直美丽极了!







                If you have any questions about this article, welcome to leave a message on the message board.



    Brad(Bowen) Xu
    E-Mail : maxxbw1992@gmail.com


  • 相关阅读:
    Mysql数据库再度使用
    搭建wamp php环境
    phpMyAdmin
    windows激活全系列
    web常见之音乐播放器
    web常见效果之轮播图
    ASP.NET Web Pages
    Eclipse配置中文(汉化)
    以有涯随无涯
    How to get the edited text from itext in fabricjs
  • 原文地址:https://www.cnblogs.com/XBWer/p/3919502.html
Copyright © 2020-2023  润新知