目录

  • 1.偏差与方差
    • 1.1 方差
    • 1.2 偏差
  • 2. 偏差-方差权衡
  • 3. 特征提取
    • 3.1训练误差修正
    • 3.2 交叉验证
  • 4. 压缩估计(正则化)
    • 4.1 岭回归实例
    • 4.2 Lasso实例
  • 5.降维
  • 5.1 主成分分析(PCA)

1.偏差与方差

Bias和Variance是针对Generalization来说的。

在机器学习中,我们用训练数据集去训练一个模型,一般是定义一个误差函数,通过将这个Loss的最小化过程,来提高模型的性能。

单纯地将训练数据集的loss最小化,并不能保证在解决更一般的问题时模型仍然是最优这个训练数据集的loss与一般化的数据集的loss之间的差异就叫做generalization error。而generalization error又可以细分为Bias和Variance两个部分。

而bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。

Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;

Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。

1.1 方差

方差代表的是用一个不同的训练数据集估计f(x)时,估计函数f(x)_hat的改变量。
光滑度越高的模型有更高的方差;如下图所示,右图中改变其中任何一个数据点将会使得f(x)_hat有相当大的改变。

1.2 偏差

偏差代表的是为了选择一个简单的模型逼近真实函数而被带入的误差,其构成可能非常复杂。

一般来说,光滑度越高的模型所产生的偏差越小。

2. 偏差-方差权衡

模型光滑度越高(复杂度越高)所得模型方差增加,偏差减小,则这两个量比值的相对变化率会导致测试均方误差整体的增加或减小。总的测试均方误差会有一个先下降后上升的趋势,如果一个统计学习模型被称为测试性能好,那么要求该模型有较小的方差和较小的偏差,这就涉及到权衡的问题。

3. 特征提取

在前面能得出个结论,我们要选择一个测试误差达到最小的模型。但是实际上我们很难对实际的测试误差做精确的计算,因此我们要对测试误差进行估计,估计的方式有两种:训练误差修正交叉验证

3.1训练误差修正

模型越复杂,训练误差越小,测试误差先减后增。

构造一个特征较多的模型使其过拟合,此时训练误差很小而测试误差很大,那这时加入关于特征个数的惩罚。

训练误差随着特征个数的增加而减少时,惩罚项因为特征数量的增加而增大,抑制了训练误差随着特征个数的增加而无休止地减小。

Cp=1N(RSS+2dσ^2)C_p = \frac{1}{N}(RSS + 2d\hat{\sigma}^2)Cp​=N1​(RSS+2dσ^2), 其中d为模型特征个数,
RSS=∑i=1N(yi−f^(xi))2RSS = \sum\limits_{i=1}^{N}(y_i-\hat{f}(x_i))^2RSS=i=1∑N​(yi​−f^​(xi​))2,σ^2\hat{\sigma}^2σ^2为模型预测误差的方差的估计值,即残差的方差。
AIC赤池信息量准则:AIC=1dσ^2(RSS+2dσ^2)AIC = \frac{1}{d\hat{\sigma}^2}(RSS + 2d\hat{\sigma}^2)AIC=dσ^21​(RSS+2dσ^2)
BIC贝叶斯信息量准则:BIC=1n(RSS+log(n)dσ^2)BIC = \frac{1}{n}(RSS + log(n)d\hat{\sigma}^2)BIC=n1​(RSS+log(n)dσ^2)

3.2 交叉验证

交叉验证法可以用来估计一种指定的统计学习方法的测试误差,从而来评价这种方法的表现(模型评价),目前已成为业界评估模型性能的标准;或者为这种方法选择合适的光滑度(模型选择)。

