作者pk790127 (<>)
看板R_Language
标题[问题] glm跑logistic
时间Wed Apr 26 00:58:01 2017
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:当我使用glm套件中逻辑式回归(y为二元变数"binomial")时
modle <-glm(model1, family = "binomial" ,data = train )
跑出警告讯息
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
上网搜寻了一下解法... 得出
https://goo.gl/aNHEtU
1.用 bayesglm 在arm这个套件
modle <-bayesglm(model1, family = "binomial" ,data = train )
2.用 glmnet套件
modle1 <-glmnet(x=as.matrix(train[,-c(1,26)]) ,y=train[,1] ,family =
"binomial" )
两个作法都可以跑,也可以预测,但是想知道原先glm的错误原因是什麽
train跟test资料应该都没问题 y是二元的数值型态 x有连续也有二元都是数值型态
另外在glmnet预测中 s这个值不填的话栏位很奇怪,看解释是指惩罚参数,但我原先的
logistic没有lamba参数阿..
glm_result <-predict(modle1, s=0.01, as.matrix(test[, -c(1,26)]),
type="response")
这些问题可能是我方法论不熟悉,但请有使用过这些套件的前辈们提点一下
谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.86.113
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1493139483.A.5BF.html
1F:→ pk790127: 说明一下 前面的model1是有转成as.model的方式 04/26 00:59
2F:→ pk790127: glmnet是要吃矩阵 所以那边的model1是另外的 04/26 00:59
3F:→ andrew43: 经常是完美预测造成。例如x=A则一定Y=T。 04/26 01:49
6F:→ pk790127: 谢谢前辈,有看过旧文,但是我照文中连结上面的方法做 04/26 02:22
7F:→ pk790127: 的解是代表什麽意思…都是logistic regression 04/26 02:22
※ 编辑: pk790127 (61.227.242.178), 04/26/2017 02:35:04
8F:→ andrew43: bayesglm 是贝氏推论。glmnet是lasso演算法。 04/26 11:38
9F:→ andrew43: 这些东西比较复杂,还没搞懂前套用要小心。 04/26 11:39
谢谢~ 我知道glmnet是lasso的套件,所以我把lambda设为0当作一般2元回归使用
另外我也有去看旧文所提到的高相关,我做了VIF确定有没有共线性(均<10)
总结来说如果互略那个warning做的glm预测率是95%;另外使用glmnet(lambda=0)预测率
也是95%... 至於那个bayesglm我只知道是事後机率的概念...可能还要研究一下
※ 编辑: pk790127 (140.116.86.113), 04/26/2017 13:21:03
10F:→ clansoda: 所以用glmnet就能跑正规化了吗? 04/26 16:37
11F:→ pk790127: 是的 调整lambda=0之後可行 但是还是想知道glm的错误 04/26 17:32
12F:→ pk790127: 或是有其他logistic regression的套件 可以让我尝试 04/26 17:32
13F:推 fox1375: 第一个警告要增加iteration次数 第二个则要检查资料 04/27 04:07
14F:推 fox1375: 资料怎麽收集的? 有多少cases? 变项有哪些? 04/27 04:14
15F:→ fox1375: 要跑电脑都会让你跑 但是有警告就代表资料有点问题 04/27 04:15
16F:→ pk790127: 样本大约260个 变数有24个其中有类别(二元)有连续 04/27 07:12
17F:推 fox1375: 变数有点多......如三楼所说有overfitting的问题 04/27 14:29
18F:→ fox1375: 这种情况下分析结果未必能用 因为很可能机率预测值大於1 04/27 14:30
19F:→ fox1375: 建议用相关系数矩阵看一下,拿掉一些自变项 04/27 14:30
20F:推 fox1375: 类别变数(包含依变数)则用交叉表,可能有完美预测的情形 04/27 14:38
21F:推 Wush978: 变数这麽多,应该会有perfect split, 也就是在某些类别型 04/27 16:52
22F:→ Wush978: 变数的状态下有y全0或1的状况。这时候training会因为机率 04/27 16:52
23F:→ Wush978: 值是0 or 1, 导致你的logistic regression在linear part 04/27 16:53
24F:→ Wush978: 必须要是-Inf / Inf ,进而导致数值收敛的困难 04/27 16:53
25F:→ Wush978: 实务上除了去找方法修剪feature外,也可以把lambda打开用 04/27 16:54
26F:→ Wush978: regularization解决收歛性的问题。你可以利用cross 04/27 16:54
27F:→ Wush978: validation来挑适当的lamda值,对你的预测也有帮助 04/27 16:54
28F:→ Wush978: 最後,小心若资料的label的0/1比率差很大,那准确率没有 04/27 16:55
29F:→ Wush978: 参考性。 04/27 16:55
30F:→ pk790127: 谢谢两位前辈 04/28 01:09