自由度是统计学和工程学中的一个重要概念。
它经常被用来概括用于计算统计量(如样本统计量)或在统计假设检验中使用的值的数量。
在机器学习中,自由度可能指模型中的参数数量,例如线性回归模型中的系数数量或深度学习神经网络中的权重数量。
令人担忧的是,如果机器学习中的自由度(模型参数)越多,那么模型就越可能过拟合训练数据集。这是来自统计学的普遍理解。这种预期可以通过使用正则化技术来克服,例如用于线性回归的正则化以及可用于深度学习神经网络模型的正则化方法集合。
在本篇博文中,您将了解统计学和机器学习中的自由度。
阅读本文后,你将了解:
- 自由度通常代表一个系统的控制点数。
- 在统计学中,自由度是用于计算统计量的值的数量。
- 在机器学习中,自由度是模型参数的数量。
通过我的新书 《机器学习统计学》开启您的项目,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。

机器学习中自由度的简明入门
照片由 daveynin 拍摄,部分权利保留。
概述
本教程分为三个部分;它们是:
- 自由度
- 统计学中的自由度
- 机器学习中的自由度
- 线性回归模型的自由度
- 线性回归误差的自由度
- 线性回归的总自由度
- 负自由度
- 自由度与过拟合
自由度
自由度代表系统、模型或计算的控制点数。
每一个可以改变的独立参数都是d维空间中的一个单独维度,它定义了可能影响系统的取值范围,其中特定的观察值或指定值是该空间中的一个点。
在数学上,自由度通常用希腊字母 nu 来表示,它看起来像一个小写的“v”。
它也可以缩写为“d.o.f.”、“dof”、“d.f.”或简单地“df”。
自由度是一个源自统计学和工程学的术语,也可能用于机器学习。
统计学中的自由度
在统计学中,自由度是用于计算统计量且可以改变的值的数量。
自由度:大致来说,计算统计量所需的最小数据量。更实际地说,它是一个或多个数字,用于估算数据集中的观测数量,以便确定统计显著性。
— 第 60 页,《通俗统计学》,第三版,2010年。
它计算为计算统计量所用的独立值数量减去计算出的统计量数量。
- 自由度 = 独立值数量 – 统计量数量
例如,我们可能有 50 个独立样本,并希望计算样本的统计量,例如均值。所有 50 个样本都用于计算,并且只有一个统计量,因此在这种情况下,均值的自由度计算如下:
- 自由度 = 独立值数量 – 统计量数量
- 自由度 = 50 – 1
- 自由度 = 49
自由度通常是在数据分布和统计假设检验中的一个重要考虑因素。例如,它曾经是计算统计量直接计算和常见的表格,用于对不同常见自由度的统计检验临界值进行计算。
到目前为止,一切都还好,但对于从数据中拟合的模型,例如在机器学习中,又该如何呢?
机器学习中的自由度
在预测建模中,自由度通常指的是模型中从数据估计出的参数数量。
这还可以包括模型的系数以及用于计算模型误差的数据。
理解这一点的最佳方法是使用线性回归模型。
线性回归模型的自由度
考虑一个具有两个输入变量的数据集的线性回归模型。
我们将为每个输入变量在模型中需要一个系数,例如,模型将有两个参数。
该模型如下所示,其中 *x1* 和 *x2* 是输入变量,*beta1* 和 *beta2* 是模型参数。
- yhat = x1 * beta1 + x2 * beta2
这个线性回归模型有 2 个自由度,因为模型中有 2 个参数必须从训练数据集中估计。向数据添加一列(一个额外的输入变量)将为模型增加一个自由度。
- 模型自由度 = 从数据估计的参数数量
通常根据拟合的参数数量来描述从数据拟合的模型复杂度。
例如,具有两个参数的线性回归模型的复杂度等于自由度,在本例中为 2。我们通常更喜欢低复杂度模型而不是高复杂度模型。更简单的模型泛化得更好。
自由度是对模型估计的参数数量的核算,并因此,作为线性回归模型复杂度的度量。
— 第 71 页,《应用预测建模》,2013年。
还没完。
线性回归误差的自由度
训练样本的数量很重要,并且会影响回归模型的整体自由度。
假设线性回归模型的系数是使用一个有 100 行或样本的训练数据集拟合的。
通过最小化模型预测值与期望输出值之间的误差来拟合模型。模型总误差的自由度为训练数据集中每个样本的数量减去从数据中估计的参数数量。
在本例中,模型误差为 100 减去模型中的 2 个参数,即 98 个自由度。
- 模型误差自由度 = 观测数量 – 参数数量
- 模型误差自由度 = 100 – 2
- 模型误差自由度 = 98
通常,在报告线性模型(如线性回归)的误差时,包括误差的自由度是一个好习惯。
至少,可以包含训练数据中的观测数量,以便确定模型误差的自由度。
线性回归的总自由度
线性回归模型的总自由度被视为模型自由度加上模型误差自由度的总和。
- 线性回归自由度 = 模型自由度 + 模型误差自由度
- 线性回归自由度 = 2 + 98
- 线性回归自由度 = 100
通常,自由度等于用于拟合模型的训练数据行数。
考虑一个数据集,其数据行数如前所述为 100 行,但现在我们有 70 个输入变量。
这意味着模型有 70 个系数或参数从数据中拟合。因此,模型误差将是 100 – 70,即 30 个自由度。
模型总自由度仍然等于行数,即 70 + 30。
负自由度
当我们拥有的列数多于行数时会发生什么?
例如,我们可能有 100 行数据和 10,000 个变量,例如 100 名患者的基因标记。
因此,线性回归模型将有 10,000 个参数,这意味着模型将有 10,000 个自由度。
我们可以按如下方式计算模型误差自由度:
- 模型误差自由度 = 观测数量 – 参数数量
- 模型误差自由度 = 100 – 10,000
- 模型误差自由度 = -9,900
糟糕。
我们可以按如下方式计算总自由度:
- 线性回归自由度 = 模型自由度 + 模型误差自由度
- 线性回归自由度 = 10,000 + -9,900
- 线性回归自由度 = 100
模型总共有 100 个自由度,但模型误差具有负自由度。
负自由度是有效的。
它表明我们拥有的统计量多于我们可以改变的值。在这种情况下,模型中的参数比训练模型的行数或观测值要多。
这就是所谓的 *p >> n*,即预测变量 *p* 的数量远大于样本 *n* 的数量。
自由度与过拟合
问题在于,当参数数量多于观测数量时,存在过拟合训练数据集的风险。
如果我们把模型中的每个系数看作一个控制点,这是很容易理解的。如果我们模型中的控制点多于观测值,那么理论上,我们可以配置模型来准确地预测训练数据集。以牺牲在新数据上的表现为代价来学习训练数据集的细节,就是过拟合的定义。
这是统计学家对深度学习神经网络模型的普遍担忧。
也就是说,深度学习模型通常比样本拥有更多的参数(模型权重)(例如,数十亿个权重),并且根据我们对线性模型的理解,预计它们会过拟合。
尽管如此,通过仔细选择模型架构和正则化技术,可以防止它们过拟合并保持低泛化误差。
此外,在深度模型中,有效自由度可能与模型中的参数数量无关。
我们已经证明,对于简单的分类模型,自由度等于模型中的参数数量。在深度网络中,自由度通常远小于模型中的参数数量,并且更深的网络倾向于具有更少的自由度。
— 《深度神经网络中的自由度》,2016年。
因此,统计学家和机器学习从业者越来越倾向于不再将自由度作为模型复杂度的代理或过拟合的预期。
对于大多数应用统计学家来说,拟合过程的自由度与其模型复杂度或其过拟合数据的能力是同义的。……我们认为,相反,模型复杂度与自由度可能非常不匹配。
— 《有效自由度:一个有缺陷的比喻》,2013年。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
论文
- 深度神经网络中的自由度, 2016.
- 有效自由度:一个有缺陷的比喻, 2013.
书籍
文章
总结
在本篇博文中,您了解了统计学和机器学习中的自由度。
具体来说,你学到了:
- 自由度通常代表一个系统的控制点数。
- 在统计学中,自由度是用于计算统计量的值的数量。
- 在机器学习中,自由度是模型参数的数量。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
Jason,您好,祝贺您的网站,我认为它对科学家、开发人员以及爱好者都非常有益。我想问您,如果我有一个只包含图像的数据集,您能否从中计算出自由度?提前感谢。
谢谢。
您对数据集或数据的自由度是什么意思?
自由度与模型相关,而不是与数据集或数据相关。
谢谢。
Jason,您好,我有一个想法,如果你有一个方程组,其中方程少于要计算的变量,那么你会有无限个可能的结果。因此,没有可行的解决方案。
在这篇文章中,我了解到如果你要估计的参数多于数据行数,你就会过拟合。但你仍然能够计算参数。
正如我所想,你这里谈论的是多次重复使用相同的数据,因此实际上有足够的数据来训练,但由于这一点而导致过拟合。我说得对吗?
请继续保持出色的工作!
也许可以。
感谢您的文章,Jason。我喜欢您的邮件和文章。继续保持良好的工作。
不客气!
Jason博士您好,
我想知道对于包含时间在内的多个参数的多变量数据集进行插值/预测的最佳方法是什么。
我最初的想法是使用 LSTM 并将其他参数与变量一起嵌入到“特征”中,但没有成功。
除了时间之外,多变量根据参数的性质是非线性的。
对于我应该使用的模型有什么建议吗?
最好的方法是测试一系列技术,找出最适合您特定数据集的方法。
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
Jason,您好,感谢您的文章。
请问,您能帮帮我吗?我需要拟合元模型。我正在使用均方根近似误差(RMSEA (ε) = sqrt(X^2-df)/df(N-1)),因为 ε 小于 0.05 的值通常被认为表示良好的拟合(Browne & Cudeck, 1993)。Browne and Cudeck (1993) 建议将 0.05 到 0.08 范围内的值解释为公平的模型拟合,而大于 0.10 的值则解释为较差的拟合。MacCallum et al. (1996) 建议 0.08 到 0.10 范围内的值表示中等拟合。
RMSEA 的公式需要(自由度 (df),在这种情况下如何计算 df?
谢谢。
Gicela,您好……请参阅我给您问题的电子邮件回复。
您好!我认为均值的自由度应该是观测数量,这意味着在上面的例子中应该有 50。因为计算均值不需要其他统计量,另一个原因是如果你有一个数据点,你可以说平均值就是那个单点。
Reeta,您好……以下资源提供了更详细的数学描述。
https://www.statisticshowto.com/probability-and-statistics/hypothesis-testing/degrees-of-freedom/