news 2026/8/7 12:18:58

偏差和方差如何影响你的模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
偏差和方差如何影响你的模型

原文:towardsdatascience.com/how-bias-and-variance-affect-your-model-a03b1c3dd6d1


引言

自从我开始转向数据科学以来,我就听说过著名的偏差与方差权衡

但我学得足够多,可以继续我的学习,并且从未回头过多。我始终知道,一个高度偏颇的模型欠拟合数据,而一个高方差模型是过拟合,而且这些在训练机器学习模型时都不是好事情。

我也知道我们应该在这两种状态之间寻找平衡,这样我们就会有一个良好的拟合,或者一个能够很好地将模式推广到新数据的模型。

但我可能说我从未走得比那更远。我从未搜索或创建高度偏颇或高度变异的模型,只是为了看看它们实际上对数据做了什么,以及那些模型的预测是如何的。

当然,直到今天,因为这正是我们在这篇文章中要做的。让我们继续进行一些定义。

高偏差

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e31ef30ddc2b52587bab4efcd2473d6f.png

过度简化 = 用锤子砸任何东西 | Google Gemini, 2024.gemini.google.com

偏差是我们模型的预测与我们要预测的真实值之间的差异。一个高度偏颇的模型欠拟合数据,未能捕捉到潜在的模式。

具有高偏差的模型在训练数据和测试数据上表现都较差。

  • 模型行为:模型过度简化并错过了正确的关系。

  • 类比:想象一下一个学生过度简化主题,跳过重要细节,在所有地方都得到一致的低分。

  • 示例:遗漏关键信息,例如仅使用卧室数量预测房价,而忽略位置。

  • 模型预测示例:如果真实模式是每增加一个单位就加 1,那么一个高偏差模型可能会总是加 0.5,或者更糟,根本不加任何东西,完全忽略输入。

让我们通过代码示例来看看。

# Importsimportnumpyasnpimportmatplotlib.pyplotasplt# Generating high bias datax=np.linspace(0,10,50)y=2*np.sin(x)# Plotplt.scatter(x,y,label="True Nonlinear Data")plt.plot(x,0.5*x,color='g',label="High Bias Linear Model")plt.legend()plt.show()

这就是一个高度偏颇的模型的样子。我们试图将线性回归拟合到非线性数据。我们过度简化了模式,试图让一条线拟合到曲线上。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/45783ef3fa1581a0f1c76663393715ce.png

高偏差模型:试图用线拟合曲线

如果我们再向前一步,创建一个线性回归模型,然后进行一些预测,我们就会看到会发生什么。

fromsklearn.linear_modelimportLinearRegressionimportpandasaspd# Fitlm=LinearRegression().fit(x.reshape(-1,1),y)# Predictpreds=lm.predict(x.reshape(-1,1))# Performance(pd.DataFrame({'Actual':y,'Predicted':preds,'Difference %':(y-preds)/y}).head(10).T)

看看预测有多离谱。模型无法识别这些数据中的模式。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/640a17e40e46ff2bcc68b5e993d33bd5.png

高度偏颇模型的预测

现在是时候理解具有高方差的模型了。

高方差

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7bee54001e12d71fd96925713cb99ca6.png

基于数据微小波动的不可预测结果 | Google Gemini, 2024.

方差是模型对不同的训练数据集预测的变异性。**它衡量的是如果训练数据发生变化,预测会改变多少。**高方差模型过度拟合了训练数据,捕捉到了噪声而不是一般模式。

一个高方差模型在训练数据上表现良好,但在未见过的数据上表现较差。

  • 模型行为:模型对训练数据过于敏感,过度拟合。高方差表明模型过于复杂,过度拟合了数据。

  • 类比:就像一个学生只记答案而不理解概念,在练习中表现很好,但在实际测试中表现不佳。

  • 示例:捕捉了太多的噪声,比如试图预测股市,但错误地将随机波动视为趋势。

  • 模型预测示例:如果真实模式是每增加一个单位就加 1,一个高方差模型可能会学习到加100,或者基于数据的微小波动而得出不可预测的值。

