zoukankan      html  css  js  c++  java
  • ufldl学习笔记与编程作业:Linear Regression(线性回归)


    ufldl学习笔记与编程作业:Linear Regression(线性回归)


    ufldl出了新教程,感觉比之前的好。从基础讲起。系统清晰,又有编程实践。

    在deep learning高质量群里面听一些前辈说。不必深究其它机器学习的算法。能够直接来学dl。

    于是近期就開始搞这个了,教程加上matlab编程,就是完美啊。

    新教程的地址是:http://ufldl.stanford.edu/tutorial/


    本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/


    从一个最简单的线性回归,能够非常清晰地看出建模解决这个问题的一般思路。

    1 定义目标函数;

    2 最优化目标函数:求偏导数,求梯度。通过最优化的手段,比方梯度下降。拟牛顿发等。

    求出最优解。


    这里的习题比較特殊,不须要我们自己实现梯度下降法。

    而是对參数求出目标函数的偏导数,然后把剩下的最优化工作交给一个叫minFunc的函数去做了。


    本来这节仅仅须要读者用最简单的for循环来实现,后面有一个章节才要求用向量化的方法。

    因为对线性回归算是比較熟悉了,这里就偷懒,直接用向量化方法实现了。


    linear_regression.m代码例如以下:

    function [f,g] = linear_regression(theta, X,y)
      %
      % Arguments:
      %   theta - A vector containing the parameter values to optimize.
      %   X - The examples stored in a matrix.
      %       X(i,j) is the i'th coordinate of the j'th example.
      %   y - The target value for each example.  y(j) is the target for example j.
      %
      
      m=size(X,2);%列数
      n=size(X,1);%行数
    
      f=0;
      g=zeros(size(theta));
      h = theta' * X;
      f = (1/2)*h*h';%刚開始算错了目标函数,事实上目标函数就是代价函数,而不是如果函数
      g = X*((h-y)');
    
      %
      % TODO:  Compute the linear regression objective by looping over the examples in X.
      %        Store the objective function value in 'f'.
      %
      % TODO:  Compute the gradient of the objective with respect to theta by looping over
      %        the examples in X and adding up the gradient for each example.  Store the
      %        computed gradient in 'g'.
      
    

    结果例如以下:




    对于向量化编程。感觉要对立面全部的矩阵在脑海里都要有一个印象才行。

    没印象的话。多在纸上多画几下就好。

    此前也写过一篇《 

    从零单排入门机器学习:线性回归(linear regression)实践篇

    》。

    里面提到这点。


    事实上,今晚做这个作业的时候,遇到两个坑。

    第一个是求错f,我以为f是求如果函数的值H,事实上是要求目标函数。代价函数。

    開始还看到是库函数minFunc里面调用的函数报错,以为人家给的代码有bug。

    后来发现自己求错了。

    第二个是Octave调用C代码。比方lbfgsAddC.c和lbfgsProdC.c。这两个文件在mex目录里。

    查了相关资料。才知道。先要编译为mex文件。才干被Octave调用。

    m文件一般跟mex同文件夹。应该也能够指定文件夹,详细没深究。



    https://www.gnu.org/software/octave/doc/interpreter/Getting-Started-with-Mex_002dFiles.html#Getting-Started-with-Mex_002dFiles

    编译c为mex:

    mkoctfile --mex myhello.c

    mkoctfile 在Octave的bin文件夹里,这玩意还要调用gcc和g++。
    所以得把gcc和g++所在文件夹加入到环境变量。




    本文作者:linger

    本文链接:http://blog.csdn.net/lingerlanlan/article/details/38377023






  • 相关阅读:
    【洛谷P3649】回文串
    【CH2401】送礼物
    Python 函数
    Python 文件操作
    JS的DOM和BOM
    JavaScript (内置对象及方法)
    JavaScript 基础(数据类型、函数、流程控制、对象)
    Python基础数据类型(数字、字符串、布尔、列表、元组、字典、集合等)
    MySQL(二)
    数据备份 及 Python 操作 Mysql
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6919646.html
Copyright © 2011-2022 走看看