K折交叉验证法(k-fold CV)是将观测集随机地分为k个大小基本一致的组,或者说折(fold),第一折作为验证集,然后在剩下的k-1个折上拟合模型,均方误差MSE1(响应变量Y为定性变量时则为错误率)由保留折的观测计算得出。重复这个步骤k次,每一次把不同折作为验证集,整个过程会得到k个测试误差的估计MSE1,MSE2,…, MSEk。K折CV估计由这些值求平均计算得到。

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

  • 最优子集选择:
  1. 记不含任何特征的模型为M0M_0M0​,计算这个M0M_0M0​的测试误差。

  2. 在M0M_0M0​基础上增加一个变量,计算p个模型的RSS,选择RSS最小的模型记作M1M_1M1​,并计算该模型M1M_1M1​的测试误差。

  3. 再增加变量,计算p-1个模型的RSS,并选择RSS最小的模型记作M2M_2M2​,并计算该模型M2M_2M2​的测试误差。

  4. 重复以上过程知道拟合的模型有p个特征为止,并选择p+1个模型{M0,M1,...,Mp}\{M_0,M_1,...,M_p \}{M0​,M1​,...,Mp​}中测试误差最小的模型作为最优模型。

  • 向前逐步选择:
    最优子集选择虽然在原理上很直观,但是随着数据特征维度p的增加,子集的数量为2p2^p2p,计算效率非常低下且需要的计算内存也很高因此,我们需要把最优子集选择的运算效率提高,因此向前逐步选择算法的过程如下:
  1. 记不含任何特征的模型为M0M_0M0​,计算这个M0M_0M0​的测试误差。
  2. 在M0M_0M0​基础上增加一个变量,计算p个模型的RSS,选择RSS最小的模型记作M1M_1M1​,并计算该模型M1M_1M1​的测试误差。
  3. 在最小的RSS模型下继续增加一个变量,选择RSS最小的模型记作M2M_2M2​,并计算该模型M2M_2M2​的测试误差。
  4. 以此类推,重复以上过程知道拟合的模型有p个特征为止,并选择p+1个模型{M0,M1,...,Mp}\{M_0,M_1,...,M_p \}{M0​,M1​,...,Mp​}中测试误差最小的模型作为最优模型。

4. 压缩估计(正则化)

对回归的系数进行约束或者加罚的技巧对p个特征的模型进行拟合,显著降低模型方差,这样也会提高模型的拟合效果。

  1. 岭回归(L2正则化的例子)

    在线性回归中,损失函数为J(w)=∑i=1N(yi−w0−∑j=1pwjxij)2J(w) = \sum\limits_{i=1}^{N}(y_i-w_0-\sum\limits_{j=1}^{p}w_jx_{ij})^2J(w)=i=1∑N​(yi​−w0​−j=1∑p​wj​xij​)2

在线性回归的损失函数的基础上添加对系数的约束或者惩罚,即:
J(w)=∑i=1N(yi−w0−∑j=1pwjxij)2+λ∑j=1pwj2,其中,λ≥0w^=(XTX+λI)−1XTYJ(w) = \sum\limits_{i=1}^{N}(y_i-w_0-\sum\limits_{j=1}^{p}w_jx_{ij})^2 + \lambda\sum\limits_{j=1}^{p}w_j^2,\;\;其中,\lambda \ge 0\\ \hat{w} = (X^TX + \lambda I)^{-1}X^TY J(w)=i=1∑N​(yi​−w0​−j=1∑p​wj​xij​)2+λj=1∑p​wj2​,其中,λ≥0w^=(XTX+λI)−1XTY

λ\lambdaλ越大,惩罚的力度越大,系数则越趋近于0,反之,选择合适的λ\lambdaλ对模型精度来说十分重要。岭回归通过牺牲线性回归的无偏性降低方差,有可能使得模型整体的测试误差较小,提高模型的泛化能力。

  1. Lasso回归(L1正则化的例子):
    岭回归的一个很显著的特点是:将模型的系数往零的方向压缩,但是岭回归的系数只能呢个趋于0但无法等于0,换句话说,就是无法做特征选择。

使用系数向量的L1范数替换岭回归中的L2范数:
J(w)=∑i=1N(yi−w0−∑j=1pwjxij)2+λ∑j=1p∣wj∣,其中,λ≥0J(w) = \sum\limits_{i=1}^{N}(y_i-w_0-\sum\limits_{j=1}^{p}w_jx_{ij})^2 + \lambda\sum\limits_{j=1}^{p}|w_j|,\;\;其中,\lambda \ge 0 J(w)=i=1∑N​(yi​−w0​−j=1∑p​wj​xij​)2+λj=1∑p​∣wj​∣,其中,λ≥0

当RSS曲线与坐标轴相交时恰好回归系数中的某一个为0,这样就实现了特征提取。反观岭回归的约束是一个圆域,没有尖点,因此与RSS曲线相交的地方一般不会出现在坐标轴上,因此无法让某个特征的系数为0,因此无法做到特征提取。

#定义向前逐步回归函数
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)

4.1 岭回归实例

from sklearn import linear_model
reg_rid = linear_model.Ridge(alpha=.5)
reg_rid.fit(X,y)
reg_rid.score(X,y)

4.2 Lasso实例

from sklearn import linear_model
reg_lasso = linear_model.Lasso(alpha = 0.5)
reg_lasso.fit(X,y)
reg_lasso.score(X,y)

5.降维

将原始的特征空间投影到一个低维的空间实现变量的数量变少,如:将二维的平面投影至一维空间。机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。

降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。

y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。

f可能是显式的或隐式的、线性的或非线性的。

目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。

5.1 主成分分析(PCA)

主成分分析的思想:通过最大投影方差 将原始空间进行重构,即由特征相关重构为无关,即落在某个方向上的点(投影)的方差最大。

