本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

交互式拟合

基本拟合用户界面

MATLAB® 基本拟合用户界面能让您以交互方式:

  • 利用样条插值、保形插值或最高 10 次的多项式进行数据建模

  • 绘制一个或多个数据拟合图

  • 绘制拟合的残差图

  • 计算模型系数

  • 计算残差范数(可用于分析模型与数据的拟合度的一种统计量)

  • 使用模型进行内插或在数据外部进行外插

  • 将系数及计算出的值保存到 MATLAB 工作区,以便在对话框外部使用

  • 生成 MATLAB 代码,以便用新数据重新计算拟合和重新生成绘图

注意

基本拟合用户界面仅可用于二维绘图。若要了解更先进的拟合及回归分析,请参阅 Curve Fitting Toolbox™ 文档和 Statistics and Machine Learning Toolbox™ 文档。

基本拟合准备

基本拟合用户界面在拟合前对数据进行升序排列。如果您的数据集较大且值未按升序排列,基本拟合用户界面在拟合前可能需要较长时间来预处理数据。

您可通过提前对数据进行排序,加快基本拟合用户界面的处理速度。若要通过数据向量 xy 创建排序向量 x_sortedy_sorted,请使用 MATLAB sort 函数:

[x_sorted, i] = sort(x);
y_sorted = y(i);

打开基本拟合用户界面

若要使用基本拟合用户界面,您必须首先利用(仅)产生 xy 数据的任何 MATLAB 绘图命令在图窗窗口中绘制数据。

若要打开基本拟合用户界面,请从图窗窗口顶部的菜单中选择工具 > 基本拟合

当您通过双击右下角的箭头按钮 完全展开它时,窗口显示三个面板。使用这些面板:

  • 选择模型及绘图选项

  • 检查及导出模型系数及残差范数

  • 检查及导出内插值及外插值。

若要逐一展开或收起面板,请点击界面右下角的箭头按钮。

示例:使用基本拟合用户界面

此示例说明如何使用基本拟合用户界面拟合、可视化、分析、保存多项式回归以及为其生成代码。

加载和绘制人口普查数据

文件 census.mat 包含 1790 年至 1990 年的美国人口数据,以 10 年为间隔。

若要加载及绘制数据,请在 MATLAB 提示符下键入以下命令:

load census
plot(cdate,pop,'ro')

load 命令将以下变量添加至 MATLAB 工作区:

  • cdate - 包含从 1790 年到 1990 年(以 10 为增量)的年份列向量。它是预测变量。

  • pop - cdate 中每一年的美国人口列向量。它是响应变量。

数据向量按年以升序排列。该图将人口显示为年份的函数。

现在,您已准备好对数据进行方程拟合,以建立人口随时间增长的模型。

通过三次多项式拟合预测人口普查数据

  1. 在图窗窗口中选择工具 > 基本拟合,打开“基本拟合”对话框。

  2. 在“基本拟合”对话框的绘制拟合图区域中,选中三次方复选框以将三次多项式拟合至数据。

    MATLAB 根据您的选项拟合数据,并将三次回归线添加至图中,如下所示。

    在计算拟合时,MATLAB 遇到问题并发出以下警告:

    多项式条件不当。
    请添加具有不同 X 值的点,
    选择次数较低的多项式
    或者选择“中心化并缩放 X 数据”。

    此警告指示计算出的该模型的系数对响应(测得的人口)中的随机误差敏感。它同时会提出一些建议,以帮助改进拟合。

  3. 继续使用三次拟合。由于您无法对人口普查数据添加新观测值,您可在重新计算拟合前将您拥有的值转换为 z 值以改进拟合。选中对话框中的中心化并缩放 X 数据复选框,使基本拟合工具执行转换。

    若要了解数据中心化和缩放的工作方式,请参阅了解基本拟合工具如何计算拟合

  4. 现在查看方程和显示残差。除了选中中心化并缩放 X 数据三次方复选框以外,再选中以下选项:

    • 显示方程

    • 绘制残差图

    • 显示残差范数

选择绘制残差图会将其子图创建为条形图。下图显示您所选的基本拟合用户界面选项的结果。

