zoukankan      html  css  js  c++  java
  • 最小二乘法学习二

    继上一篇基本最小二乘法和带部分空间约束的最小二乘法。它们要么易过拟合,要么不易求解,以下介绍 l2约束的最小二乘法。又叫正则化最小二乘法,岭回归。

    一个模型的复杂程度与系数有关,最简单的模型是直接给全部系数赋值为0,则该模型总会预測出0值,模型尽管足够简单,可是没有意义,由于它不能有效预測。

    定义模型的复杂度为:

    因为我们的目的是使模型不要过于复杂。所以让上述值小是有意义的,因此新的目标函数为:



    前一项为数据拟合程度的惩处项。数据拟合的越好,该项值越小,可是也有可能过于拟合样本数据导致模型过于复杂;后一项为模型复杂程度的惩处项,当模型越复杂,该项值越大。即为了最小化目标函数。我们要让数据拟合的好同一时候模型不至于太复杂。事实上就是在基本最小二乘法的目标函数中添加了一个正则化项,所谓正则化。能够看为函数光滑性。

    将上式目标函数进行參数求偏微分。解得:

    以下从參数空间约束的角度介绍 L2 约束的最小二乘法。


    L2约束的最小二乘法是以參数空间的原点为圆心,在一定半径范围内(一般为超球)内进行參数求解。

    转化为拉格朗日对偶问题为:


    目标函数形式与前面分析是一致的。

    以下对以下高斯核模型运行L2约束下的最小二乘学习。实比例如以下;

    带宽h = 0.25  正则化參数 λ 设置为0.1.当中,绿色曲线是基本最小二乘法结果。红色曲线是正则化下的最小二乘结果。通过增加正则项,使过拟合现象得到非常好地抑制。

    带宽 h 和正则化參数 λ 值的选取会直接影响终于结果。为了得到更好的学习效果。应该选择合适的带宽和正则化參数。

    %高斯核模型L2约束的最小二乘法学习
    clear all;
    close all;
    
    n = 60;
    N = 1000;
    x = linspace(-4,4,n)';
    X = linspace(-4,4,N)';
    pix = pi*x;
    y = sin(pix)./(pix) + 0.1*x + 0.05*randn(n,1);
    
    x2 = x.^2;
    X2 = X.^2;
    hh = 2*0.25^2;%高斯核函数带宽 0.3
    e =0.1;%正则化參数
    
    k = exp(-(repmat(x2,1,n)+repmat(x2',n,1)-2*x*x')/hh);
    K = exp(-(repmat(X2,1,n)+repmat(x2',N,1)-2*X*x')/hh);
    t1 = ky;
    F1 = K*t1;
    t2 = (k^2+1*eye(n))(k*y);
    F2 = K*t2;
    
    figure(1);
    clf;
    hold on;
    axis([-4 4 -0.5 1.2]);
    plot(X,F1,'g-');
    plot(x,y,'bo');
    plot(X,F2,'r--');



    一点总结:

    本文先介绍了主要的最小二乘法,基于其易过拟合。介绍了部分空间约束的最小二乘法和L2约束(正则化)的最小二乘法,是的过拟合现象得到了一定缓解。可是,它们都须要选择合适的正交投影矩阵P 对參数空间选择 和正则化參数选择抑制模型复杂度。此外。对于线性模型的基函数选择和以及核函数參数也须要选择。

    从机器学习的角度来说,我们要做的事实上就是一种问题真实模型的逼近。我们将训练样本的模型输出与真实结果之间的差值定义为经验风险,我们须要得到一个模型。而又未定义模型好坏的标准,直观的说。我们能想到最简单的标准就是经验风险最小化。前面所做的事实上也就是对经验风险平方和最小化的求解。

    这样的思想事实上就是用训练样本(真实世界的一部分样本)的经验风险去逼近真实风险,数学上的以局部预计总体的思想,虽不一定正确。但也是一种选择。

    其实,对于有监督学习来说。我们学习的目的不在于记忆输入训练样本,而是对未知的測试输入样本也能正确的得到输出。

    所以,并非要训练样本的误差越小越好,由于训练样本的数目远远不及真实的全部样本量。上面实验中的绿色曲线为了使误差最小,基本经过了每个点,可是它的预測效果是相当差的。

    我们既要克服过拟合又要得到较好的泛化能力,这个折中问题就是偏差-方差平衡。(以下关于偏差-方差的内容来自http://scott.fortmann-roe.com/docs/BiasVariance.html)

    偏差:描写叙述的是预測值(预计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,例如以下图第二行所看到的。

    方差:描写叙述的是预測值的变化范围。离散程度,也就是离其期望值的距离。

    方差越大,数据的分布越分散。例如以下图右列所看到的。


    一个非常形象的样例例如以下(引用知乎网友回答)

    想象你开着一架黑鹰直升机,得到命令攻击地面上一仅仅敌军部队,于是你连打数十梭子,结果有一下几种情况:
    1.子弹基本上都打在队伍经过的一棵树上了,连在那棵树旁边等兔子的人都毫发无损。这就是方差小(子弹打得非常集中)。偏差大(跟目的相距甚远)。
    2.子弹打在了树上,石头上,树旁边等兔子的人身上。花花草草也都中弹,可是敌军安然无恙,这就是方差大(子弹到处都是)。偏差大(同1)。
    3.子弹打死了一部分敌军。可是也打偏了些打到花花草草了,这就是方差大(子弹不集中),偏差小(已经在目标周围了)。


    4.子弹一颗没浪费,每一颗都打死一个敌军。跟抗战剧里的八路军一样。这就是方差小(子弹所有都集中在一个位置)。偏差小(子弹集中的位置正是它应该射向的位置)。

    一个算法假设逐渐提高对训练数据的适应性(如增加很多其它的模型參数使模型更复杂),那么它会非常好地拟合数据,趋于更小的偏差,可是会导致更大的方差。相反,假设这个模型參数较少,通常偏差较大,数据拟合性能相对不太还,可是拟合的程度对于不同数据集变化不会太大,方差较低。

    一个实际有效克服过拟合的方法是交叉验证法,把训练样本中的一部分拿出来不进行学习,而作为測试样本进行终于学习结果的评价。


    參考文献:《Pattern Classfication》

        《机器学习基础教程》

        《图解机器学习》

  • 相关阅读:
    相关博客
    读写锁
    vccode配置c++ 编译环境
    windows下内存检测工具
    定时器堆的实现的方法
    关于tcp send的再次思考
    关于一个socket在阻塞模式下是否还可以使用的实验
    windows下对socket的send和recv的超时设置,并附一个简洁明了的socket简单demo
    对于vector中高效删除中间元素的技巧
    ubuntu下后台服务的管理
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6873966.html
Copyright © 2011-2022 走看看