Task03:偏差与方差理论

2023-11-07 19:59
文章标签 理论 方差 偏差 task03

本文主要是介绍Task03:偏差与方差理论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 优化基础模型
    • 方差与偏差
      • 方差
      • 偏差:
    • 特征提取
    • 压缩估计(正则化)
    • 降维
  • 对模型超参数进行调优(调参)

优化基础模型

方差与偏差

偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。
好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

方差

测试均方误差呈U形(表明了在测试均方误差中两种力量在博弈)
一般来说,模型的复杂度越高,测试的方差越大。训练误差越小。
在这里插入图片描述

偏差:

为了选择一个简单的模型去估计真实函数所带入的误差。假如真实的数据X与Y的关系是二次关系,但是我们选择了线性模型进行建模,那由于模型的复杂度引起的这种误差我们称为偏差。

偏差与方差和误差之间的关系:
在这里插入图片描述
测试均方误差的期望值可以分解为𝑓̂ (𝑥0)的方差、𝑓̂ (𝑥0)的偏差平方和误差项𝜖的方差。模型的测试均方误差达到最小值,也就是同时最小化偏差的平方和方差。

方差(Variance)反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
Bias和模型复杂度的关系:当模型复杂度上升时,Bias减小。当模型复杂度降低时,Bias增加。(反比关系)
Variance和模型复杂度的关系:当模型复杂度低时,Variance更低,当模型复杂度高时,Variance更高。(正比关系)

特征提取

目标:选择测试误差最小的模型
很难对实际的测试误差做精确的计算,因此我们要对测试误差进行估计,估计的方式有两种:训练误差修正与交叉验证。
训练误差修正
已知:
模型越复杂,训练误差越小(偏差也越小。测试误差先减后增)
特征个数越多。模型越复杂。
因此:
我们先构造一个特征较多的模型使其过拟合,此时训练误差很小而测试误差很大,那这时我们加入关于特征个数的惩罚。因此,当我们的训练误差随着特征个数的增加而减少时,惩罚项因为特征数量的增加而增大,抑制了训练误差随着特征个数的增加而无休止地减小。
Cp、AIC赤池信息量准则(用的最多)、BIC贝叶斯信息量准则(惩罚最重,特征数最小)

在测试误差能够被合理的估计出来以后,我们做特征选择的目标就是:从p个特征中选择m个特征,使得对应的模型的测试误差的估计最小。对应的方法有:

压缩估计(正则化)

除了刚刚讨论的直接对特征自身进行选择以外,我们还可以对回归的系数进行约束或者加罚的技巧对p个特征的模型进行拟合(最小化训练误差+惩罚项,最小化测试误差的估计值。)显著降低模型方差,这样也会提高模型的拟合效果。具体来说,就是将回归系数往零的方向压缩,这也就是为什么叫压缩估计的原因了
岭回归(线性回归用于L2正则化的例子)
对模型本身进行改进,对线性回归的优化在于:线性回归的损失函数加入l2正则化从而牺牲了无偏性去降低方差。
寻找最优参数属于最优化内容。
Lasso回归(L1正则化的例子)
LARS最小角回归计算最优w
在这里插入图片描述
最优的参数为椭圆形曲线与菱形和圆形区域相切的点。而岭回归的约束是一个圆域,没有尖点,因此与RSS曲线相交的地方一般不会出现在坐标轴上,因此无法让某个特征的系数为0,因此无法做到特征提取

降维

方差的控制方式:
使用原始变量的子集(特征提取)
将变量系数压缩至零(正则化)
将原始的特征空间投影到一个低维的空间实现变量的数量变少(降维)
前两种都是基于原始特征得到的。降维本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息。在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差 (去噪),提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征**(无监督学习的一种)**。在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。
主成分分析(PCA)
思想:通过最大投影方差 将原始空间进行重构,即由特征相关重构为无关,即落在某个方向上的点(投影)的方差最大。

对模型超参数进行调优(调参)

参数与超参数
我们很自然的问题就是岭回归中的参数𝜆和参数w之间有什么不一样?事实上,参数w是我们通过设定某一个具体的𝜆后使用类似于最小二乘法、梯度下降法等方式优化出来的,我们总是设定了𝜆是多少后才优化出来的参数w。因此,类似于参数w一样,使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为参数,类似于𝜆一样,我们无法使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为超参数。
模型参数是模型内部的配置变量,其值可以根据数据进行估计。

