楼主: newcafans
10859 9

[问答] 用glmnet包做lasso回归,做预测时关于type=“link”的疑问 [推广有奖]

  • 0关注
  • 0粉丝

小学生

71%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
118 点
帖子
8
精华
0
在线时间
6 小时
注册时间
2017-6-1
最后登录
2017-8-15

楼主
newcafans 发表于 2017-6-1 12:34:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我用R语言的glmnet包做Lasso回归,做的是二分类,代码如下:

g <- cv.glmnet(xd, yd,family="binomial",type.measure="auc", nfolds = 10)
g$lambda.1se #最佳lambda值
g.best <- g$glmnet.fit #对应的最佳模型
g.coef <- coef(g$glmnet.fit, s = g$lambda.1se) #系数
xishu<-as.matrix(g.coef[which(g.coef != 0)] )#选择的变量
fn<-feature_NUM[which(g.coef != 0)]




我用以上代码提取了模型中的变量与系数。算出了每个例子的分值score


然后用predict进行预测:
pre <-predict(g$glmnet.fit,newx=xd,s=g$lambda.1se, type='link')

这一句算出的结果,我一直以为就是score,但和score对比完全不同
(不过我知道,把这个向量作logit变换就是type='response'的结果,然后以0.5作截点分类就是type='class'的结果)
用这个预测向量去预测效果不错,但我并不知道用type='link'得到的这个向量和score有什么关系?
如果是没关系的,那么这个预测向量又是怎样算出来的呢?说明文档说是线性模型的预测值,不就应该是score吗?


恳请有相关经验的大神来解答一下这个疑问。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:glmnet LASSO type link MNE

沙发
newcafans 发表于 2017-6-1 12:36:40
怎么美元符号把整个排版都弄乱了

藤椅
foozhencheng 学生认证  发表于 2017-6-1 23:56:47 来自手机
LZ说的score指的是什么?另外,如果用cv.glmnet拟合出来的model,可以直接用predict去预测(详见predict.cv.glmnet)。根据GLM的推导,link预测的值是linear predictor的值,也就是η,而η=Xβ。如果link function为g(这里是logit),那么E(Y|X)=g^{-1}(η)。最后,建议LZ直接type = \'class\'就好~

板凳
jameschin007 发表于 2017-6-2 14:15:08
foozhencheng 发表于 2017-6-1 23:56
LZ说的score指的是什么?另外,如果用cv.glmnet拟合出来的model,可以直接用predict去预测(详见predict.cv ...
我理解楼主说的score就是ita。

报纸
newcafans 发表于 2017-6-2 15:03:47
foozhencheng 发表于 2017-6-1 23:56
LZ说的score指的是什么?另外,如果用cv.glmnet拟合出来的model,可以直接用predict去预测(详见predict.cv ...
谢谢大神回复解答
嗯,这个score应该就是η,就是每个变量的系数乘以对应的变量的值相加得到的,应该就是η=Xβ,但很奇怪用link预测的值和我自己另外写式子算的值不一样,不知道是不是中间做了什么变换?!
另外“如果link function为g(这里是logit),那么E(Y|X)=g^{-1}(η)。”这一句不太懂...
type=class效果没link的好

地板
newcafans 发表于 2017-6-2 15:04:11
jameschin007 发表于 2017-6-2 14:15
我理解楼主说的score就是ita。
嗯,你说得没错

7
foozhencheng 学生认证  发表于 2017-6-2 15:12:05 来自手机
newcafans 发表于 2017-6-2 15:03
谢谢大神回复解答
嗯,这个score应该就是η,就是每个变量的系数乘以对应的变量的值相加得到的,应该就是 ...
就是说如果你想从η算probability,需要probability=logit^{-1}(η),或者说η=logit(probability)

8
newcafans 发表于 2017-6-2 16:08:41
foozhencheng 发表于 2017-6-2 15:12
就是说如果你想从η算probability,需要probability=logit^{-1}(η),或者说η=logit(probability)
η到probablility我搞清楚了,但始终不知道为啥用算式算出的η和predict预测的η为啥不一样。

我算的η是这样算的:xishu就是β,xd就是X
score<-xishu[1]+xishu[2]*xd[i,126]+xishu[3]*xd[i,185]
  +xishu[4]*xd[i,198]+xishu[5]*xd[i,244]+xishu[6]*xd[i,491]
  +xishu[7]*xd[i,536]+xishu[8]*xd[i,549]+xishu[9]*xd[i,551]
  +xishu[10]*xd[i,557]+xishu[11]*xd[i,603]+xishu[12]*xd[i,605]
  +xishu[13]*xd[i,610]+xishu[14]*xd[i,702]+xishu[15]*xd[i,737]
  +xishu[16]*xd[i,795]

9
我那门啊 发表于 2019-1-13 20:15:53
楼主现在解决这个问题了吗?我现在做的也发现和predict和自己算的不一样,求解答

10
red88 发表于 2020-6-16 16:23:29
做了测试变换公式为:ln(软件预测值/(1-软件预测值))=score  ,也就是 exp(score)=软件预测值,查了一个下午,终于搞明白了!!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-9 06:47