从线性回归看偏差-方差分解(Bias-Variance Decomposition)

部署运行你感兴趣的模型镜像

转载请注明出处:http://blog.youkuaiyun.com/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
公众号:搜索与推荐Wiki

个人网站:http://thinkgamer.github.io


概述

对于数字序列1,3,5,7,?,正常情况下大家脑海里蹦出的是9,但是217314也是其一个解
9对应的数学公式为
f ( x ) = 2 x − 1 f(x)=2x-1 f(x)=2x1
217314对应的数学公式为
f ( x ) = 18111 2 x 4 − 90555 x 3 + 633885 2 x 2 − 452773 x + 217331 f(x)=\frac{18111}{2} x^{4}-90555x^{3}+\frac{633885}{2}x^{2}-452773x+217331 f(x)=218111x490555x3+2633885x2452773x+217331
Python 实现为:

>>> def f(x):
...     return 18111/2 * pow(x,4) -90555 * pow(x,3) + 633885/2 * pow(x,2) -452773 * x +217331
... 
>>> f(1)
1.0
>>> f(2)
3.0
>>> f(3)
5.0
>>> f(4)
7.0
>>> f(5)
217341.0

当机器学习模型进行预测的时候,通常都需要把握一个非常微妙的平衡,一方面我们希望模型能够匹配更多的训练数据,相应的增加其复杂度,否则会丢失相关特征的趋势(即模型过拟合);但是另一方面,我们又不想让模型过分的匹配训练数据,相应的舍弃部分复杂的,因为这样存在过度解析所有异常值和伪规律的风险,导致模型的泛化能力差(即模型欠拟合)。因此在模型的拟合能力和复杂度之前取得一个比较好的权衡,对于一个模型来讲十分重要。而偏差-方差分解(Bias-Variance Decomposition)就是用来指导和分析这种情况的工具。

偏差和方差定义

  • 偏差(Bias):即预测数据偏离真实数据的情况。
  • 方差(Variance):描述的是随机变量的离散程度,即随机变量在其期望值附近的波动程度。

偏差-方差推导过程

以回归问题为例,假设样本的真实分布为p_r(x,y),并采用平方损失函数,模型f(x)的期望错误为(公式2.1):
R ( f ) = E ( x , y ) ∼ p r ( x , y ) [ ( y − f ( x ) ) 2 ] R(f) = E_{(x,y)\sim p_r{(x,y)}} \left [ (y-f(x))^2 \right ] R(f)=E(x,y)pr(x,y)[(yf(x))2]
那么最优模型为(公式2.2):
f ∗ ( x ) = E y ∼ p r ( y ∣ x ) [ y ] f^*(x) = E_{y\sim p_r{(y|x)}} \left [ y \right ] f(x)=Eypr(yx)[y]
其中p_r(y|x)为真实的样本分布,f^*(x)为使用平方损失作为优化目标的最优模型,其损失为(公式2.3):
ε = E ( x , y ) ∼ p r ( x , y ) [ ( y − f ∗ ( x ) ) 2 ] \varepsilon = E_{(x,y)\sim p_r{(x,y)}} \left [ (y-f^*(x))^2 \right ] ε=E(x,y)pr(x,y)[(yf(x))2]
损失
ε \varepsilon ε
通常是由于样本分布及其噪声引起的,无法通过优化模型来减少。
期望错误可以分解为(公式2.4):
R ( f ) R(f) R(f)
= E ( x , y ) ∼ p r ( x , y ) [ ( y − f ∗ ( x ) + f ∗ ( x ) − f ( x ) ) 2 ] = E_{(x,y)\sim p_r{(x,y)}} \left [ (y- f^*(x) + f^*(x) -f(x))^2 \right ] =E(x,y)pr(x,y)[(yf(x)+f(x)f(x))2]
= E x ∼ p r ( x ) [ ( f ( x ) − f ∗ ( x ) ) 2 ] + ε = E_{x\sim p_r{(x)}}\left [ (f(x) - f^*(x))^2 \right ] + \varepsilon =Expr(x)[(f(x)f(x))2]+ε
公式2.4中的第一项是机器学习可以优化的真实目标,是当前模型和最优模型之间的差距。

在实际训练一个模型f(x)时,训练集D是从真实分布p_r(x,y)上独立同分布的采样出来的有限样本集合。不同的训练集会得到不同的模型。令f_D(x)表示在训练集D上学习到的模型,一个机器学习算法(包括模型和优化算法)的能力可以通过模型在不同训练集上的平均性能来体现。

对于单个样本x,不同训练集D得到的模型f_D(x)和最优模型f^*(x)的上的期望差距为(公式2.5):
E D [ ( f D ( x ) − f ∗ ( x ) ) 2 ] E_D[( f_D(x)-f^*(x) )^2] ED[(fD(x)f(x))2]
= E D [ ( f D ( x ) − E D [ f D ( x ) ] + E D [ f D ( x ) ] − f ∗ ( x ) ) 2 ] =E_D\left [ ( f_D(x) - E_D[f_D(x)] +E_D[f_D(x)] -f^*(x) )^2 \right ] =ED[(fD(x)ED[fD(x)]+ED[fD(x)]f(x))2]
= ( E D [ f D ( x ) ] − f ∗ ( x ) ) 2 ) + E D [ ( f D ( x ) − E D [ f D ( x ) ] ) 2 ] =( E_D[f_D(x)] -f^*(x) )^2 ) + E_D[(f_D(x) - E_D[f_D(x)] )^2] =(ED[fD(x)]f(x))2)+ED[(fD(x)ED[fD(x)])2]
公式2.5最后一行中的第一项为偏差(bias),是指一个模型在不同训练集上的平均性能和与最优模型的差异,偏差可以用来衡量一个模型的拟合能力;第二项是方差(variance),是指一个模型在不同训练集上的差异,可以用来衡量一个模型是否容易过拟合。

