lasso怎么用算法实现?

Tagged: 

该主题包含 6 条回复,5个帖子,最后由  ®γσ, Lian Hu Eng1 月, 2 周 之前 更新。

查看 7 个帖子 - 1 到 7(总计 7 个)
  • 作者
    帖子
  • 1 楼

    lolo
    Participant

    (Y-Xb)'(Y-Xb)+lamda||b||

    如果用梯度下降,该怎么确定下降方向,最后的结果又是不是一定收敛呢?

    2 楼

    谢益辉
    Keymaster

    绝对值函数在0的位置不可导,所以应该不是梯度下降。如果我没记错,应该是线性规划吧。

    3 楼

    Ihavenothing
    Keymaster

    回复 第1楼 的 lolo:建议先看Tibshirani最初在1996年的那篇论文,里面是将绝对值展开为线性约束;之后貌似又有一种LARS算法,多搜一搜应该也能找到。R软件中可以用lars包或glmnet包实现。

    4 楼

    lovelyday
    Moderator

    楼上正解。LP是最早的算法,因为太慢所以LASSO一直没流行起来,知道EFRON2004年提出LARS – least angle regression,将LASSO的算法的复杂度降低到一个最小二乘回归的复杂度。。并且能一次输出所有的解(每个LAMBDA有一个解)。当然,很多时候我们不需要所有的解。于是friedmen就一直使用block coordinate descent algorithm,也叫shooting algorithm,后来又有变种active shooting。这些其实都是梯度下降+block coordinate descent。根据block coordinate descent algorithm的原理,只要每一个iteration都有唯一解,这个算法最终会收敛,所以,LASSO的算法解决已经不是问题了。

    5 楼

    lolo
    Participant

    回复 第4楼 的 lovelyday:版主好强,从哪学到这些知识的,可否指点小弟一下。我就是对机器学习很有兴趣,但是有时候不知往哪个方向去努力。有些资料也不是看的很懂

    6 楼

    lovelyday
    Moderator

    这个不太属于机器学习吧。。属于统计学习或者统计方法更恰当一点。毕竟这方面的文章都是发在那几个传统的统计杂志上的。

    指点不敢说,我也还在学习这套理论,目前LASSO这块进展不是那么大了,但是还是有很多令人期待的问题没有解决,所以还是有很多坑可以去填的。要想好好学习这块的话,先读那几篇state-of-the-art的文章,如下:

    最基本那篇
    http://www-stat.stanford.edu/~tibs/lasso.html

    yuan ming 然后提出的 group lasso
    http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.79.2062

    zou hui的elastic net,可以同时自动选取相关程度比较大的变量(LASSO不能)
    http://www-stat.stanford.edu/~hastie/TALKS/enet_talk.pdf

    zou hui 提出的adative lasso,试图避免lasso对参数的shrunkage
    http://www.stat.umn.edu/~hzou/Papers/adaLasso.pdf

    jianqing fan 2001 年提出的另外一种 nonconvex的惩罚项 — SCAD
    http://www.orfe.princeton.edu/~jqfan/papers/01/penlike.pdf

    其学生08年时接着解决了SCAD的算法问题 — 实际上就是一种adaptive lasso
    http://www.stat.umn.edu/~hzou/Papers/onestep.pdf

    这方面文献太多了,我给的这几篇是影响比较大的,你可以看看08年这篇的reference,在里面可以找到一些有意思的线索。另外,LASSO还被广泛应用在graphical model上,有兴趣可以看看这篇

    http://www.stats.ox.ac.uk/~meinshau/consistent.pdf
    http://arxiv.org/abs/0811.4463
    http://www-stat.stanford.edu/~tibs/ftp/graph.pdf

    这三篇是目前文献里公认的里程碑式的文章–关于gaussian graphical model的。

    7 楼

    ®γσ, Lian Hu Eng
    Participant

    回复 6 楼lovelyday

    僕昨儿收到有家公司录取书面回复,不过得先解答问题测试统计学能力… 对于股票没有经验兼失业中的僕,目前正在学习Lasso中… :plain: :plain: :plain:。刚阅读了下Lasso,一般上多是应用在保险行业上。(它日也可应用在目前科研的基金管理上…)

    1.) LARS算法简介
    2.) 热门数据挖掘模型应用入门(一): LASSO回归
    3.) 分组最小角回归算法(group LARS)
    4.) 在R中如何用glmnet或lars包进行feature selection(变量选择)?
    5.) [学习分享] 用glmnet包实施套索算法(LASSO)(转)
    6.) [R] 〖素质笔记〗lasso族(套索算法) 学习笔记
    7.) Class: BUS 41100 Applied Regression Analysis ## Week 8 ## Max H. Farrell
    8.) Glmnet Vignette

    无意中发现有篇文献 Stock Market Forecasting Using LASSO Linear Regression Model.pdf非常符合分析股票。

    该文章比较了下Lasso和Ridge,结果Lasso比较精准,而热门数据挖掘模型应用入门(一): LASSO回归 (GitHub)中有比较最优alpha0 < alpha < 1
    Lasso

    1.) Example of Treatment Contrasts used by R in Estimating ANOVA Coefficients

    
    > library('quantmod')
    > library('plyr')
    > library('tidyverse')
    > library('glmnet')
    >
    > getSymbols(AAPL)
    > AAPLDT <- AAPL %>% as.data.frame %>% data.frame(rownames(.), .) %>% tbl_df
    > 
    > #h(x) 函数将yj设为多维xjwj,wj是加权矢量。
    > h <- function() {
        AAPLDT_DF <- AAPLDT[, 1:5] %>% gather(Category, Price, AAPL.Open:AAPL.Close) %>% 
          mutate(Date = factor(Date), Category = 
                   factor(Category, 
                          levels = c('AAPL.Open', 'AAPL.High', 'AAPL.Low', 'AAPL.Close')), 
                 wt = 1, b0 = Price / first(Price))
        #'@ contrasts(AAPLDT_DF$Date) <- contr.treatment(AAPLDT_DF$Date)
        #'@ attr(AAPLDT_DF$Category, 'levels') <- c('AAPL.Open', 'AAPL.High', 'AAPL.Low', 'AAPL.Close')
        tmp <- model.matrix(Date ~ Category + Price + wt + b0, data = AAPLDT_DF) %>% 
          data.frame(Date = AAPLDT$Date, .) %>% tbl_df
        return(tmp)
      }
     
    > x <- h()
    > y <- ddply(x, .(Date), summarise, 
                 resp = sum(((Price * wt * b0) - Price)^2) / nrow(x)) %>% tbl_df
      xy <- join(x, y) %>% tbl_df
    

    就不晓得contrasts函数怎么设置,才能使。Also, x0=1 has been added to make equation (2) valid. model.matrix(Date ~ Category + Price + wt + b0, data = AAPLDT_DF),僕将Date设为分类好让第一天的‘开市’、‘最高’、‘最低’与‘闭市’价格成为基点变量。不过却发现设置后竟然只有第一天的‘开市价’才是基点而非多维基点。

    
    > filter(xy, Date == first(Date))
    # A tibble: 4 × 9
            Date X.Intercept. CategoryAAPL.High CategoryAAPL.Low CategoryAAPL.Close Price    wt        b0        resp
          <date>        <dbl>             <dbl>            <dbl>              <dbl> <dbl> <dbl>     <dbl>       <dbl>
    1 2007-01-03            1                 0                0                  0 86.29     1 1.0000000 0.002306251
    2 2007-01-03            1                 1                0                  0 86.58     1 1.0033608 0.002306251
    3 2007-01-03            1                 0                1                  0 81.90     1 0.9491250 0.002306251
    4 2007-01-03            1                 0                0                  1 83.80     1 0.9711439 0.002306251
    

    contrasts看了那么久还是不晓得怎么运用… :plain: :plain: :plain:

    白戸則道:実に面白いですね!
    http://github.com/scibrokes/owner

查看 7 个帖子 - 1 到 7(总计 7 个)

您必须先登录才能回复该主题。