一、一般线性回归遇到的问题

在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:

  • 预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量

    • 时,最小二乘回归会有较小的方差
    • 时,容易产生过拟合
    • 时,最小二乘回归得不到有意义的结果
  • 模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。

以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:

(摘自:机器学习实战)

方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。

二、岭回归的概念

在进行特征选择时,一般有三种方式:

  • 子集选择
  • 收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
  • 维数缩减

岭回归(Ridge Regression)是在平方误差的基础上增加正则项

,

通过确定的值可以使得在方差和偏差之间达到平衡:随着的增大,模型方差减小而偏差增大。

求导,结果为

令其为0,可求得的值:

三、实验的过程

我们去探讨一下取不同的对整个模型的影响。

MATLAB代码

主函数

  1. %% 岭回归(Ridge Regression)
  2. %导入数据
  3. data = load('abalone.txt');
  4. [m,n] = size(data);
  5. dataX = data(:,1:8);%特征
  6. dataY = data(:,9);%标签
  7. %标准化
  8. yMeans = mean(dataY);
  9. for i = 1:m
  10. yMat(i,:) = dataY(i,:)-yMeans;
  11. end
  12. xMeans = mean(dataX);
  13. xVars = var(dataX);
  14. for i = 1:m
  15. xMat(i,:) = (dataX(i,:) - xMeans)./xVars;
  16. end
  17. % 运算30次
  18. testNum = 30;
  19. weights = zeros(testNum, n-1);
  20. for i = 1:testNum
  21. w = ridgeRegression(xMat, yMat, exp(i-10));
  22. weights(i,:) = w';
  23. end
  24. % 画出随着参数lam
  25. hold on
  26. axis([-9 20 -1.0 2.5]);
  27. xlabel log(lam);
  28. ylabel weights;
  29. for i = 1:n-1
  30. x = -9:20;
  31. y(1,:) = weights(:,i)';
  32. plot(x,y);
  33. end

岭回归求回归系数的函数

    1. function [ w ] = ridgeRegression( x, y, lam )
    2. xTx = x'*x;
    3. [m,n] = size(xTx);
    4. temp = xTx + eye(m,n)*lam;
    5. if det(temp) == 0
    6. disp('This matrix is singular, cannot do inverse');
    7. end
    8. w = temp^(-1)*x'*y;
    9. end

http://blog.csdn.net/google19890102/article/details/27228279

数值计算方法的“稳定性”是指在计算过程中舍入误差是可以控制的。

对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为“病态矩阵”。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(即对角线上的元素)上的元素很小,在计算时就会表现出病态的特征。

回归分析中常用的最小二乘法是一种无偏估计。

当X列满秩时,有

X+表示X的广义逆(或叫伪逆)。

当X不是列满秩,或者某些列之间的线性相关性比较大时,XTX的行列式接近于0,即XTX接近于奇异,计算(XTX)-1时误差会很大。此时传统的最小二乘法缺乏稳定性与可靠性。

岭回归是对最小二乘回归的一种补充,它损失了无偏性,来换取高的数值稳定性,从而得到较高的计算精度。

当XTX的行列式接近于0时,我们将其主对角元素都加上一个数k,可以使矩阵为奇异的风险大降低。于是:

     (I是单位矩阵)

随着k的增大,B(k)中各元素bi(k)的绝对值均趋于不断变小,它们相对于正确值bi的偏差也越来越大。k趋于无穷大时,B(k)趋于0。b(k)随k的改变而变化的轨迹,就称为岭迹。实际计算中可选非常多的k值,做出一个岭迹图,看看这个图在取哪个值的时候变稳定了,那就确定k值了。

X不满足列满秩,换句话就是说样本向量之间具有高度的相关性(如果每一列是一个向量的话)。遇到列向量相关的情形,岭回归是一种处理方法,也可以用主成分分析PCA来进行降维。

http://www.cnblogs.com/zhangchaoyang 作者:Orisun

