MATLAB拟合函数使用说明

  • Post author:
  • Post category:其他


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


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