参考资料:

斯坦福大学公开课

:机器学习课程

http://v.163.com/movie/2008/1/B/O/M6SGF6VB4_M6SGHJ9BO.html

http://blog.csdn.net/abcjennifer/article/details/7732417

octave入门教程

http://wenku.baidu.com/view/22f5bb10cc7931b765ce1588.html

关于非线性优化fminbnd函数的说明(仅供新手参考)(也可作为fmincon函数的参考)

http://hi.baidu.com/maodoulovexixi/item/4205be1c11fbce6d3e87ce39

http://www.docin.com/p-214776767.html

由于是刚开始接触ML和MATLAB,所以记录一些比较简单的笔记。

个人实验中未使用MATLAB,而是使用了Octave作为替代,区别只是把函数结束的end改成endfunction即可,其他部分和matlab保持一致。

文中主要框架内容参考 http://blog.csdn.net/abcjennifer/article/details/7732417

第一部分:基本模型

在解决拟合问题的解决之前,我们首先回忆一下线性回归基本模型。

设待拟合参数 θn*1 和输入参数[

xm*n, ym*1] 。

对于各类拟合我们都要根据梯度下降的算法,给出两部分:

① cost

function(指出真实值y与拟合值h之间的距离):给出cost function 的表达式,每次迭代保证cost

function的量减小;给出梯度gradient,即cost function对每一个参数θ的求导结果。

function [ jVal,gradient ] = costFunction (

theta )

② Gradient_descent(主函数):用来运行梯度下降算法,调用上面的cost

function进行不断迭代,直到最大迭代次数达到给定标准或者cost function返回值不再减小。

function [optTheta,functionVal,exitFlag]=Gradient_descent(

)

线性回归:拟合方程为hθ(x)=θ0x0+θ1x1+…+θnxn,当然也可以有xn的幂次方作为线性回归项(如

),这与普通意义上的线性不同,而是类似多项式的概念。

其cost

function 为:

第二部分:Y=θ0+θ1X1型---线性回归(直线拟合)

在Matlab

线性拟合 &

非线性拟合中我们已经讲过如何用matlab自带函数fit进行直线和曲线的拟合,非常实用。而这里我们是进行ML课程的学习,因此研究如何利用前面讲到的梯度下降法(gradient

descent)进行拟合。

cost

function:

function [ jVal,gradient ] = costFunction2( theta )

%COSTFUNCTION2 Summary of thisfunction goes here

% linear regression -> y=theta0 + theta1*x

% parameter: x:m*n theta:n*1 y:m*1 (m=4,n=1)

%

�ta

x=[1;2;3;4];

y=[1.1;2.2;2.7;3.8];

m=size(x,1);

hypothesis = h_func(x,theta);

delta = hypothesis - y;

jVal=sum(delta.^2);

gradient(1)=sum(delta)/m;

gradient(2)=sum(delta.*x)/m;

end

其中,h_func是hypothesis的结果:

function [res] = h_func(inputx,theta)

%H_FUNC Summary of thisfunction goes here

% Detailed explanation goes here

%cost function 2

res= theta(1)+theta(2)*inputx;

end

Gradient_descent:

function [optTheta,functionVal,exitFlag]=Gradient_descent( )

%GRADIENT_DESCENT Summary of thisfunction goes here

% Detailed explanation goes here

options = optimset('GradObj','on','MaxIter',100);

initialTheta = zeros(2,1);

[optTheta,functionVal,exitFlag] = fminunc(@costFunction2,initialTheta,options);

end

result:

>> [optTheta,functionVal,exitFlag] = Gradient_descent()

Local minimum found.

Optimization completed because the size of the gradient is less than

the defaultvalue of the function tolerance.

optTheta =

0.3000

0.8600

functionVal =

0.0720

exitFlag =

1

即得y=0.3+0.86x;

验证:

function [ parameter ] = checkcostfunc( )

%CHECKC2 Summary of thisfunction goes here

% check ifthe cost function works well

% check with the matlab fit function as standard

%check cost function 2

x=[1;2;3;4];

y=[1.1;2.2;2.7;3.8];

EXPR= {'x','1'};

p=fittype(EXPR);

parameter=fit(x,y,p);

end

运行结果:

>> checkcostfunc()

ans =

Linear model:

ans(x) = a*x + b

Coefficients (with 95% confidence bounds):

a = 0.86 (0.4949, 1.225)

b = 0.3 (-0.6998, 1.3)

和我们的结果一样。下面画图:

function PlotFunc( xstart,xend )

%PLOTFUNC Summary of thisfunction goes here

% draw original data and the fitted

%===================cost function 2====linear regression

%original data

x1=[1;2;3;4];

y1=[1.1;2.2;2.7;3.8];

%plot(x1,y1,'ro-','MarkerSize',10);

plot(x1,y1,'rx','MarkerSize',10);

hold on;

%fitted line - 拟合曲线

x_co=xstart:0.1:xend;

y_co=0.3+0.86*x_co;

%plot(x_co,y_co,'g');

plot(x_co,y_co);

hold off;

end

注解:

1 single training example公式

More than one training example:

θ:θ(i)-=gradient(i),其中gradient(i)是J(θ)对θi求导的函数式,此处令α=1/m,并且gradient(1)在matlab程序中实际对应x(0)

,而x(0)=1,把

代入上面的公式

可以得到gradient(1)=sum(delta)/m;

注解2

options = optimset('GradObj','on','MaxIter',100);

initialTheta = zeros(2,1);