把样本均值和样本协方差矩阵推广至矩阵形式:

样本均值Mean:xˉ=1N∑i=1Nxi=1NXT1N,其中1N=(1,1,...,1)NT\bar{x} = \frac{1}{N}\sum\limits_{i=1}^{N}x_i = \frac{1}{N}X^T1_N,\;\;\;其中1_N = (1,1,...,1)_{N}^Txˉ=N1​i=1∑N​xi​=N1​XT1N​,其中1N​=(1,1,...,1)NT​
样本协方差矩阵S2=1N∑i=1N(xi−xˉ)(xi−xˉ)T=1NXTHX,其中,H=IN−1N1N1NTS^2 = \frac{1}{N}\sum\limits_{i=1}^{N}(x_i-\bar{x})(x_i-\bar{x})^T = \frac{1}{N}X^THX,\;\;\,其中,H = I_N - \frac{1}{N}1_N1_N^TS2=N1​i=1∑N​(xi​−xˉ)(xi​−xˉ)T=N1​XTHX,其中,H=IN​−N1​1N​1NT​

最大投影方差的步骤:
(i) 中心化:xi−xˉx_i - \bar{x}xi​−xˉ
(ii) 计算每个点x1,...,xNx_1,...,x_Nx1​,...,xN​至u⃗1\vec{u}_1u1​方向上的投影:(xi−xˉ)u⃗1,∣∣u⃗1∣∣=1(x_i-\bar{x})\vec{u}_1,\;\;\;||\vec{u}_1|| = 1(xi​−xˉ)u1​,∣∣u1​∣∣=1
(iii) 计算投影方差:J=1N∑i=1N[(xi−xˉ)Tu⃗1]2,∣∣u⃗1∣∣=1J = \frac{1}{N}\sum\limits_{i=1}^{N}[(x_i-\bar{x})^T\vec{u}_1]^2,\;\;\;||\vec{u}_1|| = 1J=N1​i=1∑N​[(xi​−xˉ)Tu1​]2,∣∣u1​∣∣=1
(iv) 最大化投影方差求u⃗1\vec{u}_1u1​:
uˉ1=argmaxu11N∑i=1N[(xi−xˉ)Tu⃗1]2s.t.u⃗1Tu⃗1=1(u⃗1往后不带向量符号)\bar{u}_1 = argmax_{u_1}\;\;\frac{1}{N}\sum\limits_{i=1}^{N}[(x_i-\bar{x})^T\vec{u}_1]^2 \\ \;\;\;s.t. \vec{u}_1^T\vec{u}_1 = 1 (\vec{u}_1往后不带向量符号) uˉ1​=argmaxu1​​N1​i=1∑N​[(xi​−xˉ)Tu1​]2s.t.u1T​u1​=1(u1​往后不带向量符号)
得到:
J=1N∑i=1N[(xi−xˉ)Tu⃗1]2=1N∑i=1N[u1T(xi−xˉ)(xi−xˉ)Tu1]=u1T[1N∑i=1N(xi−xˉ)(xi−xˉ)T]u1=u1TS2u1J = \frac{1}{N}\sum\limits_{i=1}^{N}[(x_i-\bar{x})^T\vec{u}_1]^2 = \frac{1}{N}\sum\limits_{i=1}^{N}[u_1^T(x_i-\bar{x})(x_i-\bar{x})^Tu_1]\\ \; = u_1^T[\frac{1}{N}\sum\limits_{i=1}^{N}(x_i-\bar{x})(x_i - \bar{x})^T]u_1 = u_1^TS^2u_1 J=N1​i=1∑N​[(xi​−xˉ)Tu1​]2=N1​i=1∑N​[u1T​(xi​−xˉ)(xi​−xˉ)Tu1​]=u1T​[N1​i=1∑N​(xi​−xˉ)(xi​−xˉ)T]u1​=u1T​S2u1​
即:
u^1=argmaxu1u1TS2u1,s.t.u1Tu1=1L(u1,λ)=u1TS2u1+λ(1−u1Tu1)∂L∂u1=2S2u1−2λu1=0即:S2u1=λu1\hat{u}_1 = argmax_{u_1}u_1^TS^2u_1,\;\;\;s.t.u_1^Tu_1 = 1\\ L(u_1,\lambda) = u_1^TS^2u_1 + \lambda (1-u_1^Tu_1)\\ \frac{\partial L}{\partial u_1} = 2S^2u_1-2\lambda u_1 = 0\\ 即:S^2u_1 = \lambda u_1 u^1​=argmaxu1​​u1T​S2u1​,s.t.u1T​u1​=1L(u1​,λ)=u1T​S2u1​+λ(1−u1T​u1​)∂u1​∂L​=2S2u1​−2λu1​=0即:S2u1​=λu1​
可以看到:λ\lambdaλ为S2S^2S2的特征值,u1u_1u1​为S2S^2S2的特征向量。因此我们只需要对中心化后的协方差矩阵进行特征值分解,得到的特征向量即为投影方向。如果需要进行降维,那么只需要取p的前M个特征向量即可。