对于 1790 年之前,三次拟合是较差的预测变量,因为它显示在此期间人口呈递减趋势。该模型似乎更适合 1790 年之后的数据。但是,残差的模式显示该模型并不符合正态误差假设,而这正是最小二乘拟合的基础。图例中标识的 data 1 行是观测到的 x (cdate) 和 y (pop) 数据值。三次方 回归线显示对数据值进行中心化并缩放后的拟合。请注意,即使工具使用变换后的 Z 值计算拟合,该图仍以原始数据单位显示图窗。

为进行比较,请尝试在绘制拟合图区域中选择另一个多项式方程来拟合人口普查数据。

查看和保存三次拟合参数

在“基本拟合”对话框中,点击箭头按钮 ,在数值结果面板中显示估算的系数及残差范数。

若要查看特定拟合,请从拟合列表中选择它。这将在“基本拟合”对话框中显示系数,但不会在图窗窗口中绘制拟合图。

注意

如果您还希望在绘图中显示拟合,必须选中相应的绘制拟合图复选框。

通过点击“数值结果”面板上的保存到工作区按钮,将拟合数据保存至 MATLAB 工作区。“将拟合保存到工作区”对话框随即打开。

选中所有复选框后,点击确定以将拟合参数保存为 MATLAB 结构体:

fit
fit = 
     type: 'polynomial degree 3'
    coeff: [0.9210 25.1834 73.8598 61.7444]

现在,您可以在基本拟合用户界面以外将拟合结果用于 MATLAB 编程。

计算决定系数 R2

您可通过计算决定系数R 方 (R2),确定多项式回归预测您的观测数据的能力。R2 统计量的范围介于 0 至 1 之间,它用来度量自变量在预测因变量的值方面的可用度:

  • 接近 0 的 R2 表示该拟合并不明显优于模型 y = constant

  • 接近 1 的 R2 表示自变量能够解释因变量的大部分变化。

若要计算 R2,请首先计算拟合,然后通过它获得残差。残差是因变量的观测值与其拟合预测值之间的有符号差值。

residuals = yobserved - yfitted

基本拟合工具可为它计算的任何拟合生成残差。若要查看残差图,请选中绘制残差图复选框。您可以条形图、线图或散点图形式查看残差。

在您获得残差值后,您可将它们保存到工作区,在那里您可以计算 R2。完成本示例的前面部分,对人口普查数据进行三次多项式拟合,然后执行以下步骤:

计算三次拟合的残差数据及 R2

  1. 点击右下角的箭头按钮 ,打开“数值结果”选项卡(若尚未显示)。

  2. 拟合下拉菜单中选择“三次方”(若尚未显示)。

  3. 点击保存到工作区,保存拟合系数、残差范数及残差。

    “将拟合保存到工作区”对话框随即打开,其中有三个复选框和三个文本字段。

  4. 选中所有三个复选框,以保存拟合系数、残差范数及残差值。

  5. 将保存的变量标识为属于三次拟合。通过将 3 添加至各个默认名称(如 fit3normresid3resids3),更改变量名称。该对话框应如下图所示。

  6. 点击确定。基本拟合将残差保存为数字的列向量,将拟合系数保存为结构体,将残差范数保存为标量。

    请注意,基本拟合为残差范数计算的值为 12.2380。此数字是三次拟合的残差平方和的平方根。

  7. 您也可以验证基本拟合工具提供的残差范数值。从您刚刚保存的 resids3 数组自行计算残差范数:

    mynormresid3 = sum(resids3.^2)^(1/2)
    
    mynormresid3 =
        12.2380

  8. 计算因变量 pop总平方和以计算 R2。总平方和是变量的各值与均值之差的平方和。例如,使用以下代码:

    SSpop = (length(pop)-1) * var(pop)
    
    SSpop =
        1.2356e+005
    
    var(pop) 计算人口向量的方差。将它与观测值个数减去 1 之后的差值相乘,以将自由度考虑在内。总平方和与残差范数均为正标量。

  9. 现在,使用 normresid3 的平方与 SSpop 一起计算 R2

    rsqcubic = 1 - normresid3^2 / SSpop
    
    rsqcubic =
        0.9988
    

  10. 最后,计算线性拟合的 R2,并将它与您刚才得出的三次 R2 值进行比较。基本拟合用户界面还为您提供线性拟合结果。若要获得线性结果,请重复步骤 2-6,将您的操作修改如下:

    • 若要计算最小二乘线性回归系数和统计,请在“数值结果”面板的拟合下拉菜单中选择“线性”而非“三次方”。

    • 在“保存到工作区”对话框中,将 1 附加至每个变量名称以将其标识为取自线性拟合,然后点击确定。变量 fit1normresid1resids1 现在存在于工作区中。

    • 使用变量 normresid1 (98.778) 计算线性拟合的 R2,操作与您为三次拟合执行的步骤 9 相同:

      rsqlinear = 1 - normresid1^2 / SSpop
      
      rsqlinear =
          0.9210
      

    此结果表明,人口数据的线性最小二乘拟合可解释其方差的 92.1%。由于此数据的三次拟合可解释该方差的 99.9%,该拟合似乎是更佳的预测变量。但是,由于三次拟合使用三个变量(x、x2 和 x3)进行预测,基本的 R2 值并不能完全反映该拟合的稳健性。评估多变量拟合优度的更合适的度量是调整后的 R2。若要了解关于计算和使用调整后的 R2 的信息,请参阅残差与拟合优度

