R语言解决Lasso问题----glmnet包(广义线性模型)

根据Hastie(斯坦福统计学家), Tibshirani和Wainwright的Statistical Learning with Sparsity(The Lasso and Generalizations),如下五类模型的变量选择可采用R语言的glmnet包来解决。这五类模型分别是:

  1. 二分类logistic回归模型

  2. 多分类logistic回归模型

3.Possion模型

4.Cox比例风险模型

5.SVM

下面介绍如何使用glmnet包来实现,以二元logistic回归模型为例:

>library("glmnet") #加载该软件包

>cv.fit<-cv.glmnet(x,y,family="binomial") #x为输入特征,x应该是矩阵格式的,若非矩阵格式,采用as.matrix()转换成矩阵格式,否则,会报如下错误:Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 

(串列)对象不能强制改变成’double’种类。 其他模型familiy值不一样,如cox风险比例模型是cox,possion是possion,多分类logistic是multinomial,广义线性模型guassian,family还有一种选择是mgaussian,不知是否是svm模型?

正确答案是:参数family规定了回归模型的类型:

—-family=”gaussian”适用于一维连续因变量

—-family=mgaussian”适用于多维连续因变量

—-family=”poisson”适用于非负次数因变量(count)

—-family=”binomial”适用于二元离散因变量(binary)

—-family=”multinomial”适用于多元离散因变量(category)

>plot(cv.fit)

https://img-blog.csdn.net/20161212155803015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb3JjaGlkem91cXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
cv.fit=cv.glmnet(x,y,family=’binomial’,type.measure=”deviance”)

这里的type.measure是用来指定交叉验证选取模型时希望最小化的目标参量,对与logistic回归有以下几种选择:

——–type.measure=deviance使用deviance,即-2log-likelihood(默认)

——–type.measure=mse使用拟合因变量与实际因变量的mean squred error

——–type.measure=mae使用mean absolute error

——–type.measure=class使用模型分类的错误率

——–type.measure=auc使用area under the ROC curve,是现在最流行的综合考量模型性能的一种参数

cv.fit$lambda.min #最佳lambda值

cv.fit$lambda.1se#指在lambda.min一个标准差范围内得到的最简单模型的那一个lambda值。因为lambda值达到一定大小之后,继续增加模型自变量个数及缩小lambda值,并不能显著提高模型性能,lambda.lse给出的就是一个具备优良性能但是自变量个数最少的模型。

fit<-glmnet(x0,y0,family=”binomial”)

plot(fit)
https://img-blog.csdn.net/20161212155928826?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb3JjaGlkem91cXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
coefficients<-coef(fit,s=cv.fit$lambda.min)
Active.Index<-which(coefficients!=0) #系数不为0的特征索引
Active.coefficients<-coefficients[Active.Index] #系数不为0的特征系数值

转载地址:http://blog.csdn.net/orchidzouqr/article/details/53582801

你可能感兴趣的:(R语言)