机器学习-偏差与方差相关推荐

  1. 机器学习偏差、方差、泛化误差的完整总结

    综述 机器学习算法的最终目标是最小化期望损失风险(即机器学习模型在任意未知测试样本上的表现),但由于数据的真实分布我们通常是不知道的,我们可用的信息来自于训练数据,因此,机器学习的学习目标往往会转化为 ...

  2. 机器学习中的偏差和方差是什么?

    机器学习中的偏差和方差是什么? 机器学习全部是关于给定输入数据(X)和给定输出数据(Y),然后去寻找一个最佳映射函数(F),这个映射函数通常也被叫做目标函数. 任何机器学习算法的预测误差可以分解为三部 ...

  3. 4.3 偏差与方差-机器学习笔记-斯坦福吴恩达教授

    偏差与方差 在机器学习中,偏差(bias) 反映了模型无法描述数据规律,而 方差(variance) 反映了模型对训练集过度敏感,而丢失了数据规律,高偏差和高方差都会造成新数据到来时,模型给出错误的预 ...

  4. 转载:理解机器学习中的偏差与方差

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, ...

  5. 机器学习偏差方差_机器学习101 —偏差方差难题

    机器学习偏差方差 Determining the performance of our model is one of the most crucial steps in the machine le ...

  6. 机器学习实践四--正则化线性回归 和 偏差vs方差

    这次实践的前半部分是,用水库水位的变化,来预测大坝的出水量. 给数据集拟合一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合数据,这是高偏差(high bias)的情况,也称为"欠拟合 ...

  7. 入门机器学习(十二)--课后作业解析-偏差与方差(Python 实现)

    在本次作业中,我们要完成的是预测水库水位的变化预测大坝流出的水量.已知特征为水库的水位,要预测的y是大坝流出的水量. 编程作业 5 - 偏差和方差 这次练习我们将会看到如何使用课上的方法改进机器学习算 ...

  8. 吴恩达机器学习作业5.偏差和方差

    机器学习作业 5 - 偏差和方差 import numpy as np import scipy.io as sio import scipy.optimize as opt import panda ...

  9. 吴恩达机器学习:偏差与方差、欠拟合与过拟合

    在吴恩达机器学习课程的第86课时中,讲解了偏差和方差与欠拟合和过拟合的关系. 1.偏差与方差的概念 先看下网上关于偏差与方差的例子. 该例子可以理解为射击打靶. 偏差指的是多次射击的平均环数与环心的偏 ...

最新文章

  1. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
  2. css属性基础以及wxss——居中,渐变色边框,圆角边框,横向布局,重叠div,div固定在底部,input的无边框显示下划线
  3. Android 系统(43)----Andropid 基础知识
  4. 【图像处理】MATLAB:彩色图像处理
  5. IPTABLES防火墙SNAT、DNAT网关策略
  6. 20150917-html第二次课
  7. 源码装置vsftpd
  8. DELL电脑系统恢复出常值
  9. 联想服务器安装2019系统,联想支持的Win10 2019年10月更新(1909版本)的机型
  10. 高级终端termux下载不了Python_最新Termux安装MSF(metasploit)教程
  11. 三极管放大电路的基本原理
  12. 医用自动配药柜的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 医院计算机管理工资,医院绩效管理平台:绩效工资管理系统
  14. 获取门店出错(44)美团聚宝盆 门店映射报错
  15. java 405_Http状态405-方法不允许
  16. 使用express脚手架创建项目
  17. 软考中级软件设计师 2009-2022年真题
  18. 12V-240V蓄电池放电容量测试仪(放电仪)功能介绍及技术参数
  19. AutoCAD版本、.NET SDK、.NET Framework版本、注册表中的数值参数、DWG文件版本、Internal Version、天正SYS文件对照表
  20. 平面设计师如何突破瓶颈提高设计水平

热门文章

  1. 2019年JS基础面试题
  2. FPGA-自动售货机verilog
  3. mathtype断网
  4. 河北省职称计算机考试模拟练习,2009河北省职称计算机考试模拟练习.pdf
  5. PHP生成PDF——mpdf用法小结
  6. php 生成PDF文件
  7. Word2003入门动画教程74:在Word中插入自选图形
  8. 三叉神经树 ( neuron )
  9. 巴巴运动网商品交易系统的架构
  10. 乔布斯:遗失的访谈(1995)有感