[問題] glm跑logistic

看板R_Language作者 (<>)時間7年前 (2017/04/26 00:58), 7年前編輯推噓5(5025)
留言30則, 5人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1493139483.A.5BF.html

04/26 00:59, , 1F
說明一下 前面的model1是有轉成as.model的方式
04/26 00:59, 1F

04/26 00:59, , 2F
glmnet是要吃矩陣 所以那邊的model1是另外的
04/26 00:59, 2F

04/26 01:49, , 3F
經常是完美預測造成。例如x=A則一定Y=T。
04/26 01:49, 3F

04/26 01:50, , 4F
04/26 01:50, 4F

04/26 01:52, , 5F
可多利用 http://tinyurl.com/mnerchs 搜本看板舊文
04/26 01:52, 5F

04/26 02:22, , 6F
謝謝前輩,有看過舊文,但是我照文中連結上面的方法做
04/26 02:22, 6F

04/26 02:22, , 7F
的解是代表什麼意思…都是logistic regression
04/26 02:22, 7F
※ 編輯: pk790127 (61.227.242.178), 04/26/2017 02:35:04

04/26 11:38, , 8F
bayesglm 是貝氏推論。glmnet是lasso演算法。
04/26 11:38, 8F

04/26 11:39, , 9F
這些東西比較複雜,還沒搞懂前套用要小心。
04/26 11:39, 9F
謝謝~ 我知道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

04/26 16:37, , 10F
所以用glmnet就能跑正規化了嗎?
04/26 16:37, 10F

04/26 17:32, , 11F
是的 調整lambda=0之後可行 但是還是想知道glm的錯誤
04/26 17:32, 11F

04/26 17:32, , 12F
或是有其他logistic regression的套件 可以讓我嘗試
04/26 17:32, 12F

04/27 04:07, , 13F
第一個警告要增加iteration次數 第二個則要檢查資料
04/27 04:07, 13F

04/27 04:14, , 14F
資料怎麼收集的? 有多少cases? 變項有哪些?
04/27 04:14, 14F

04/27 04:15, , 15F
要跑電腦都會讓你跑 但是有警告就代表資料有點問題
04/27 04:15, 15F

04/27 07:12, , 16F
樣本大約260個 變數有24個其中有類別(二元)有連續
04/27 07:12, 16F

04/27 14:29, , 17F
變數有點多......如三樓所說有overfitting的問題
04/27 14:29, 17F

04/27 14:30, , 18F
這種情況下分析結果未必能用 因為很可能機率預測值大於1
04/27 14:30, 18F

04/27 14:30, , 19F
建議用相關係數矩陣看一下,拿掉一些自變項
04/27 14:30, 19F

04/27 14:38, , 20F
類別變數(包含依變數)則用交叉表,可能有完美預測的情形
04/27 14:38, 20F

04/27 16:52, , 21F
變數這麼多,應該會有perfect split, 也就是在某些類別型
04/27 16:52, 21F

04/27 16:52, , 22F
變數的狀態下有y全0或1的狀況。這時候training會因為機率
04/27 16:52, 22F

04/27 16:53, , 23F
值是0 or 1, 導致你的logistic regression在linear part
04/27 16:53, 23F

04/27 16:53, , 24F
必須要是-Inf / Inf ,進而導致數值收斂的困難
04/27 16:53, 24F

04/27 16:54, , 25F
實務上除了去找方法修剪feature外,也可以把lambda打開用
04/27 16:54, 25F

04/27 16:54, , 26F
regularization解決收歛性的問題。你可以利用cross
04/27 16:54, 26F

04/27 16:54, , 27F
validation來挑適當的lamda值,對你的預測也有幫助
04/27 16:54, 27F

04/27 16:55, , 28F
最後,小心若資料的label的0/1比率差很大,那準確率沒有
04/27 16:55, 28F

04/27 16:55, , 29F
參考性。
04/27 16:55, 29F

04/28 01:09, , 30F
謝謝兩位前輩
04/28 01:09, 30F
文章代碼(AID): #1O_u0RM_ (R_Language)