推荐 :浅析机器学习中的自由度

作者:Jason Browniee 翻译:张若楠  校对:林鹤冲

本文长度为2800字,建议阅读8分钟

本文介绍了自由度的概念,以及如何判断统计学模型和机器学习模型中的自由度。

标签:数据处理

自由度是统计和工程学的重要概念,它通常用于总结在人们在计算样本统计或统计假设检验统计量时所使用的数据量。在机器学习中,自由度可以指模型中的参数数量,例如线性回归模型中的系数数量或深度学习神经网络中的权重数量。

其中值得关注的地方在于,如果机器学习模型中存在过多的自由度(即模型参数),那么这个模型将会过拟合训练集,这是统计学上的普遍认识。可以通过使用正则化技术来克服这种问题,比如正则化线性回归,以及深度学习神经网络模型中常用的各种正则化手段。

在本文中,你将进一步了解统计学和机器学习中的自由度。阅读这篇文章后,你会认识到:

  • 自由度通常表示一个模型系统的起控制作用的因子数。

  • 在统计学中,自由度是用于计算某个统计量的数据大小。

  • 在机器学习中,自由度是模型参数的数量。

让我们开始吧。

概览

本文分为以下三部分:

一、什么是自由度

二、统计学中的自由度

三、机器学习中的自由度

  1. 线性回归模型自由度

  2. 线性回归误差自由度

  3. 线性回归总自由度

  4. 负自由度

  5. 自由度与过拟合

自由度

 

自由度表示的是一个系统、模型或一个计算中的控制因子数。每个可以变换的独立参数都是d维空间中的一个维度,这个d维空间定义了可能影响系统的值的范围。某一个观测值或样本点就是该空间中的一个单独点。

在数学上,自由度通常用希腊字母ν表示,看起来像小写的“ v”。也可以缩写为“ d.o.f”、“ dof”、“ d.f.”,或直接写作“ df”。自由度是统计学和工程学中的术语,也通用于机器学习。

统计学中的自由度

 

在统计中,自由度是用于计算一个统计量时,所用的一系列数值中可以变换的个数。

自由度:大致来说,就是计算统计所需的最少数据量。实际上,它是一个或多个数字,来近似数据集中观测值的数量,从而确定统计显着性。

---《Statistics in Plain English》,2010年第三版P60

它的计算方法是:计算统计量时使用的独立值的数量减去所计算的统计量的个数,即:

自由度 = 独立值的数量 – 统计数量

例如我们有50个独立样本,希望计算样本的统计量,比如均值。我们在计算中使用了全部50个样本,并且只有一个统计量,因此在这种情况下,均值的自由度计算为:

自由度 = 独立值的数量–统计数量

自由度 = 50 – 1

自由度 = 49

自由度通常是数据分布和统计假设检验中需要重点考虑的因素。例如,通常有针对不同自由度查询临界值的表格(相比起直接计算统计数据,既简单又常用)。以上是统计学中的自由度,那么对于数据拟合的模型(例如在机器学习模型)又如何呢?

 

机器学习中的自由度

 

在预测建模中,自由度通常是指模型中从数据估计的参数数量。这可以涵盖模型的系数以及用于模型误差计算的数据。

理解这一点的最佳例子是线性回归模型。

 

线性回归模型中的自由度

 

下面考虑数据集中有两个输入变量的线性回归模型。对于每个输入变量,我们将在模型中给定一个系数,也就是说该模型将具有两个参数。

该模型如下所示,其中x1和x2是输入变量,beta1和beta2是模型参数。

yhat = x1 * beta1 + x2 * beta2

该线性回归模型具有两个自由度,因为它有两个参数必须从训练数据集中估计得到。在数据中再增加一列(增加一个输入变量)将为模型增加一个度自由度。

模型自由度 = 根据数据估算的参数数量

人们通常根据模型训练的参数数量来表达一个模型的复杂程度。例如,具有两个参数的线性回归模型的复杂度等于自由度,在这种情况下为2。相对于较高复杂度的模型,我们通常更喜欢较低复杂度的模型。简单的模型通常更有普适性。

自由度是对模型估计多少参数的解释,也是对线性回归模型的复杂度的衡量

— P71,应用预测建模 (2013)

 

线性回归误差的自由度

 

训练集的数据量很重要,并且会影响回归模型的总体自由度。

假设使用包含100个样本的训练集拟合线性回归模型的系数,通过最小化模型预测值与实际值之间的误差来拟合模型。考虑该模型的误差时,误差值对于模型训练集的每一个样本具有一个自由度,同时需要减去参数的个数。

在这种情况下,模型误差的参数个数为100减2,即98个自由度。

  • 误差自由度 = 样本数量 - 参数数量

  • 误差自由度 = 100 - 2

  • 误差自由度 = 98

在模型分析的报告中通常要提及线性模型的误差以及其误差自由度是有益的,或者至少可以汇报训练数据中的样本量,以便确定模型误差的自由度。

 