小心

R2 度量多项式方程预测因变量的能力,而不是多项式模型对数据的适合程度。当您分析在实质上不可预测的数据时,较小的 R2 值表示自变量不能准确预测因变量。但是,它并不一定表示该拟合有问题。

为线性拟合计算残差数据及 R2.  在接下来的示例中,使用基本拟合用户界面执行线性拟合,将结果保存到工作区,并且为线性拟合计算 R2。然后,您可以将线性 R2 与您在示例计算三次拟合的残差数据及 R2 中得出的三次 R2 值进行比较。

  1. 点击右下角的箭头按钮 ,打开“数值结果”选项卡(若尚未显示)。

  2. 选中绘制拟合图区域中的线性复选框。

  3. 拟合下拉菜单中选择“线性”(若尚未显示)。“残差的系数和残差范数”区域显示线性拟合的统计。

  4. 点击保存到工作区,保存拟合系数、残差范数及残差。

    “将拟合保存到工作区”对话框随即打开,其中有三个复选框和三个文本字段。

  5. 选中所有三个复选框,以保存拟合系数、残差范数及残差值。

  6. 将保存的变量标识为属于线性拟合。通过将 1 添加至各个默认名称(如 fit1normresid1resids1),更改变量名称。

  7. 点击确定。基本拟合将残差保存为数字的列向量,将拟合系数保存为结构体,将残差范数保存为标量。

    请注意,基本拟合为残差范数计算的值为 98.778。此值是线性拟合的残差平方和的平方根。

  8. 您也可以验证基本拟合工具提供的残差范数值。从您刚刚保存的 resids1 数组自行计算残差范数:

    mynormresid1 = sum(resids1.^2)^(1/2)
    
    mynormresid1 =
        98.7783

  9. 计算因变量 pop总平方和以计算 R2。总平方和是变量的各值与均值之差的平方和。例如,使用以下代码:

    SSpop = (length(pop)-1) * var(pop)
    
    SSpop =
        1.2356e+005
    
    var(pop) 计算人口向量的方差。将它与观测值个数减去 1 之后的差值相乘,以将自由度考虑在内。总平方和与残差范数均为正标量。

  10. 现在,使用 normresid1 的平方与 SSpop 一起计算 R2

    rsqlinear = 1 - normresid1^2 / SSpop
    
    rsqcubic =
        0.9210
    

    此结果表明,人口数据的线性最小二乘拟合可解释其方差的 92.1%。由于此数据的三次拟合可解释该方差的 99.9%,该拟合似乎是更佳的预测变量。但是,三次拟合有四个系数(x、x2、x3 和一个常量),而线性拟合有两个系数(x 和一个常量)。简单的 R2 统计不能解释不同的自由度。评估多项式拟合的更合适度量是调整后的 R2。若要了解关于计算和使用调整后的 R2 的信息,请参阅残差与拟合优度

小心

R2 度量多项式方程预测因变量的能力,而不是多项式模型对数据的适合程度。当您分析在实质上不可预测的数据时,较小的 R2 值表示自变量不能准确预测因变量。但是,它并不一定表示该拟合有问题。

内插和外插人口值

