LASSO问题及其最优解

转载,原文地址:http://blog.csdn.net/xidianzhimeng/article/details/20856047

Sparsity 是当今机器学习领域中的一个重要话题。John Lafferty 和 Larry Wasserman 在 2006 年的一篇评论中提到:

Some current challenges … are high dimensional data, sparsity, semi-supervised learning, the relation between computation and risk, and structured prediction.John Lafferty and Larry Wasserman. Challenges in statistical machine learning. Statistica Sinica. Volume 16, Number 2, pp. 307-323, 2006.

Sparsity 的最重要的客户大概要属 high dimensional data 了吧。现在的机器学习问题中,具有非常高维度的数据随处可见。例如,在文档或图片分类中常用的 bag of words 模型里,如果词典的大小是一百万,那么每个文档将由一百万维的向量来表示。高维度带来的的一个问题就是计算量:在一百万维的空间中,即使计算向量的内积这样的基本操作也会是非常费力的。不过,如果向量是稀疏的的话(事实上在 bag of words 模型中文档向量通常都是非常稀疏的),例如两个向量分别只有 L1 和 L2 个非零元素,那么计算内积可以只使用 min(L1,L2)次乘法完成。因此稀疏性对于解决高维度数据的计算量问题是非常有效的。

当然高维度带来的问题不止是在计算量上。例如在许多生物相关的问题中,数据的维度非常高,但是由于收集数据需要昂贵的实验,因此可用的训练数据却相当少,这样的问题通常称为small n, large p problem——我们一般用 n 表示数据点的个数,用 p 表示变量的个数,即数据维度。当 pn 的时候,不做任何其他假设或者限制的话,学习问题基本上是没法进行的。因为如果用上所有变量的话,p 越大,通常会导致模型越复杂,但是反过来 n 有很小,于是就会出现很严重的 overfitting 问题。例如,最简单的线性回归模型:

 

f(x)=j=1pwjxj=wTx

 

使用 square loss 来进行学习的话,就变成最小化如下的问题

 

J(w)=1ni=1n(yif(xi))2=1nyXw2

 

这里 X=(x1,,xn)TRn×p 是数据矩阵,而 y=(y1,,yn)T 是由标签组成的列向量。该问题具有解析解

eq: 1 »

 

wˆ=(XTX)1XTy

 

然而,如果 p>n 的话,矩阵 XTX 将会不是满秩的,而这个解也没法算出来。或

者更确切地说,将会有无穷多个解。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们 overfitting 了。

解决 overfitting 最常用的办法就是 regularization ,例如著名的 ridge regression 就是添加一个 2 regularizer :

 

JR(w)=1nyXw2+λw2

 

直观地来看,添加这个 regularizer 会使得模型的解偏向于 norm 较小的 w 。从凸优化的角度来说,最小化上面这个 J(w) 等价于如下问题:

 

minw1nyXw
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lasso问题是一种最优化问题,可以采用最优化算法来求解。以下是使用最优化算法求解Lasso问题的步骤: 1. 确定目标函数 Lasso问题的目标函数为: min ||y - Xβ||^2 + &lambda; * ||β||_1 其中,y是观测向量,X是设计矩阵,β是要求解的权重向量,&lambda;是正则化参数。 2. 确定最优化算法 常用的最优化算法包括梯度下降法、坐标下降法、拟牛顿法等。在Lasso问题中,可以使用坐标下降法来求解。坐标下降法是一种迭代算法,每次迭代时只更新一个变量,其他变量保持不变,重复执行上述两个步骤直到收敛。 3. 实现算法 具体地,Lasso问题的坐标下降算法可以分为两个步骤: (1)固定其他变量,更新当前变量的值。 (2)固定当前变量的值,更新其他变量的值。 重复执行上述两个步骤直到收敛。 在Lasso问题中,每个变量的更新可以通过求解一个一元二次函数来实现。具体来说,对于第i个变量,更新公式如下: 如果 Σxij(yj - Σxikβk) > &lambda;/2,那么βi = (Σxij(yj - Σxikβk) - &lambda;/2)/Σxij^2; 如果 Σxij(yj - Σxikβk) < -&lambda;/2,那么βi = (Σxij(yj - Σxikβk) + &lambda;/2)/Σxij^2; 否则,βi = 0。 其中,xij表示设计矩阵中第j个样本的第i个特征值,yj表示第j个样本的真实值,βk表示第k个特征值的权重,&lambda;是正则化参数。 最终得到的β向量即为Lasso问题的解。 需要注意的是,在实现算法时,需要考虑收敛性、稳定性等问题,并对算法进行优化和改进,以提高算法的效率和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值