岭回归(Ridge Regression)的更多相关文章

  1. Jordan Lecture Note-4: Linear & Ridge Regression

    Linear & Ridge Regression 对于$n$个数据$\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\},x_i\in\mathbb{R}^d,y ...

  2. L1,L2范数和正则化 到lasso ridge regression

    一.范数 L1.L2这种在机器学习方面叫做正则化,统计学领域的人喊她惩罚项,数学界会喊她范数. L0范数  表示向量xx中非零元素的个数. L1范数  表示向量中非零元素的绝对值之和. L2范数  表 ...

  3. 在线场景感知:图像稀疏表示—ScSPM和LLC总结(以及lasso族、岭回归)

    前言: 场景感知其实不分三维场景和二维场景,可以使用通用的方法,不同之处在于数据的形式,以及导致前期特征提取及后期在线场景分割过程.场景感知即是场景语义分析问题,即分析场景中物体的特征组合与相应场景的 ...

  4. Ridge Regression(岭回归)

    Ridge Regression岭回归 数值计算方法的"稳定性"是指在计算过程中舍入误差是可以控制的. 对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这 ...

  5. scikit-learn中的岭回归(Ridge Regression)与Lasso回归

    一.岭回归模型 岭回归其实就是在普通最小二乘法回归(ordinary least squares regression)的基础上,加入了正则化参数λ. 二.如何调用 class sklearn.lin ...

  6. 机器学习:模型泛化(岭回归:Ridge Regression)

    一.基础理解 模型正则化(Regularization) # 有多种操作方差,岭回归只是其中一种方式: 功能:通过限制超参数大小,解决过拟合或者模型含有的巨大的方差误差的问题: 影响拟合曲线的两个因子 ...

  7. 线性回归——lasso回归和岭回归(ridge regression)

    目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...

  8. Sklearn库例子3:分类——岭回归分类(Ridge Regression )例子

    为了解决数据的特征比样本点还多的情况,统计学家引入了岭回归. 岭回归通过施加一个惩罚系数的大小解决了一些普通最小二乘的问题.回归系数最大限度地减少了一个惩罚的误差平方和. 这里是一个复杂的参数,用来控 ...

  9. 机器学习方法:回归(二):稀疏与正则约束ridge regression,Lasso

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. "机器学习方法"系列,我本着开放与共享(open and share)的精神撰写,目的是 ...

随机推荐

  1. vue组件定义方式

    一.全局组件 <div id="box"> {{msg}} <my-aaa></my-aaa> </div> var Home = ...

  2. Python拷贝文件脚本

    author : headsen chen date : 2018-12-06  17:56:58 copy_file.py #!/usr/bin/env python from sys import ...

  3. 改变presentModalView大小

    rc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; rc.modalPresentationStyle = UIModalP ...

  4. Android控件开发——ListView

    上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...

  5. 【CF662A】Gambling Nim 线性基

    [CF662A]Gambling Nim 题意:n长卡牌,第i张卡牌正面的数字是$a_i$,反面的数字是$b_i$,每张卡牌等概率为正面朝上或反面朝上.现在Alice和Bob要用每张卡牌朝上的数字玩N ...

  6. WCF的简单使用

    WCF简单介绍 WCF(windows communication foundation)是微软推出的数据通信的统一编程模型,在WCF有四个主要的关键点: abcd Address(地址):定义服务的 ...

  7. Oracle管理监控之设置linux启动时自动启动oracle服务器

    1. 修改dbstart脚本(第78行):$ vi $ORACLE_HOME/bin/dbstartORACLE_HOME_LISTNER=$ORACLE_HOME 2. 修改/etc/oratab为 ...

  8. @font-face 字体图标的应用

    所谓字体图标,顾名思义就是图标以字体的形式存在,可以利用 font-size.color 对字体图标的大小和颜色进行渲染.将小图标集中放到字体库里,利用css3 @font-face 引用图标,不仅有 ...

  9. 开启 NFS 文件系统提升 Vagrant 共享目录的性能

    Vagrant 默认的 VirtualBox 共享目录方式读写性能表现并不好,好在 Vagrant 支持 NFS 文件系统方式的共享,我们可以启用 NFS 提升性能 开启方法 首先要把虚拟机的网络设置 ...

  10. JAVA 的wait(), notify()与synchronized同步机制

    转自:http://blog.csdn.net/zyplus/article/details/6672775 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的进程同步是通过syn ...