MATLAB拟合函数使用说明

(由于不方便上传公式,有部分直接截图)


2. Polyval函数

对应多项式拟合,多项式求值函数也相当重要,可以通过设定向量,快速定义如下多项式

据此,可以大概猜测到polyval调用的形式了

y = polyval(p,x)

如上所述

[y,delta] = polyval(p,x,S)

S即为polyfit函数返回的误差估计,具体delta的数学意义本人暂时不清楚

y = polyval(p,x,[],mu)

 

[y,delta] = polyval(p,x,S,mu)

 

结合polyfit的例子,可以尝试将拟合曲线画出来

x = -10 : 0.2 : 10;

y = 0.59*x.*x + 1.4*x+2+2*(rand(1,length(x))-0.5);

plot(x,y,‘.’)

[p, S] = polyfit(x,y,2)

yfit = polyval(p,x);

hold on 

plot(x,yfit, ‘r’);

结果如下图


1. Fittype函数:满足自定义复杂的拟合公式

使用fittype函数可以自定义拟合函数,可以满足线性拟合和非线性拟合。Fittype函数具有很灵活的配置,基本满足各种复杂场景,有相应的cftool工具箱。这里简要的介绍一下fittype的使用方式

aFittype = fittype(libraryModelName) 

Fittype = fittype(expression) 

使用如上两种方式,可以使用MATLAB已经实现的拟合算法或者使用自定义的拟合算法(可以引用.m文件),具体算法有‘poly11’,‘poly2’,‘linearinterp’等,具体详见fittype的文档说明。

Fittype = fittype(expression,Name,Value) constructs the fit type with additional options specified by one or more Name,Value pair arguments.

这是常用公式,使用如下

g = fittype(‘a*time^2+b*time+c’,’independent’,’time’,’dependent’,’height’);

可以制定拟合公式,变量和因变量,

g = 

     General model:

     g(a,b,c,time) = a*time^2+b*time+c

 

使用fittype拟合polyfit例子的数据,如下

ftype = fittype(‘a*x.^2+b*x+c’, ‘independent’, ‘x’, ‘dependent’, ‘y’);

pf = fit(x’,y’,ftype)

结果如下

>> pf = 

     General model:

     pf(x) = a*x.^2+b*x+c

     Coefficients (with 95% confidence bounds):

       a =      0.5888  (0.585, 0.5927)

       b =       1.398  (1.377, 1.418)

       c =        2.04  (1.865, 2.216)

给出95%的置信率。

如果x为行向量,则如下报错

Error using fit>iFit (line 127)

X must be a matrix with one or two columns.

 

 

结合上述几个函数,我们做一个逻辑回归的sigmoid函数拟合,具体场景见《分类算法之逻辑回归》

x=2:2:20; %月薪

y=[zeros(1,5) ones(1,5)]; %满意度

%简单的线性拟合

p1=polyfit(x,y,1);

%高阶线性拟合

p5=polyfit(x,y,5);

%sigmoid函数拟合

sf=fittype(‘1/(1+exp(-a*(x-10)))’, ‘independent’, ‘x’);

ps=fit(x’,y’,sf)

 

%拟合结果展示

figure

plot(x,y,‘o’)

hold on

xp=linspace(min(x), max(x));

y1=polyval(p1,xp);

y5=polyval(p5,xp);

ys=1./(1+exp(-ps.a*(xp-10)));

plot(xp, y1, ‘r’);

plot(xp, y5, ‘g’);

plot(xp, ys, ‘k’);

hold off


  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值