matlab 线性拟合polyfit_Matlab概率统计与曲线拟合

一、二项分布

  • 二项分布来源于伯努利试验 (事件发生概率 ) :

含义为独立重复N次试验后, 事件总共发生k次的概率

  • 分布函数 二项分布记为
  • binopdf 获得事件共发生次的概率
  • binocdf 为事件最多发生次的概率
  • binornd 将生成一个服从二项分布 规模为 的随机矩阵
  • 二项分布的数字特征

例:画出情况下的二项分布概率特性曲线

N = 100; p = 0.5;     % 总试验次数和单次试验发生概率
k = 0:N;       % 所有可能的事件发生次数
pdf = binopdf(k, N, p);    % 绘制概率曲线
cdf = binocdf(k, N, p);    % 绘制分布曲线
h = plotyy(k, pdf, k, cdf);   % 左右两侧不同的纵轴刻度代表两个函数

绘制结果为:

matlab 线性拟合polyfit_Matlab概率统计与曲线拟合_第1张图片

进阶绘图技巧:set函数的使用

set(get(h(1),'Children'),'Color','b','Marker', '.', 'MarkerSize', 13)
% 句中 get(h(1),'children') 表示获取刚才第一条曲线绘制的所有子对象
% 然后将第一条曲线改为蓝色 并且在采样点加注实心点 不是只画点

set(get(h(1),'Ylabel'), 'String','pdf')
% 句柄包含多个绘图时 需要 get 出来再操作 此行改变了左侧 Y 轴的标记名

set(h(2),'Ycolor',[1, 0, 0])
% 第二条曲线纵坐标轴颜色改为纯红色

set(get(h(2),'Children'),'Color','r','Marker','+','MarkerSize',4)
% 第二条曲线改为红色并用来标注采样点

set(get(h(2), 'Ylabel'),'String', 'cdf')
% 右侧Y轴的标记名
xlabel('k')
grid on

绘图结果为:

matlab 线性拟合polyfit_Matlab概率统计与曲线拟合_第2张图片

二、正态分布

  • 正态分布 为连续型随机分布,期望 标准差 :

对应分布函数

  • normpdf ) 获得服从正态分布 的随机变量概率密度函数在的取值。

  • normcdf ) 获得上述正态分布随机变量不超过的总概率

  • normrnd 将生成一个服从上述正态分 布,规模为 的随机样本构成的矩阵

  • randn 将生成一个服从标准正态分布 规模为 的随机样本构成的矩阵,事实上,我们可以利用这个矩阵可以构造任何正态分布随机矩阵。

例:正态分布几何表示

mu = 3; sigma = 0.5;
x = mu + sigma*[-3:-1,1:3];         % 设置六个不同的采样点
yf = normcdf(x, mu, sigma);         % 获得六个点的cdf值
P = [yf(4)-yf(3), yf(5)-yf(2), yf(6)-yf(1)];    % 计算cdf的差值(内部区域面积)
xd = 1:0.1:5; yd = normpdf(xd, mu, sigma); clf

for k=1:3
   xx = x(4-k):sigma/10:x(3+k);
   yy = normpdf(xx, mu, sigma);
   % 对于三个不同的面积区间进行不同范围的采样,并获得 pdf 函数的值
   subplot(3, 1, k), plot(xd, yd, 'b');     % 绘图位于3行1列第k个位置
   hold on, fill([x(4-k), xx, x(3+k)], [0, yy, 0], 'g'); hold off
   if k<2
       text(3.8, 0.6, '[{\mu}-{\sigma}, {\mu}+{\sigma}]')
   else
       kk = int2str(k);
       text(3.8, 0.6, ['[{\mu}-', kk, '{\sigma}, {\mu}+', kk, '{\sigma}]'])
   end
   text(2.8, 0.3, num2str(P(k))); shg   % 填充区域内显示面积
end
xlabel('x'); shg

绘图结果为:

matlab 线性拟合polyfit_Matlab概率统计与曲线拟合_第3张图片

三、统计分析命令

  • 分别计算矩阵各列的最大值或最小值,
  • 若计算整个矩阵最大元素, 可用 或
  • 分别计算矩阵各列的均值与中位值
  • , 分别计算矩阵各列的样本标准差与样本方差
  • 计算矩阵各列所组成列向量计算出的协方差矩阵, 注意到对应的分丹仍然是
  • 计算矩阵x各列所组成列向量对应的相关系数