现在让我们编写一个示例代码。

# Importsimportnumpyasnpimportmatplotlib.pyplotasplt# Generating high variance datax=np.linspace(0,10,50)y=2*np.sin(x)+np.random.normal(0,2,len(x))# Adding noise# Plotplt.scatter(x,y,label="High Variance Data")plt.plot(x,2*np.sin(x),color='r',label="True Pattern")plt.legend()plt.show()

具有高方差的模型非常嘈杂。注意噪声数据如何显著地围绕真实曲线波动,这使得模型在没有过度拟合的情况下学习正确的关联关系变得具有挑战性。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/69d1f6c318563f5e6c28a4277d23ed65.png

高方差模型:噪声数据在真实曲线周围显著波动。

让我们创建一个决策树模型,它因过度拟合而非常著名,并评估高方差模型的行为。

fromsklearn.treeimportDecisionTreeRegressorfromsklearn.model_selectionimporttrain_test_split# Generate high variance datanp.random.seed(42)x=np.linspace(0,10,100).reshape(-1,1)y_true=2*np.sin(x).ravel()y_high_variance=y_true+np.random.normal(0,3,len(x))# Adding noise# Split data into training and testing setsx_train,x_test,y_train,y_test=train_test_split(x,y_high_variance,test_size=0.2,random_state=42)# Fit a decision tree regressor (high variance model due to overfitting)tree_high_variance=DecisionTreeRegressor(max_depth=None,random_state=42)# No depth limit increases variancetree_high_variance.fit(x_train,y_train)# Predict using the modelx_range=np.linspace(0,10,300).reshape(-1,1)# Fine range for smooth predictionsy_pred=tree_high_variance.predict(x_range)# Plot the data and model predictionsplt.figure(figsize=(10,6))plt.scatter(x_train,y_train,color='blue',label='Training Data',alpha=0.7)plt.scatter(x_test,y_test,color='green',label='Test Data',alpha=0.7,marker='x')plt.plot(x_range,y_pred,color='orange',label='High Variance Model Predictions',linewidth=2)plt.plot(x,y_true,color='red',label='True Pattern',linewidth=2,linestyle='--')plt.title("High Variance Model with Decision Tree")plt.xlabel("X")plt.ylabel("Y")plt.legend()plt.show()

结果将在下面显示。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/12d653a76a5f9b1994e53e4fac4c18bb.png

高方差模型:过度拟合训练数据;在测试数据上表现不佳。

我们在之前的图片中看到数据过度拟合了训练数据,但在测试数据上表现不佳。让我们看看数字。

# Predictions Train settrain_preds=tree_high_variance.predict(x_train)(pd.DataFrame({'Actual':y_train,'Predicted':train_preds,'Difference %':100*(y_train-train_preds)/y_train}).head(10).T)# Predictions test setpreds=tree_high_variance.predict(x_test)(pd.DataFrame({'Actual':y_test,'Predicted':preds,'Difference %':100*(y_test-preds)/y_test}).head(10).T)

如预期的那样,在训练集上的结果完全过度拟合。模型的准确率为 100%。

但它无法泛化模式,在测试集上的表现不佳。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/26cf69c9b2b81b05a9e490af501fceaf.png

折衷

为了解决这些问题,想法是找到一个在过于简单和过于复杂的模型之间的平衡点。

增加模型复杂性可以减少偏差,使模型更接近训练数据,但会增加方差,使模型对噪声更敏感。另一方面,简化模型可以减少方差,使模型对噪声的敏感性降低,并增加偏差,可能会错过真实模式。

类比

偏差视为一个刚性的系统(如直尺)和方差视为一个灵活的系统(可弯曲的直尺)。

  • 刚硬的尺子无法捕捉曲线(高偏差)。

  • 弹性的尺子可能会因为微小的缺陷而弯曲过多,从而过于复杂化形状(高方差)。

理想的工具是那种平衡刚性和灵活性,以表示真实形状(数据中的模式)的工具。

在实践中

