说起lasso,任何一个跟高维数据打过交道的孩纸都不会陌生。作为高维里的hello world,lasso可以说是非常经典的降维方法了,尤其依托强大的统计软件R,调用nvcreg包,一行代码便可得到任意想要的结果(so easy,妈妈再也不用担心我的高维!),而且还能得到lasso的各种变体(scad,mcp,弹性网)。但是作为一枚研究僧,我们要进可调用R包,退能自己写算法。下面就以logistic模型为例,谈谈lasso在R语言中的算法实现。
首先是一些logistic回归模型加入lasso惩罚项的一些公式(敲黑板!!):
假设样本数为n,变量数为p,惩罚系数为
。
的对数似然函数(loglikelihood)为:
对数似然函数关于
的一阶偏导数为:
且
对数似然函数关于
的二阶偏导数为:
这里我们用Newton更新的Gauss-Seidel算法来求解,此算法的步骤如下:赋初值