例:产生1000个服从的随机数

mu = 2; s = 0.5;
rng(22, 'v5normal')
x = randn(1000, 1);

y = s*x+mu;

subplot(2, 1, 1), histfit(x), axis([-5, 5, 0, 100]), ylabel('x')
subplot(2, 1, 2), histfit(y), axis([-5, 5, 0, 100]), ylabel('y')

matlab 线性拟合polyfit_Matlab概率统计与曲线拟合_第4张图片

四、多项式拟合

假设 我们获取其函数曲线上的一组采样点 利用数学方法确定或估计系数 的问题称之为多项式拟合问题

一般来讲,多项式拟合往往会与逼近或插值这两种知识相结合。在采样点准确,函数光滑的情况下,高阶的拟合(即假设更大的 ) 往往效果更佳,但如果采样信息有噪声误差, 过大的可能会让结果失去拟合意义(一般设定 $n

  • p = ployfit(x, y, n)将通过数组和的数据进行拟合,拟合的阶数或次数设定为自然数,返回多项式系数
  • yy=polyval (p, x)可以将多项式系数回代,观察拟合值

利用MATLAB函数计算采样值向量与拟合值向量误差的范数, 范数与范数,可以分析其平方残差绝对值残差一致逼近残差的情况。

例:多项式拟合实例

x0 = 0:0.1:1;
y0 = [-.447, 1.978, 3.11, 5.25, 5.02, 4.66, 4.01, 4.58, 3.45, 5.35, 9.22]; % 构造原始数据
n = 3;P = polyfit(x0, y0, n)            % 多项式拟合
xx = 0:0.01:1; yy = polyval(P, xx);    % 利用得到的多项式代回得到预测值
plot(xx, yy, '-b', x0, y0, '.r', 'MarkerSize', 20);       % 绘图
legend('拟合曲线', '原始数据', 'Location', 'SouthEast')
xlabel('x')

绘制结果为:

matlab 线性拟合polyfit_Matlab概率统计与曲线拟合_第5张图片

进阶制表

y1 = polyval(P, x0);
T = table(x0', y0', y1', y1'-y0', 'VariableNames', { 'X', 'Y', 'Fit', 'FitError'})

表打印结果为:

T =

  11×4 table

     X       Y         Fit       FitError 
    ___    ______    ________    _________

      0    -0.447    -0.90431     -0.45731
    0.1     1.978      2.2819       0.3039
    0.2      3.11      4.0659      0.95592
    0.3      5.25      4.7879     -0.46211
    0.4      5.02       4.788     -0.23204
    0.5      4.66      4.4063     -0.25372
    0.6      4.01       3.983    -0.027002
    0.7      4.58      3.8583     -0.72174
    0.8      3.45      4.3722      0.92223
    0.9      5.35       5.865      0.51503
      1      9.22      8.6768     -0.54316

1. 多项式拟合的最小二乘理解

polyfit函数的方法即解最小二乘问题 :

方法是构造

易得 在 时, 方程超定 (可能无解) , 此时最小二乘解可以通过 获得

例:用最小二乘法获得拟合结果

x0 = (0:0.1:1)';
y0 = [-.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]';

m = length(x0);
n = 3;
X = zeros(m,n+1);                     %m个采样点,n+1个未知系数

for k=1:n
    X(:, n-k+1) = (x0.^k);
end

X(:, n+1) = ones(m, 1);
aT = (X\y0)'

输出结果应与调用多项式拟合函数得到的P相同

aT =

   56.6915  -87.1174   40.0070   -0.9043

2. 适用于特定问题的拟合或回归方法

  • 岭回归模型:本质上仍可化归为最小二乘问题

其中, 表示拟合系数。

  • Lasso模型:对拟合系数具有稀疏正则的模型:
  • 最小绝对残差 (LAR)模型:对离群值的处理有更好效果 :

实际问题中,线性拟合所使用的基函数也未必一定是多项式, 根据实际问题可以设置为三角函数、指数函数、正态分布的概率密度函数,以及混合定义的基底函数。

你可能感兴趣的:(matlab,线性拟合polyfit)