进行预测时需要参数。
它参数定义了可使用的模型。
参数是从数据估计或获悉的。
参数通常不由编程者手动设置。
参数通常被保存为学习模型的一部分。
参数是机器学习算法的关键,它们通常由过去的训练数据中总结得出 。
模型超参数是模型外部的配置,其值无法从数据中估计。
超参数通常用于帮助估计模型参数。
超参数通常由人工指定。
超参数通常可以使用启发式设置。
超参数经常被调整为给定的预测建模问题。

网格搜索GridSearchCV()
超参数做排列组合,在带进去寻找最优
随机搜索 RandomizedSearchCV()
超参数做排列组合中随机取一个,此种方法一般的到的不是最优的。
贝叶斯优化

尝试使用sklearn,对一组数据先进行特征的简化(使用三种方式),再使用回归模型,最后使用网格搜索调参,观察三种方法的优劣。

# 我们先来对未调参的SVR进行评价: 
from sklearn.svm import SVR     # 引入SVR类
from sklearn.pipeline import make_pipeline   # 引入管道简化学习流程
from sklearn.preprocessing import StandardScaler # 由于SVR基于距离计算,引入对数据进行标准化的类
from sklearn.model_selection import GridSearchCV  # 引入网格搜索调优
from sklearn.model_selection import cross_val_score # 引入K折交叉验证
from sklearn import datasetsboston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
pipe_SVR = make_pipeline(StandardScaler(),SVR())
score1 = cross_val_score(estimator=pipe_SVR,X = X,y = y,scoring = 'r2',cv = 10)       # 10折交叉验证
print("CV accuracy: %.3f +/- %.3f" % ((np.mean(score1)),np.std(score1)))
#定义向前逐步回归函数
def forward_select(data,target):variate=set(data.columns)  #将字段名转换成字典类型variate.remove(target)  #去掉因变量的字段名selected=[]current_score,best_new_score=float('inf'),float('inf')  #目前的分数和最好分数初始值都为无穷大(因为AIC越小越好)#循环筛选变量while variate:aic_with_variate=[]for candidate in variate:  #逐个遍历自变量formula="{}~{}".format(target,"+".join(selected+[candidate]))  #将自变量名连接起来aic=ols(formula=formula,data=data).fit().aic  #利用ols训练模型得出aic值aic_with_variate.append((aic,candidate))  #将第每一次的aic值放进空列表aic_with_variate.sort(reverse=True)  #降序排序aic值best_new_score,best_candidate=aic_with_variate.pop()  #最好的aic值等于删除列表的最后一个值,以及最好的自变量等于列表最后一个自变量if current_score>best_new_score:  #如果目前的aic值大于最好的aic值variate.remove(best_candidate)  #移除加进来的变量名,即第二次循环时,不考虑此自变量了selected.append(best_candidate)  #将此自变量作为加进模型中的自变量current_score=best_new_score  #最新的分数等于最好的分数print("aic is {},continuing!".format(current_score))  #输出最小的aic值else:print("for selection over!")breakformula="{}~{}".format(target,"+".join(selected))  #最终的模型式子print("final formula is {}".format(formula))model=ols(formula=formula,data=data).fit()return(model)
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
import statsmodels.api as sm #最小二乘
from statsmodels.formula.api import ols #加载ols模型
forward_select(data=boston_data,target="Price") #利用向前逐步回归筛选变量
# 下面我们使用网格搜索来对SVR调参:
from sklearn.pipeline import Pipeline
pipe_svr = Pipeline([("StandardScaler",StandardScaler()),("svr",SVR())])
param_range = [0.0001,0.001,0.01,0.1,1.0,10.0,100.0,1000.0]
param_grid = [{"svr__C":param_range,"svr__kernel":["linear"]},  # 注意__是指两个下划线,一个下划线会报错的{"svr__C":param_range,"svr__gamma":param_range,"svr__kernel":["rbf"]}]
gs = GridSearchCV(estimator=pipe_svr,param_grid = param_grid,scoring = 'r2',cv = 10)       # 10折交叉验证
gs = gs.fit(X,y)
print("网格搜索最优得分:",gs.best_score_)
print("网格搜索最优参数组合:\n",gs.best_params_)

aic is 3286.974956900157,continuing!
aic is 3171.5423142992013,continuing!
aic is 3114.0972674193326,continuing!
aic is 3097.359044862759,continuing!
aic is 3069.438633167217,continuing!
aic is 3057.9390497191152,continuing!
aic is 3048.438382711162,continuing!
aic is 3042.274993098419,continuing!
aic is 3040.154562175143,continuing!
aic is 3032.0687017003256,continuing!
aic is 3021.726387825062,continuing!
for selection over!
final formula is Price~LSTAT+RM+PTRATIO+DIS+NOX+CHAS+B+ZN+CRIM+RAD+TAX
网格搜索最优得分: 0.6081303070817127
网格搜索最优参数组合:
{‘svr__C’: 1000.0, ‘svr__gamma’: 0.001, ‘svr__kernel’: ‘rbf’}

这篇关于Task03:偏差与方差理论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365973

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点:         第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分)。在历年考试中,案例题对该部分内容都有固定考查,综合知识选择题目中有固定分值的考查。本课时内容侧重于对知识点的记忆、理解和应用,按照以往的出题规律,嵌入式系统架构设计基础知识点基本来源于教材内。本课时知识架构如图19.1所示。 一、嵌入式系统发展历程