假设您希望使用三次模型对 1965 年(原始数据中并未提供的日期)的美国人口数据进行插值。

  1. 在“基本拟合”对话框中,点击 按钮以指定评估当前拟合的 x 值的向量。

  2. 输入值... 字段中,键入以下值:

    1965
    

    注意

    使用未经缩放和中心化的 x 值。您不需要先进行中心化和缩放,即使您在通过三次多项式拟合预测人口普查数据中选择了缩放 x 值以获得系数。“基本拟合”工具会在后台进行必要的调整。

  3. 点击计算

    x 值和 f(x) 的对应值根据拟合进行计算并显示在表中,如下所示:

  4. 选中绘制计算结果图复选框以将插值显示为菱形标记:

  5. 点击保存到工作区,将 1965 年的人口插值保存到 MATLAB 工作区。

    这将打开以下对话框,您可以在其中指定变量名称:

  6. 点击确定,但如果您希望执行下一节生成代码文件以重新生成结果中的步骤,则要使图窗窗口保持打开状态。

生成代码文件以重新生成结果

完成基本拟合会话后,您可生成 MATLAB 代码,该代码使用新数据重新计算拟合并重新生成绘图。

  1. 在图窗窗口中,选择文件 > 生成代码

    这将创建一个函数并在 MATLAB 编辑器中显示它。该代码向您说明如何以编程方式重现您与“基本拟合”对话框的交互操作。

  2. 将第一行上的函数名称从 createfigure 更改为更具体的名称,如 censusplot。将代码文件保存至当前文件夹,文件名为 censusplot.m。该函数的开头为:

    function censusplot(X1, Y1, valuesToEvaluate1)

  3. 生成一些新的随机扰动的人口普查数据:

    randpop = pop + 10*randn(size(pop));
  4. 用新数据重新生成绘图并重新计算拟合:

    censusplot(cdate,randpop,1965)

    您需要三个输入参数:在原始图形中绘制的 x,y 值 (data 1),以及用于标记的 x 值。

    下图显示所生成的代码产生的绘图。新绘图与您生成的代码所产生的图窗外观相匹配,但 y 数据值、三次拟合的方程以及条形图中的残差值不同,这在意料之中。

了解基本拟合工具如何计算拟合

基本拟合工具调用 polyfit 函数计算多项式拟合。它调用 polyval 函数评估拟合。polyfit 分析它的输入,以确定数据的条件是否适合要求的拟合度。

若发现病态数据,polyfit 将尽其所能计算回归,但还会返回警告,表示拟合可以改善。基本拟合示例一节通过三次多项式拟合预测人口普查数据显示了该警告。

改善模型可靠性的一种方法是增加数据点。但是,向数据集添加观测值并非始终可行。替代策略是转换预测变量,对其中心化和缩放进行归一化。(在示例中,预测变量是人口普查日期的向量。)

通过计算 z 值polyfit 函数进行归一化:

z=xμσ

其中,x 是预测变量数据,μ 是 x 的均值,σ 是 x 的标准差。z 值为数据提供均值 0 和标准差 1。在基本拟合用户界面中,您通过选中中心化并缩放 x 数据复选框,将预测变量数据转换为 z 值。

中心化并缩放后,计算 y 数据作为 z 的函数时的模型系数。这些数据与 y 作为 x 的函数时计算所得的系数不同,且更为稳定。模型的形式与残差范数不变。基本拟合用户界面会自动重新缩放 z 值,以便按与原始 x 数据相同的比例绘制拟合图。

若要了解如何将中心化并缩放后的数据作为中间数据创建最终绘图,请在命令行窗口中运行以下代码:

close
load census
x = cdate;
y = pop;
z = (x-mean(x))/std(x); % Compute z-scores of x data

plot(x,y,'ro') % Plot data as red markers
hold on        % Prepare axes to accept new graph on top

zfit = linspace(z(1),z(end),100);
pz = polyfit(z,y,3); % Compute conditioned fit
yfit = polyval(pz,zfit);

xfit = linspace(x(1),x(end),100);
plot(xfit,yfit,'b-') % Plot conditioned fit vs. x data

中心化并缩放后的三次多项式绘制为一条蓝线,如下所示:

在代码中,z 的计算说明了如何对数据进行归一化。如果您在调用 polyfit 函数时提供三个返回变量,该函数将自行执行转换:

[p,S,mu] = polyfit(x,y,n)
返回的回归参数 p 现在基于归一化的 x。返回的向量 mu 包含 x 的均值和标准差。有关详细信息,请参阅 polyfit 参考页。