全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2208 5
2011-04-20
请教关于constrained linear regression如何通过R实现
请教各位版友
我有1个因变量,2个自变量
对于其线性回归得到的beta1,beta2需要加以如下的限制,
lamda*(beta1^2+beta2^2)^0.5+(1-lamda)*(|beta1|+|beta2|)<C
C是一个合适的常数
请问各位这个C如何选取?这个过程应该如何在R中实现?
希望各位能给我一些启发与帮助!
先行谢过!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-4-21 05:54:48
这不是elastic-net吗。R里面有专门的package做这个的呀。比如,glmnet, elasticnet。

如果lz想要自己编写,可以先对于模型变换,你可以得到将 l2 penalty变化进新的数据,于是整个过程就是等价于对变换后的变量做lasso,即只有 l1 penalty,随后用lasso的方法处理即可。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-21 08:02:17
版主您好!
刚看到您的回帖,
可是我看了Zou&Hastie(2005)的文章
貌似如果直接用elastic net这个package应该算的这样的约束条件
lamda*||beta||^2+(1-lamda)*|beta|
可是我这里的要求是
lamda*||beta||+(1-lamda)*|beta|
感觉好像不是特别一样
您说的方法能稍微再解释一下吗?
例如说如何对模型进行变换?
谢谢您!


2# ltx5151
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-21 09:55:45
3# lightman.guo

的确是我没看清楚,这不是一个标准的elastic-net,但是跟elastic net是等价的。

首先来说c的选取,c和lambda都可以通过k-fold cross validation来选取。

至于你的regularization的项,其实适合elastic-net等价的。之所以elastic-net定义成平方的形式,就是因为这种形式有直接可行的算法,并不是这种形式与开方后l2范数的效果不同。比如在你的形式下,每一个解都对应一个将l2范数平方后做regularization的解, 只不过c的系数不同。同样,每一个elastic-net得到的解也对应一个你给出形式下的c。所以,无论你怎样选择系数,都可以通过elastic-net达到同样的效果。所以,相同的效果,但是要用更麻烦的方法,我看不出lz你这种方法的意义所在呀。我的确不知道一些直接的方法来处理这样的penalty。lz只能根据你这样定义的目标函数自己编程算了,coordinate descent可能是比较可行的算法。其他的convex optimization的算法也可以试试。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-21 14:01:27
版主您好我是这样想的,
对于lambda=0这个情况很简单,就是一个一般的lasso restriction,用elasticnet包就可以做,
但是例如lambda=1的话,
对其极大似然估计求偏微分就成了如下的形式,
2t(X)%*%X+lambda/||lambda||-2t(X)%*%Y=0的形式,
您能稍微讲讲这种形式的怎么用convex optimization算么?
如果没有下面那个||lambda||就可以直接用solve(),这个感觉有点棘手啊。。。

非常感谢!


4# ltx5151
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-21 23:43:14
5# lightman.guo

不好意思,正如我所说的,lz你要解的这个东西没什么意义啊,不明白为什么一定要纠结在这里。如果你想建立这样标准的模型,很简单,先做elastic-net,通过cross-validation寻找最终参数,然后这时你可以得到lambda和beta,于是你就可以用得到的结果计算相应的你的penalty下面的那个c了。

如果你真的想解这个问题,可以通过prime-dua的方法l先把你的penalty化到你的目标函数里,形式上大约是
(||Y-X*beta||_2)^2 + a (lambda*(||beta||_2)^2 + (1-lambda)*||beta||_1),其中a和你想要的C会满足一定的关系,这个要你具体推导。然后对这个新的目标函数做优化,如果直接算,可以考虑用coordinate descent,这种算法不能保证收敛,但是在这种情况下应该差不多。因为对于elastic-net 这种算法是可行的,而且速度很快。算法具体的形式你Google一下就行。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群