偏差方差分解Python示例
偏差方差分解是在机器学习中众所周知的归因损失的工具。通常,针对特定问题的模型误差与该模型的稳定性和该模型的拟合能力有关。我们称该模型的拟合能力为偏差,并称该模型的稳定性为方差。
偏差方差分解为确定模型性能不佳的根源提供了一种有效的方法,可以进一步有效地指导我们设计高质量的机器学习模型。
首先,我们应该认识到,偏差方差分解不是分解特定模型的单个误差值,而是着重于根据不同的训练数据分解一组机器学习模型的预期误差。例如,我们可以使用不同的训练数据子集构建十个不同的决策树。然后我们可以计算该算法的预期误差。然而,一个单一的值不能表明我们的方法是由于较差的拟合能力还是不稳定而导致性能不佳。此时,偏差方差分解提供了确定性能不佳根源的强大工具。
介绍了偏差方差分解的基本思想。接下来,我们用一份代码片段说明此方法。首先,我们使用波士顿房价预测数据集作为示例数据,然后将原始数据按1:1的比例分为训练集和测试集。
import numpy as np
from sklearn.datasets import load_boston
from sklearn.ensemble import BaggingRegressor, AdaBoostRegressor, GradientBoostingRegressor
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressorX, y = load_boston(return_X_y=True)
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
之后,我们需要定义分解函数。如下式所示,误差被分解为两个项,即偏差和方差。关于偏差,我们将其定义为预期预测值与实际值之差。至于方差,我们将其定义为期望的预测值与每个预测值之间的差异的期望。从直觉上讲,对于给定的误差项,我们可以将其归结为以下根源:模型无法准确描述潜在的生成过程(高偏差)或模型高度不稳定(高方差)。不言而喻的是,如果我们的模型具有很高的偏差,那么我们将有很高的误差。而就高方差而言,这种情况对应于模型对训练数据高度敏感的情况。
ED[{y(x;D)−h(x)}2]={ED[y(x;D)]−h(x)}2⏟(bias) 2+ED[{y(x;D)−ED[y(x;D)]}2]⏟variance \begin{array}{l} \mathbb{E}_{\mathcal{D}}\left[\{y(\mathbf{x} ; \mathcal{D})-h(\mathbf{x})\}^{2}\right] =\underbrace{\left\{\mathbb{E}_{\mathcal{D}}[y(\mathbf{x} ; \mathcal{D})]-h(\mathbf{x})\right\}^{2}}_{\text {(bias) }^{2}}+\underbrace{\mathbb{E}_{\mathcal{D}}\left[\left\{y(\mathbf{x} ; \mathcal{D})-\mathbb{E}_{\mathcal{D}}[y(\mathbf{x} ; \mathcal{D})]\right\}^{2}\right]}_{\text {variance }} \end{array} ED[{y(x;D)−h(x)}2]=(bias) 2{ED[y(x;D)]−h(x)}2+variance ED[{y(x;D)−ED[y(x;D)]}2]
需要指出的一个陷阱是,偏差和方差只是表示拟合能力和稳定性的两个机器学习算法指标。过去,人们认为偏差和方差与模型的复杂性高度相关。模型越复杂,方差越大。但是,近年来的研究表明,过度参数化的模型可能会同时导致较低的偏差和方差,这与普遍的看法背道而驰。总而言之,我们不能将模型的复杂性与偏差和方差视为大致等同。
def bias_variance_decomposition(regr):print(regr)y_pred = []for i in range(200):sample_indices = np.arange(x_train.shape[0])bootstrap_indices = np.random.choice(sample_indices,size=sample_indices.shape[0],replace=True)regr.fit(x_train[bootstrap_indices], y_train[bootstrap_indices])y_pred.append(regr.predict(x_test))y_pred = np.array(y_pred)bias = (np.mean(y_pred, axis=0) - y_test) ** 2variance = np.mean((y_pred - np.mean(y_pred, axis=0)) ** 2, axis=0)error = np.mean((y_pred - y_test) ** 2, axis=0)print(np.mean(error), np.mean(bias), np.mean(variance))
最后,我们将偏差方差分解应用于一些经典的机器学习算法,并计划寻找这些机器学习算法的错误根源。我们选择了两种经典算法,决策树和线性回归。
首先,在计算了决策树和线性回归的相关损失项之后。我们发现,尽管决策树和线性回归中的预期误差相似,但线性回归中的大多数误差源自偏差,而决策树中的大多数误差源自方差。根据观察结果,我们可以推测,通过减少方差可以减少决策树的误差。因此,我们尝试使用集成方法来减少方差。随后,我们发现这种方法确实是有效的。此外,从分解误差的结果,我们发现减少的误差可以归因于方差的减少而不是偏差。
for regr in [LinearRegression(), DecisionTreeRegressor(), BaggingRegressor(DecisionTreeRegressor(),n_estimators=10)]:bias_variance_decomposition(regr)
LinearRegression()
27.14027220569435 25.308338535726147 1.8319336699682045
DecisionTreeRegressor()
27.753457114624506 15.438913619565204 12.314543495059288
BaggingRegressor(base_estimator=DecisionTreeRegressor())
19.92063215612648 16.614601149357714 3.3060310067687744
总之,在本文中,我们提供一个示例来说明机器学习领域中的偏差方差分解。我们发现,在类似的测试误差的情况下,该错误的根源仍然可能存在很多可能性。因此,当我们需要提高算法性能时,将误差分解为偏差和方差是一种有效提高模型性能的明智方法。
偏差方差分解Python示例相关推荐
- 机器学习之过拟合与欠拟合以及偏差-方差分解
1.过拟合 所谓过拟合就是:把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致训练出的模型其泛化能力降低,这就是过拟合. 如何解决? 1)Early stopping Earl ...
- 【机器学习-西瓜书】二、偏差-方差分解;泛化误差
2.5偏差与方差 关键词:偏差-方差分解:泛化误差 . 偏差-方差分解是解释算法泛化性能的一种重要工具.偏差-方差分解试图对学习算法的期望泛化错误率进行拆解. 泛化误差可分解为:偏差,方差与噪声之和. ...
- 偏差-方差分解,学习和验证曲线评估模型
偏差-方差分解 参考链接:https://www.zhihu.com/question/20448464 https://blog.csdn.net/simple_the_best/article/d ...
- 偏差-方差分解 Bias-Variance Decomposition(转载)
转载自http://www.cnblogs.com/jmp0xf/archive/2013/05/14/Bias-Variance_Decomposition.html 完全退化了,不会分解,看到别人 ...
- python 方差分解_干货 :教你用Python来计算偏差-方差权衡
原标题:干货 :教你用Python来计算偏差-方差权衡 作者:Jason Brownlee 翻译:吴振东 本文约3800字,建议阅读8分钟. 本文为你讲解模型偏差.方差和偏差-方差权衡的定义及联系,并 ...
- 独家 | 教你用Python来计算偏差-方差权衡
作者:Jason Brownlee 翻译:吴振东 校对:车前子 本文约3800字,建议阅读8分钟. 本文为你讲解模型偏差.方差和偏差-方差权衡的定义及联系,并教你用Python来计算. 衡量一个机器学 ...
- python算方差_干货 :教你用Python来计算偏差-方差权衡
作者:Jason Brownlee 翻译:吴振东 本文约3800字,建议阅读8分钟.本文为你讲解模型偏差.方差和偏差-方差权衡的定义及联系,并教你用Python来计算. 衡量一个机器学习模型的性能,可 ...
- 机器学习偏差方差_机器学习101 —偏差方差难题
机器学习偏差方差 Determining the performance of our model is one of the most crucial steps in the machine le ...
- 误差模型:过拟合,交叉验证,偏差-方差权衡
from: http://www.voidcn.com/blog/Mark_LQ/article/p-5983585.html Introduction In this post you will g ...
- 机器学习面试之偏差方差
正文共2826个字,预计阅读时间8分钟. 在机器学习的面试中,能不能讲清楚偏差方差,经常被用来考察面试者的理论基础.偏差方差看似很简单,但真要彻底地说明白,却有一定难度.比如,为什么KNN算法在增大k ...
最新文章
- java jsp js xml_jsp实现将信息放入xml中的方法
- jdk 9和jdk8_了解有关JDK9紧凑弦乐的信息(视频评论Charlie Hunt)
- cortex-m0 专为支持OS的四个功能设计
- java 递增 实现_Java编程实现递增排序链表的合并
- FISCO BCOS(十一)——— FISCO BCOS如何查看账户
- 惯性导航讲解(概念以及主要部件的讲解)
- xml配置service服务器文件路径,xml配置service服务器文件路径
- IPCAS1.2.11安装步骤
- Sort exceeded memory limit of 104857600 bytes 解决方案
- JavaScript 销毁对象
- HtmlHelp调用chm帮助文档使用
- 计算机加密技术图片,基于Henon映射的图像加密技术
- 笔记本加固态小白怎么设置
- java8的option避免NullPoint异常
- (Note)神经网络中的特征融合方式(add/concate)
- SitePoint播客#70:青年,企业和播客
- openlayers 计算绘制的矢量多边形的面积 (getArea方法)
- nCode:GlyphWorks案例教程一
- Dungeon Master 三维BFS
- 问道手游-0基础架设教程