python 方差分解_从线性回归看偏差-方差分解(Bias-Variance Decomposition)
打开微信扫一扫,关注微信公众号【数据与算法联盟】
概述
对于数字序列1,3,5,7,?,正常情况下大家脑海里蹦出的是9,但是217314也是其一个解
9对应的数学公式为
f(x)=2x−1f(x)=2x-1f(x)=2x−1
217314对应的数学公式为
f(x)=181112x4−90555x3+6338852x2−452773x+217331f(x)=\frac{18111}{2} x^{4}-90555x^{3}+\frac{633885}{2}x^{2}-452773x+217331f(x)=218111x4−90555x3+2633885x2−452773x+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)∼pr(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)[(y−f(x))2]
那么最优模型为(公式2.2):
f∗(x)=Ey∼pr(y∣x)[y]f^*(x) = E_{y\sim p_r{(y|x)}} \left [ y \right ]f∗(x)=Ey∼pr(y∣x)[y]
其中p_r(y|x)为真实的样本分布,f^*(x)为使用平方损失作为优化目标的最优模型,其损失为(公式2.3):
ε=E(x,y)∼pr(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)[(y−f∗(x))2]
损失
ε\varepsilonε
通常是由于样本分布及其噪声引起的,无法通过优化模型来减少。
期望错误可以分解为(公式2.4):
R(f)R(f)R(f)
=E(x,y)∼pr(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)[(y−f∗(x)+f∗(x)−f(x))2]
=Ex∼pr(x)[(f(x)−f∗(x))2]+ε= E_{x\sim p_r{(x)}}\left [ (f(x) - f^*(x))^2 \right ] + \varepsilon=Ex∼pr(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):
ED[(fD(x)−f∗(x))2]E_D[( f_D(x)-f^*(x) )^2]ED[(fD(x)−f∗(x))2]
=ED[(fD(x)−ED[fD(x)]+ED[fD(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]
=(ED[fD(x)]−f∗(x))2)+ED[(fD(x)−ED[fD(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)=(bias)2+variance+εR(f)= (bias)^2 + variance + \varepsilonR(f)=(bias)2+variance+ε
其中
(bias)2=EX[ED[fD(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]
variance=EX[ED[(fD(x)−ED[fD(x)])2]]variance = E_X [ E_D[(f_D(x) - E_D[f_D(x)] )^2] ]variance=EX[ED
python 方差分解_从线性回归看偏差-方差分解(Bias-Variance Decomposition)相关推荐
- python手把手入门_新手必看:手把手教你入门 Python
首先,Python是什么?据它的创始人Guido van Rossum而言, "Python是一种高级编程语言,它的核心设计思想是代码可读性和允许程序员用几行代码来表达观点的语法." ...
- 初中生学python教材推荐_推荐中学生看的几本书
<平凡的世界>路遥的 这值得看.这本书是我所遇到的不爱看书的或者爱看书的人都看过的书,且都认为好看的,当然我也这样认为的.原因嘛,最后自己看了后再看自己的感觉啦,不要先入为主,这是看书的原 ...
- python采集直播_天天再看斗鱼直播?教你如何用Python技术抓取弹幕
说起来,弹幕这种东西的出现,真的给众多网友带来无数的欢乐源泉. 当然,密集恐惧症患者慎入,毕竟某些视频的弹幕可谓是刷得密密麻麻的. 整个屏幕看的不是剧情,是弹幕. 以前是磕CP很快乐,现在是磕着弹幕也 ...
- python英语词频_为了边看美剧边学英语,我写了个字幕处理脚本
每个英语学渣(好吧,其实这个说的就是学渣本渣了 ♀️)都有这样一个梦想:能够一边轻松愉快地看着美剧,一边自己的英语听力水平还能蹭蹭地往上涨.知乎上也有很多人分享了自己通过美剧练习听力的方法,比如说只 ...
- python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法
概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...
- python iterable对象_一篇文章看懂 Python iterable,
Python 中的 iterable, iterator 以及 generator,一直是非常亲密但是难以区分的概念.nvie 有一个很好的 帖子阐述了它们之间的关系,但是内容偏向于概括和总结,对于新 ...
- 机器学习——正则化线性回归和偏差/方差(Matlab代码实现)
目录
- java 矩阵分解_计算方法(三)矩阵分解1-正交分解(QR分解)
正交分解 矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式. 任意实数方阵A,都能被分解为 .这里的Q为正交单位阵,即 R是一个上三角矩阵.这种分解被称为QR分解 ...
- matlab 低秩矩阵分解,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有四个文件:demo.m function [] = demo() %This routine demonstrates an example of us ...
- 低秩矩阵分解 matlab,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有四个文件:demo.m function [] = demo() %This routine demonstrates an example of us ...
最新文章
- 苹果服务器消息转发,iOS 消息推送原理及简单实现
- RHCSA7-NOTE(红帽管理员-题库详细笔记)
- java 注解_怎样理解 Java 注解和运用注解编程?
- systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
- SpringBoot 文件上传、下载、设置大小
- 通过这些简单的步骤从头开始学习Java
- JSON处理1.1:100DaysOfJavaEE8
- python局部静态变量_全局变量、局部变量和静态变量
- android 顶部标签切换,Android实现底部切换标签
- 微软的SQLHelper类(含完整中文注释)
- mysql sign_mysql - 随笔分类 - signheart - 博客园
- SpringBoot注解验证参数
- PHP数据结构预热:PHP的迭代器(转)
- EasyRecovery如何恢复虚拟建模软件的数据文件
- 自己写一个strcmp函数(C++)
- JavaScript 中的内存和性能、模拟事件(读书笔记思维导图)
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
- DataStage问题汇总
- discuz插入幻灯片_如何将符号插入Google文档和幻灯片
- MVVM+Retrofit+Kotlin网络框架封装
热门文章
- 《游戏系统设计六》一步一步实现王者荣耀等级系统
- 上位机软件定制开发,如何选择服务商
- 【Java从0到架构师】学习记录
- NLP句子表征,NLP 的巨人肩膀(下):从 CoVe 到 BERT (转载)
- java iv不是内部命令_java – 解密错误:“no iv set when one expected”
- JAVA 解密M3U8 视频TS片断提示:Wrong IV length: must be 16 bytes long 解决方法
- 【信仰充值中心】Pale Moon 29 正式版更新日志
- 云服务器网站logo,云服务器 logo
- (附源码)python飞机票销售系统 毕业设计 141432
- 因代码不规范,国外程序员就枪击 4 个同事?你可能提前过了愚人节