SVM支持向量机系列理论(九) 核岭回归

1. 岭回归问题

岭回归就是使用了L2正则化的线性回归模型。当碰到数据有多重共线性时(自变良量存在高相关性),我们就会用到岭回归

岭回归模型的优化策略为:

minw    1Ni(yiwzi)2+λNwTw       (1) m i n w         1 N ∑ i ( y i − w ⋅ z i ) 2 + λ N w T w               ( 1 )

我们由representer Theorem 可以知道,任何L2正则化的线性模型都可以使用 w=Ni=1 βi zi       (2) w = ∑ i = 1 N   β i   z i               ( 2 ) 进行转换,进而使用核技巧

将(2)代入(1),可以得到 kernel ridge regression 的学习策略形式:

minβ    1Ni(yiNj=1 βjK(zi,zj))2+λNNi=1 Nj=1 βiβjK(zi,zj)       (3) m i n β         1 N ∑ i ( y i − ∑ j = 1 N   β j ⋅ K ( z i , z j ) ) 2 + λ N ∑ i = 1 N   ∑ j = 1 N   β i β j K ( z i , z j )               ( 3 )

写成向量形式,kernel ridge regression 的学习策略为:

minβ    L(β)=1N(βTKTKβ2βTKTy+yTy)+λNβTKβ       (4) m i n β         L ( β ) = 1 N ( β T K T K β − 2 β T K T y + y T y ) + λ N β T K β               ( 4 )

利用 常用的矩阵求导公式,可以得出(6),而且K的对称半正定矩阵,导出(7)。

β  L(β)=β  1N(βTKTKβ2βTKTy+yTy)+λNβTKβ       (5) ▽ β     L ( β ) = ▽ β     1 N ( β T K T K β − 2 β T K T y + y T y ) + λ N β T K β               ( 5 )

                =β  2N(KTKβKTy)+λN(KTβ+Kβ)      (6)                                 = ▽ β     2 N ( K T K β − K T y ) + λ N ( K T β + K β )             ( 6 )

                =β  2N(KTKβKTy)+2N(λKTβ)      (7)                                 = ▽ β     2 N ( K T K β − K T y ) + 2 N ( λ K T β )             ( 7 )

令(7) 等于0,得到:

β=(λI+K)1y        (8) β = ( λ I + K ) − 1 y                 ( 8 )

问题

  • K是一个稠密的矩阵,大部分项都不会为0,计算困难
  • 求逆过程需要 O(N3) O ( N 3 ) 的计算复杂度

结论

解决一个“非线性回归问题”的不简单,计算代价很高

核岭回归和岭回归的计算复杂度比较:

这里写图片描述

  • 在线性岭回归模型中,模型复杂度和特征维度d有关,而非线性核岭回归中,模型复杂度与样本数N有关,因此对于大数据的样本来说,使用核技巧比较困难。
  • 核岭回归由于有核函数,使用起来更加灵活。

  • 核岭回归其实也被称为最小二乘SVM(LSSVM),代表损失函数是最小二乘法的SVM。和普通的软间隔SVM相比, β β 的值大部分不为0其支持向量非常多,,也就是是稠密的,而并不像soft-SVM中的 α α 一样,大部分 α α 为0,因此核岭回归在实际中的应用并不是很常见,而支持向量回归(SVR的在回归问题中用比较广泛。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
岭回归是一种用于处理具有多重共线性(即自变量之间存在高度相关性)的线性回归问题的技术。岭回归通过对系数进行惩罚来解决过拟合问题,从而提高模型在新数据上的泛化能力。 高斯函数在机器学习中广泛应用于支持向量机SVM)和岭回归等算法中。在实现高斯函数的岭回归中,我们需要将训练数据进行变换,然后使用岭回归算法进行拟合。 具体步骤如下: 1.加载数据和库。 ``` load('data.mat'); % 加载数据 addpath('libsvm-3.22/matlab'); % 添加LIBSVM库路径 ``` 2.将训练数据进行变换。 ``` sigma = 0.2; % 高斯函数的参数 K = zeros(size(X,1),size(X,1)); % 初始化矩阵 for i = 1:size(X,1) for j = 1:size(X,1) K(i,j) = exp(-(norm(X(i,:)-X(j,:))^2)/(2*sigma^2)); % 计算高斯函数的值 end end ``` 3.使用岭回归算法进行拟合。 ``` lambda = 0.01; % 岭回归的参数 alpha = (K+lambda*eye(size(X,1)))\y; % 计算系数 ``` 4.预测新数据。 ``` Ktest = zeros(size(Xtest,1),size(X,1)); % 初始化测试矩阵 for i = 1:size(Xtest,1) for j = 1:size(X,1) Ktest(i,j) = exp(-(norm(Xtest(i,:)-X(j,:))^2)/(2*sigma^2)); % 计算测试数据与训练数据之间的高斯函数的值 end end ytest = Ktest*alpha; % 预测新数据 ``` 完整代码如下: ``` load('data.mat'); % 加载数据 addpath('libsvm-3.22/matlab'); % 添加LIBSVM库路径 sigma = 0.2; % 高斯函数的参数 K = zeros(size(X,1),size(X,1)); % 初始化矩阵 for i = 1:size(X,1) for j = 1:size(X,1) K(i,j) = exp(-(norm(X(i,:)-X(j,:))^2)/(2*sigma^2)); % 计算高斯函数的值 end end lambda = 0.01; % 岭回归的参数 alpha = (K+lambda*eye(size(X,1)))\y; % 计算系数 Ktest = zeros(size(Xtest,1),size(X,1)); % 初始化测试矩阵 for i = 1:size(Xtest,1) for j = 1:size(X,1) Ktest(i,j) = exp(-(norm(Xtest(i,:)-X(j,:))^2)/(2*sigma^2)); % 计算测试数据与训练数据之间的高斯函数的值 end end ytest = Ktest*alpha; % 预测新数据 ``` 需要注意的是,这里使用了LIBSVM库中的岭回归算法,因此需要先将LIBSVM库添加到MATLAB的搜索路径中。如果没有安装LIBSVM库,可以在官网下载并安装:https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值