[optTheta,functionVal,exitFlag] = fminunc(@costFunction2,initialTheta,options);

初学matlab优化,迭代中止后,经常一头雾水。参看帮助后仍似懂非懂。下面关于fminbnd函数的说明(也可作为fmincon函数的参考)对于新手也许会有帮助,不当之处请指正。目标函数fun:

需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如

x =

fminbnd(inline('sin(x*x)'),x0)

同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun='myfun',则M文件函数myfun.m必须有下面的形式:

function f =

myfun(x)

f =

... %计算x处的函数值。

若fun函数的梯度可以算得,且options.GradObj设为'on'(用下式设定),

options =

optimset('GradObj','on')

则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。注意,当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值而不需要其梯度值时),可以通过核对nargout的值来避免计算梯度值。

function [f,g] = myfun(x)

f = ... %计算x处得函数值。

if nargout > 1 %调用fun函数并要求有两个输出变量。

g = ... %计算x处的梯度值。

end

octave运行matlab函数,机器学习-线性回归以及MATLAB octave实现相关推荐

  1. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

  2. Matlab回归算法,线性回归算法Matlab实现

    编辑推荐: 本文来自于csdn,本文将通过以OCR(光学字符识别)的场景来介绍深度学习在计算机视觉中的应用. 一,单变量线性回归: 1. 数据分布,x轴是属性城市人口,y轴是标签值盈利: 2. 目的: ...

  3. matlab将每次迭代结果画图,机器学习-线性回归以及MATLAB octave实现

    参考资料: 斯坦福大学公开课 :机器学习课程 [第2集]监督学习应用.梯度下降 http://v.163.com/movie/2008/1/B/O/M6SGF6VB4_M6SGHJ9BO.html h ...

  4. java 调用matlab函数_java中调用Matlab的函数+注意事项

    一.matlab版本必须支持java 在command 模式下面运行deploytool,如果支持该命令即可使用 二.matlab中function的书写 %定义一个函数operation(a,b), ...

  5. matlab函数积分怎么写,Matlab求分段函数的积分

    (一)前言 本文介绍一个使用Matlab进行求分段函数积分值的方法. 首先介绍如何使用int()对连续函数进行积分的求解,然后介绍一个对分段函数进行求积分的例子. (二)使用Matlab求定积分 Ma ...

  6. matlab函数 无限冲激响应滤波器,MATLAB代码 有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器...

    MATLAB有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器设计 附MATLAB代码 摘要 文章设计了一个数字信号处理仿真实验,产生一个信号,其频率成分为f1和f2,并对其进行理想采样,采样 ...

  7. matlab函数变量名替换,matlab替换符号函数的自变量

    matlab替换符号函数的自变量: 关于函数符号的介绍,缺失:matlab替换符自变量3698/9 约翰.伯努利於1694年首次提出函数(function)概念,并以字母 n 表示变量 z 的一个函数 ...

  8. matlab函数内定义常量,matlab 里定义全局变量,常量

    有时候一个常数在很多文件里都要用到,但是写数值既不直观又麻烦,数值谁记得住啊.在C/C++里可以用宏定义或者全局常量,matlab也有方法实现. 1. oop matlab R2008a开始支持面向对 ...

  9. matlab函数代入求值,matlab中,如何把带有符号的式子代入到一个函数中去?

    答:再开一个函数文件 function f2=fun(m) f2=f1(3*m+1): 这样就行了啊 答:如果是单变量函数,做起来很简单,直接用inline就可以了: 如果是多变量函数,相对要麻烦一些 ...

最新文章

  1. LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal-前序中序遍历构造二叉树-Python和Java递归解法
  2. HP ProLiant服务器收集日志的方法
  3. union all与空字段的一种用法
  4. 历经 7 年双 11 实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
  5. vscode markdown插件_如何用Markdown写公众号
  6. jsp servlet中的过滤器Filter配置总结(转)
  7. thinkphp中mysql添加数据_thinkphp添加数据 add()方法
  8. selenium svg标签定位元素
  9. linux wamp,ubuntu wamp server ..................
  10. WM6.5中隐藏和显示任务栏、命令栏及输入面板
  11. java 中 Integer 比较 问题
  12. 【红绿灯识别】基于matlab红绿灯识别【含Matlab源码 1068期】
  13. 整数规划遗传算法MATLAB,非线性整数规划的遗传算法Matlab程序
  14. Django下进行urlencode编码,可以编码中文参数的代码
  15. ML:可解释性之SHAP值的公式推导(基于原论文利用树类模型的Tree SHAP公式推导)之详细攻略
  16. 随笔之与潇哥交谈1h12min内容//2021-1-28【最后一个寒假作业】
  17. vue-cli、脚手架创建、eslint、alias别名配置、proxy代理配置、axios、scoped、穿透、媒体查询、12栅格、动态rem、1px边框、移动端事件、300ms延迟问题(六)
  18. golang最适合(擅长)做什么
  19. 眼球追踪如何预测头部追踪
  20. 获取QQ好友共同好友列表信息

热门文章

  1. thinkpad选择启动项_thinkpad启动项设置
  2. php 搜索图片,关于php图片搜索的10篇文章推荐
  3. Java 实现微信和支付宝支付
  4. TypeSprict
  5. FreeNAS Windows SMB文件共享及用户权限使用配置
  6. 两个程序员造就10000亿快手!此刻,宿华身价1300亿
  7. BZOJ3098. Hash Killer II(生日攻击)
  8. mDNS故障排查(译)
  9. SVG颜色、渐变和填充
  10. OpenGL gluLookAt函数详解