机器学习入门:偏差和方差

简介: 机器学习入门:偏差和方差

偏差(bias):偏差衡量了模型的预测值与实际值之间的偏离关系。

方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况)

我们这里以线性回归为例进行介绍

线性回归是一种机器学习算法,它主要用来预测定量目标。该算法根据线性方式建模的自变量来拟合包含预测数据点的直线或平面(或超平面)。首先,让我们把这看作是最佳拟合线(为了更好地理解)。通常情况下,训练集中的数据点并不是全部都在最佳拟合线上,这是非常有意义的,因为任何数据都不是完美的。这也就是为什么我们首先要做预测,而不是随便画一条线的原因。

640.png

理解偏差

640.png

利用线性回归算法得到的线不能为了包含所有的训练集数据点就过于弯曲,因此有时无法捕捉到准确的关系。这叫做偏差。在数学上,在线性回归方程中得到的截距是偏差。

我为什么这么说?

让我解释一下:这是一个随机线性回归方程:

y = Intercept + Slope1*x1 + Slope2*x2

目标(y)在数据集中会有一些值,利用上面的公式可以计算出目标(y)的预测值。如果“截距”本身非常高并且很接近预测的y值,那么这就意味着方程另外两部分——自变量(x1和x2)的变化导致y的变化会很小。这意味着x1和x2所产生的方差值会很小,最终这将会导致建立一个欠拟合模型。欠拟合模型具有较低的R-squared(由自变量引起的目标方差量)。

欠拟合也可以通过首先考虑如何捕捉最佳拟合线/平面来理解。最佳拟合直线/平面捕捉目标和自变量之间的关系。如果这种关系被捕捉到一个非常高的范围,它会导致低偏差,反之亦然。

既然我们了解了什么是偏差,以及高偏差是如何导致欠拟合模型的,那么对于一个健壮的模型,我们需要消除这种欠拟合。

在这样一个场景中,我们创建了一条通过所有数据点的曲线,并且可以显示自变量和因变量之间的现有关系,那么模型中就不会存在偏差。

理解方差

640.png

对训练数据过度拟合的模型将导致一种新的现象,称为“方差”。现在来考虑几个模型:

模型1:高偏差(无法正确捕捉关系)

模型2:低偏差(在很大程度上捕捉关系)

验证模型时的误差测量:

Error = Actual Values Predicted Values

在计算训练数据(图中还没有测试数据)的误差时,我们观察到:

模型1:在训练数据上对模型进行验证,结果表明误差较大

模型2:在训练数据上对模型进行验证,结果表明误差较小

现在,让我们引入训练数据,来理解方差。

如果模型在训练数据是过拟合的,那么该模型“理解”和“认识”训练数据的程度就会非常高,以至于它可能不利于对测试数据进行测试。因此当将测试数据用作该模型的输入时,它将无法捕捉到一种关系。从更广泛的角度来看,这意味着训练数据和测试数据之间的拟合有很大的差异(因为在训练数据上展示了完美的验证,而在测试数据却无法捕捉关系)。这种拟合差异被称为“方差”,这种现象产生的原因是模型只能理解训练数据,它对任何新的输入数据不能很好地进行预测。

在测试数据上验证上述模型时,我们注意到:

模型1:这里也没有正确地捕捉到关系,但是在训练数据和测试数据之间没有巨大的理解差距,所以方差很低

模型2:训练数据和试验数据之间存在巨大的理解差距,因此方差很大

偏差和方差之间的权衡

640.png

现在我们知道偏差和方差都会给我们的预测模型带来问题。那么我们该如何着手解决这个问题呢?

在我们继续之前,有几个术语需要理解:

过度拟合:低偏差和高可变性-模型非常适合训练数据,但是不适合测试数据,因为它只能很好地理解训练数据

欠拟合:高偏差和低可变性-模型在使用训练数据时无法捕捉关系,但由于它无论如何都没有捕捉到关系,因此训练数据和测试数据之间的理解差距不大,因此方差较小

回到解决方案,我们可以做以下工作,尝试在偏差和方差之间建立一种平衡:


1. 交叉验证

640.png

通常,一个模型是建立在训练数据上,并在相同的数据上进行测试。但还有一件事是人们更喜欢去做的,那就是在训练数据的一部分数据上测试模型,这部分数据称为验证数据。

那么,什么是交叉验证?

如前所述,模型验证是对部分训练数据进行的。因此,如果我们每次迭代都从训练数据中选择一组新的数据点来进行验证,并对从这些数据集获得的结果求平均值,那么我们就是在进行交叉验证。这是一种优化方法,主要用来了解模型在训练数据上的行为,同时它也是一种了解是否存在过拟合的方法。

交叉验证的类型:

K- fold CV:这里的K表示我们需要将我们的训练数据集分解成的集合的个数,然后用这K个集合进行模型验证,对这K个集合得到的结果取平均值,从而得到一个最终的结果,这可能会避免过拟合。

Leave-One-Out CV:Leave-One-Out CV的工作原理类似于K-Fold CV,但它将流程提升到了一个新的高度,因为它使用训练数据中的每一个数据点来计算交叉验证结果。这显然很耗时,但绝对有助于避免过度拟合。

前向链接:在处理时间序列数据时,K-Fold-CV和Leave-One-Out-CV会产生问题,因为某些年份的数据很可能会有其他年份没有的模式,因此使用随机数据集进行交叉验证是没有意义的。事实上,现有的趋势有可能被忽视,这并不是我们想要的。因此,在这种情况下,通常使用前向链接方法,其中我们形成的每个折叠(用于交叉验证)包含一个训练集组,通过将连续一年的数据与上一个训练集组相加并在测试集上进行验证(该测试集只包含训练组中使用的连续年份到最近一年的数据)。

2. 正则化

640.png

正则化是一种技术,它通过附加在模型自变量上的β惩罚系数来减少偏差和方差。

总结

没有完美的模型。必须用积极的方式利用模型不完美的地方,才能使它变得完美。一旦你能够识别出你的模型中存在的偏差或可变性,你就可以做很多事情来改变它。您也可以尝试特征选择和特征转换。您可以尝试删除一些过拟合变量。基于当时的可能性,可以做出决定,如果有可能的话,这个模型肯定会得到改进。

感谢您的阅读!学习快乐!

目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
24 2
|
14天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
24 1
|
26天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
18 1
|
27天前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
232 3
|
27天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
47 2
|
1月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
23 4
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
377 1
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(六):分类模型评估方法
机器学习入门(六):分类模型评估方法
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理