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

最新文章

  1. 移动端web开发总结
  2. 【转】centos关机与重启命令详解
  3. Android开篇(转)
  4. 面试题_1_to_16_多线程、并发及线程的基础问题
  5. UUID为36位
  6. spring配置文件位置
  7. Linux学习之tail命令
  8. BZOJ AC300题留念
  9. java中的静态代码块等执行顺序
  10. C#之AES256位加密解密
  11. Java(20)file i/o
  12. [Swift]LeetCode164. 最大间距 | Maximum Gap
  13. Laravel使用redis保存SESSION
  14. 读取CSV到DataTable
  15. AIR文件操作(二):使用文件对象操作文件和目录
  16. 【JMeter】如何录制创建及得到曲线图
  17. WebService 服务端客户端 实例 HTTPRIO (一) SOAP WSDL
  18. spring-security(2)
  19. elasticsearch 分布式集群搭建
  20. 【docker】docker部署spring boot项目在服务器上

热门文章

  1. java内存管理之内存模型
  2. ASP.NET-前台view返回model集合
  3. 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
  4. CURL库的宏定义列表
  5. 暑假NOIP期末考试【1】—— Phantom
  6. 程序猿的量化交易之路(21)--Cointrader之Currency货币实体(9)
  7. Java的接口总结
  8. 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
  9. php设计模式之桥接模式
  10. BZOJ 2588 主席树