西方社会学理论教程复习重点

一.名词解释 1.社会静力学:旨在揭示人类社会的基本秩序。它从社会的横断面,静态的考察人类社会的结构和制度,寻找确立和维护人类社会的共存和秩序的原则。 2.社会动力学:纵观人类理性和人类社会发展的先后必要阶段,所叙述的是这一基本秩序在达到实证主义这一最终阶段之前所经过的曲折历程。 3.社会事实:一切行为方式,不论它是固定的还是不固定的,凡是能从外部给予个人以约束的,或者说是普遍存在于该社会各

行政组织理论-第十一章:创建学习型组织

章节章节汇总第一章:绪论第二章:行政组织的演变第三章:科层制行政组织理论第四章:人本主义组织理论第五章:网络型组织理论第六章:行政组织目标第七章:行政组织结构第八章:行政组织体制第九章:行政组织设置与自身管理第十章:组织激励第十一章:创建学习型组织第十二章:政府再造流程第十三章:行政组织变革 目录 第一节 学习型组织理论的产生1. 学习型组织的源起2. 学习型组织的定义3. 学习型组织与组

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (

【深度学习 误差计算】10分钟了解下均方差和交叉熵损失函数

常见的误差计算函数有均方差、交叉熵、KL 散度、Hinge Loss 函数等,其中均方差函数和交叉熵函数在深度学习中比较常见,均方差主要用于回归问题,交叉熵主要用于分类问题。下面我们来深刻理解下这两个概念。 1、均方差MSE。 预测值与真实值之差的平方和,再除以样本量。 均方差广泛应用在回归问题中,在分类问题中也可以应用均方差误差。 2、交叉熵 再介绍交叉熵损失函数之前,我们首先来介绍信息

计算机操作员理论基础

计算机操作员理论基础 理论基础 计算机主频指的是时钟频率。14=23+22+21=(0)1110OS是运行其他系统软件的平台。215=27+26+24+22+21+20=(0)11010111(0)1111=(0)10000-1=24-1=15计算机理论知识,存贮是最基本是字节计算机产权在我国是受法律保护的12=23+22=(0)1100存贮程序是计算机能够自动连续工作的理论基础软盘中病毒

代码随想录算法训练营第十九天| 回溯理论、77. 组合、216. 组合总和Ⅲ、17. 电话号码的字母组合

今日内容 回溯的理论基础leetcode. 77 组合leetcode. 216 组合总和Ⅲleetcode. 17 电话号码的字母组合 回溯理论基础 回溯法也叫回溯搜索法,它是一种搜索的方式,而且只要有递归就会有回溯,回溯就是递归的副产品。 回溯说到底并不是什么非常高深的搜索方式,本质上仍然是穷举,穷举所有可能然后选择出我们要的答案。剪枝会使回溯法更加高效一点,但改变不了回溯本质就是穷举

分布式系统理论基础三-时间、时钟和事件顺序

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 现实生活中时间是很重要的概念,时间可以记录事情发生的时刻、比较事情发生的先后顺序。分布式系统的一些场景也需要记录和比较不同