我用R语言的glmnet包做Lasso回归,做的是二分类,代码如下:
g <- cv.glmnet(xd, yd,family="binomial",type.measure="auc", nfolds = 10)
g.best <- g$glmnet.fit #对应的最佳模型
g.coef <- coef(g$glmnet.fit,s=glambda.1se) #系数
beta<-as.matrix(g.coef[which(g.coef != 0)] )#选择的变量
fn<-feature_NUM[which(g.coef != 0)]
我用以上代码提取了模型中的特征序号fn和系数beta。算出了每个观测的分值score
score[i]<-beta[1]+beta[2]*xd[i,fn[1]]+beta[3]*xd[i,fn[2]]
+beta[4]*xd[i,fn[3]]+beta[5]*xd[i,fn[4]]+beta[6]*xd[i,fn[5]]
+beta[7]*xd[i,fn[6]]+beta[8]*xd[i,fn[7]]+beta[9]*xd[i,fn[8]]
+beta[10]*xd[i,fn[9]]+beta[11]*xd[i,fn[10]]+beta[12]*xd[i,fn[11]]
+beta[13]*xd[i,fn[12]]+beta[14]*xd[i,fn[13]]+beta[15]*xd[i,fn[14]]
+beta[16]*xd[i,fn[15]]
然后用predict进行预测:
pre <-predict(g$glmnet.fit,newx=xd,s=g$lambda.1se, type='link')
这一句算出的结果,我一直以为就是score,但和score对比完全不同
用这个预测向量去预测效果不错,但我并不知道用type='link'得到的这个向量和score有什么关系?
如果是没关系的,那么这个预测向量又是怎样算出来的呢?说明文档说是线性模型的预测值,不就应该是score吗?