glmnet包可以对一系列调优参数值同时计算参数估计。
该包可以用于线性回归,也可以拟合广义线性模型,如逻辑回归,多项式回归,泊松回归,cox回归。
初始glmnet
> install.packages("glmnet")
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/glmnet_2.0-13.zip'
Content type 'application/zip' length 1769153 bytes (1.7 MB)
downloaded 1.7 MB
package ‘glmnet’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\LLJiang\AppData\Local\Temp\RtmpCswyie\downloaded_packages
> library(glmnet)
载入需要的程辑包:Matrix
载入需要的程辑包:foreach
Loaded glmnet 2.0-13
Warning messages:
1: 程辑包‘glmnet’是用R版本3.4.3 来建造的
2: 程辑包‘foreach’是用R版本3.4.3 来建造的
> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv")
#对数据进行一些清理,删除错误的样本观测,消费金额不能为负数
> dat=subset(dat,store_exp>0&online_exp>0)
> trainx=dat[,grep("Q",names(dat))]
#将实体店消费量和在线消费之和当作因变量
#得到总消费量=实体店消费+在线消费
> trainy=dat$store_exp+dat$online_exp
> glmfit=glmnet(as.matrix(trainx),trainy)
>
我们可以通过plot(),coef(),predict()等函数来得到相应的信息。
> plot(glmfit,label=T)
>
图中每种颜色的线代表对应一个自变量,展示的是随着Lasso罚函数对应调优参数的变化,各个变量对应的参数估计路径。
图中有上下两个X轴标度,下X轴是调优参数变化对应最优解的一阶范数值,上X轴是调优参数对应的非0参数估计个数,也就是Lasso模型的自由度。
> print(glmfit)
Call: glmnet(x = as.matrix(trainx), y = trainy)
Df %Dev Lambda
[1,] 0 0.0000 3042.000
[2,] 2 0.1038 2771.000
[3,] 2 0.1919 2525.000
[4,] 2 0.2650 2301.000
[5,] 3 0.3264 2096.000
[6,] 3 0.3894 1910.000
[7,] 3 0.4417 <