在实际操作中,我们可以做些什么来平衡这种权衡?

高偏差模型

  • 使用更复杂的算法

  • 交叉验证

  • 特征工程

  • 添加非线性项

  • 微调超参数

  • 使用提升集成方法(XGB、梯度提升),因为它通过迭代纠正错误来减少偏差。

高方差模型

  • 简化模型

  • 交叉验证

  • 添加正则化

  • 使用 Bagging **** 集成方法(随机森林),因为它通过平均预测来减少方差。

在你离开之前

这篇概念性文章对我们深入理解数据科学中这个重要主题至关重要。了解偏差与方差权衡是什么以及每种类型如何影响建模,是使我们能够相应地采取纠正措施的有价值知识。

每个建模决策——比如选择算法、正则化和超参数调整——都隐含着旨在平衡偏差方差以最小化总误差的目标。这种平衡对于构建稳健和可泛化的机器学习模型至关重要。

**注意:**除非另有说明,所有图片均为作者所有。

跟随我 & 联系方式

如果你喜欢这个内容,请关注我的博客或通过社交媒体与我联系。你可以在我的网站上了解更多关于我的工作。

Gustavo R Santos

Gustavo R Santos – Medium

参考文献

理解偏差-方差权衡

偏差-方差权衡 – 机器学习 – GeeksforGeeks

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 5:04:59

Kotaemon能否生成SQL查询?数据库交互辅助功能

Kotaemon能否生成SQL查询?数据库交互辅助功能 在企业数据爆炸式增长的今天,一个销售经理想快速知道“上个季度华东区销售额最高的产品是什么”,却不得不等待IT部门排期开发报表——这种场景几乎每天都在发生。信息获取的延迟,正在…

作者头像 李华
网站建设 2026/8/6 12:27:06

使用Kotaemon降低大模型推理成本的三种方法

使用Kotaemon降低大模型推理成本的三种方法 在当前大语言模型(LLM)广泛应用的背景下,企业对智能客服、知识问答和自动化助手的需求持续增长。然而,随着调用量上升,高昂的推理成本逐渐成为制约落地的核心瓶颈——尤其是…

作者头像 李华
网站建设 2026/8/7 10:38:17

Kotaemon能否用于酒店预订问答?旅游行业应用测试

Kotaemon能否用于酒店预订问答?旅游行业应用测试 在智能客服逐渐取代传统人工坐席的今天,用户已经不再满足于“关键词匹配固定回复”的机械式交互。尤其是在旅游和酒店行业,一个典型的咨询可能涉及多轮对话、动态数据查询、个性化偏好甚至跨平…

作者头像 李华
网站建设 2026/8/6 9:43:11

9、Windows PowerShell实用技巧与文件系统管理

Windows PowerShell实用技巧与文件系统管理 1. SCVMM与WPS命令 SCVMM完全基于WPS命令,因此SCVMM的所有操作都可以通过命令或脚本执行。以下是一些常用命令: - New-VirtualNetworkAdapter - New-VirtualDVDDrive - New-HardwareProfile - Get-VirtualHardDisk - Add-Vi…

作者头像 李华
网站建设 2026/8/7 9:05:23

15、活动目录中的用户、组管理与搜索指南

活动目录中的用户、组管理与搜索指南 在管理活动目录时,WPS 1.0 没有提供用于目录服务管理的命令行工具,WMI 在这方面也没有太大帮助。不过,可以使用 Active Directory Service Interface (ADSI) 及其基于 .NET 的 API System.DirectoryServices 来访问基于 LDAP 和非 LDAP…

作者头像 李华
网站建设 2026/8/6 17:28:37

18、数据缓存与Windows安全设置操作指南

数据缓存与Windows安全设置操作指南 1. DataSet作为离线数据缓存 DataSet可作为断开连接的离线数据缓存,与DataReader不同,它允许更改数据,并通过数据适配器将更改写回数据库。不过,每次使用DataSet时都需要执行一些步骤,而使用www.IT - Visions.de PowerShell扩展库可以…

作者头像 李华