线性回归的总体自由度

 

线性回归模型的总体自由度就是模型自由度与模型误差自由度的和。

  • 线性回归自由度 = 模型自由度+模型误差自由度

  • 线性回归自由度 = 2 + 98

  • 线性回归自由度 = 100

通常,自由度等于用于训练集的样本量。现在仍然考虑一个包含100个样本的数据集,但是假设现在我们有70个输入变量。这意味着该模型现在有70个拟合的参数。因此,模型误差将为30 (100 –70 ) 自由度。

而模型的总自由度仍等于样本量,即70 + 30 = 100。

 

负自由度

 

当我们的数据集列多于行时会发生什么?

例如,我们可能有100行数据和10000个变量,例如100位患者的基因标记。这种情况下,线性回归模型将具有10000个参数,这意味着该模型将具有10000个自由度。

我们可以如下计算模型误差的自由度:

  • 模型误差的自由度 = 样本量 – 参数量

  • 模型误差自由度 = 100 – 10000

  • 模型误差自由度 = -9900

我们可以如下计算总自由度:

  • 线性回归自由度 = 模型自由度 + 模型误差自由度

  • 线性回归自由度 = 10000 + (–9900) 

  • 线性回归自由度 = 100

该模型仍具有100个总自由度,但是模型误差具有负的自由度。负自由度是有效的。这表明我们计算出的统计量多于我们有的变量。在这种情况下,模型中的参数要多于要训练集样本量。这就是所谓的p >> n,即参数远大于样本量。

 

自由度和过拟合

当我们的参数量比样本量大时,模型就存在过拟合训练集的风险。如果我们将模型中的每个系数都视为一个控制点就很容易理解。如果在模型中的控制点多于观察点,则理论上我们可以通过调参来百分百正确的预测实际值。过度学习训练集的细节,从而降低了准确预测新数据的性能,这就是过拟合的定义。

统计学家们普遍担忧深度学习神经网络模型容易过拟合。深度学习模型通常有比样本量更多的参数(模型权重)。如果按照我们对线性模型的理解,这是很可能过拟合的。然而,通过仔细选择模型架构和采用正则化技术,可以防止它们过度拟合并保持较低的误差。

此外,在深度模型中,有效自由度可以与模型中参数的数量分开讨论。

如我们所述,对于简单的分类模型,自由度等于模型中的参数数量。在深度网络中,自由度通常远小于模型中参数的数量,深度网络往往有较小的自由度。

---《深度神经网络的自由度》2016

因此,统计学家和机器学习从业人员开始倾向于不再使用自由度来表示模型复杂性,以及不用其并判断是否会过拟合。

对于大多数应用统计学家来说,拟合过程的自由度是其模型复杂度或对数据过拟合可能性的代名词。[…]而我们认为恰恰相反,模型的复杂性和自由度或许并没有很强的对应关系。

---《有效自由度:存在缺陷的指标》2013

 

总结

 

在本文中,你了解了统计和机器学习的自由度,要点如下:

  • 自由度通常表示一个系统中的控制点数。

  • 在统计中,自由度是用于计算统计量的样本个数。

  • 在机器学习中,自由度是模型参数的数量。

END


转自: 数据派THU 公众号

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP(传输控制协议)是一种面向连接的协议,用于在网络上可靠地传输数据。它提供了数据的可靠传输、流量控制和拥塞控制等功能,是互联网的核心协议之一。 在Node.js,使用内置的net模块可以轻松地创建TCP服务器和客户端。下面是一个简单的TCP服务器示例: ```javascript const net = require('net'); const server = net.createServer((socket) => { console.log('client connected'); socket.on('data', (data) => { console.log(`received data: ${data}`); socket.write(`echo: ${data}`); }); socket.on('close', () => { console.log('client disconnected'); }); }); server.listen(3000, () => { console.log('server started on port 3000'); }); ``` 这个服务器会监听本地的3000端口,当有客户端连接时,会打印出“client connected”的信息。当客户端发送数据时,服务器会收到这些数据并将其打印到控制台上,然后将“echo: ”加在数据前发送回客户端。当客户端断开连接时,服务器会打印“client disconnected”的信息。 下面是一个简单的TCP客户端示例: ```javascript const net = require('net'); const client = new net.Socket(); client.connect(3000, 'localhost', () => { console.log('connected to server'); client.write('hello, server'); }); client.on('data', (data) => { console.log(`received data: ${data}`); client.destroy(); }); client.on('close', () => { console.log('disconnected from server'); }); ``` 这个客户端会连接到本地的3000端口,并发送“hello, server”的消息。当客户端收到服务器的响应时,会打印出这些数据,并断开连接。 总的来说,TCP在网络通信扮演着非常重要的角色,Node.js内置的net模块提供了简单易用的TCP套接字接口,使得我们可以轻松地创建TCP服务器和客户端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值