集合公式2.4和公式2.5,期望错误可以分解为(公式2.6):
R ( f ) = ( b i a s ) 2 + v a r i a n c e + ε R(f)= (bias)^2 + variance + \varepsilon R(f)=(bias)2+variance+ε
其中
( b i a s ) 2 = E X [ E D [ f D ( x ) ] − f ∗ ( x ) ) 2 ] (bias)^2 = E_X[E_D[f_D(x)] -f^*(x) )^2 ] (bias)2=EX[ED[fD(x)]f(x))2]
v a r i a n c e = E X [ E D [ ( f D ( x ) − E D [ f D ( x ) ] ) 2 ] ] variance = E_X [ E_D[(f_D(x) - E_D[f_D(x)] )^2] ] variance=EX[ED[(fD(x)ED[fD(x)])2]]
最小化期望错误等价于最小化偏差和方差之和。

偏差和方差分析

在这里插入图片描述
上图为机器学习中偏差和方差的四种不同情况。每个图的中心点为最优模型f*(x),蓝点为不同训练集D 上得到的模型f_D(x)。

  • (a)给出了一种理想情况,方差和偏差都比较小
  • (b)为高偏差低方差的情况,表示模型的泛化能力很好,但拟合能力不足
  • ©为低偏差高方差的情况,表示模型的拟合能力很好,但泛化能力比较差。当训练数据比较少时会导致过拟合
  • (d)为高偏差高方差的情况,是一种最差的情况

方差一般会随着训练样本的增加而减少。当样本比较多时,方差比较少,我们可以选择能力强的模型来减少偏差。然而在很多机器学习任务上,训练集上往往都比较有限,最优的偏差和最优的方差就无法兼顾。

随着模型复杂度的增加,模型的拟合能力变强,偏差减少而方差增大,从而导致过拟合。以结构错误最小化为例,我们可以调整正则化系数λ来控制模型的复杂度。当λ变大时,模型复杂度会降低,可以有效地减少方差,避免过拟合,但偏差会上升。当λ过大时,总的期望错误反而会上升。因此,正则化系数λ需要在偏差和方差之间取得比较好的平衡。下图给出了机器学习模型的期望错误、偏差和方差随复杂度的变化情况。最优的模型并不一定是偏差曲线和方差曲线的交点。

在这里插入图片描述
偏差和方差分解给机器学习模型提供了一种分析途径,但在实际操作中难以直接衡量。一般来说,当一个模型在训练集上的错误率比较高时,说明模型的拟合能力不够,偏差比较高。这种情况可以增加数据特征、提高模型复杂度,减少正则化系数等操作来改进模型。当模型在训练集上的错误率比较低,但验证集上的错误率比较高时,说明模型过拟合,方差比较高。这种情况可以通过降低模型复杂度,加大正则化系数,引入先验等方法来缓解。此外,还有一种有效的降低方差的方法为集成模型,即通过多个高方差模型的平均来降低方差。


【技术服务】,详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!


您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Bias-Variance Decomposition 的概念 在机器学习领域,模型误差可以被分解为三个主要部分:偏差bias)、方差variance)以及不可约误差(irreducible error)。这种分解方法有助于理解模型性能的局限性和优化方向。 #### 偏差Bias偏差衡量的是模型预测值与真实值之间的差异程度。高偏差通常意味着模型过于简单,无法捕捉数据的真实模式,从而导致欠拟合现象[^1]。例如,在线性回归中,如果实际关系是非线性的,则即使增加训练时间也无法显著改善模型表现。 #### 方差Variance方差反映的是当使用不同训练集时,模型参数变化的程度。高方差表明模型对特定训练样本过度敏感,容易过拟合到噪声上而不是泛化至未见数据[^2]。理想情况下,一个好的模型应该具有较低的方差以便更好地推广到新实例上去。 #### 不可约误差(Irreducible Error) 这部分是由随机因素引起的固有不确定性所造成的错误率底线;无论怎样改进算法都无法消除它因为这取决于问题本身特性而非建模过程中的决策失误所致[^3]. ### 应用于机器学习实践当中 为了实现最佳平衡状态即最小总损失函数E[L], 我们需要找到适当复杂度水平下的假设空间H*使得两者兼顾良好 - 即既不过于简化以至于忽略掉重要特征也不至于过分精细以至于捕获到了无意义的变化趋势.[^4] 通过调整正则项系数λ来控制权重衰减力度进而影响上述两方面权衡比例便成为了一种常见手段之一. ```python from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error import numpy as np def bias_variance_tradeoff(X, y): X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2) model_complexities = range(1, 10) # Example complexity levels training_errors = [] validation_errors = [] for degree in model_complexities: poly_features = PolynomialFeatures(degree=degree) X_poly_train = poly_features.fit_transform(X_train.reshape(-1, 1)) lin_reg = LinearRegression() lin_reg.fit(X_poly_train, y_train) X_poly_val = poly_features.transform(X_val.reshape(-1, 1)) y_pred_train = lin_reg.predict(X_poly_train) y_pred_val = lin_reg.predict(X_poly_val) mse_train = mean_squared_error(y_train, y_pred_train) mse_val = mean_squared_error(y_val, y_pred_val) training_errors.append(mse_train) validation_errors.append(mse_val) return model_complexities, training_errors, validation_errors # Plotting code omitted here but would involve matplotlib or similar library. ``` 此脚本展示了如何评估多项式回归的不同阶数对于给定数据集的影响,并绘制相应的训练和验证误差曲线图以直观展示偏倚—变异权衡情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值