作者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://www.ptt.cc/bbs/R_Language/M.1493139483.A.5BF.html
→ pk790127: 說明一下 前面的model1是有轉成as.model的方式 04/26 00:59
→ pk790127: glmnet是要吃矩陣 所以那邊的model1是另外的 04/26 00:59
→ andrew43: 經常是完美預測造成。例如x=A則一定Y=T。 04/26 01:49
→ pk790127: 謝謝前輩,有看過舊文,但是我照文中連結上面的方法做 04/26 02:22
→ pk790127: 的解是代表什麼意思…都是logistic regression 04/26 02:22
※ 編輯: pk790127 (61.227.242.178), 04/26/2017 02:35:04
→ andrew43: bayesglm 是貝氏推論。glmnet是lasso演算法。 04/26 11:38
→ 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
→ clansoda: 所以用glmnet就能跑正規化了嗎? 04/26 16:37
→ pk790127: 是的 調整lambda=0之後可行 但是還是想知道glm的錯誤 04/26 17:32
→ pk790127: 或是有其他logistic regression的套件 可以讓我嘗試 04/26 17:32
推 fox1375: 第一個警告要增加iteration次數 第二個則要檢查資料 04/27 04:07
推 fox1375: 資料怎麼收集的? 有多少cases? 變項有哪些? 04/27 04:14
→ fox1375: 要跑電腦都會讓你跑 但是有警告就代表資料有點問題 04/27 04:15
→ pk790127: 樣本大約260個 變數有24個其中有類別(二元)有連續 04/27 07:12
推 fox1375: 變數有點多......如三樓所說有overfitting的問題 04/27 14:29
→ fox1375: 這種情況下分析結果未必能用 因為很可能機率預測值大於1 04/27 14:30
→ fox1375: 建議用相關係數矩陣看一下,拿掉一些自變項 04/27 14:30
推 fox1375: 類別變數(包含依變數)則用交叉表,可能有完美預測的情形 04/27 14:38
推 Wush978: 變數這麼多,應該會有perfect split, 也就是在某些類別型 04/27 16:52
→ Wush978: 變數的狀態下有y全0或1的狀況。這時候training會因為機率 04/27 16:52
→ Wush978: 值是0 or 1, 導致你的logistic regression在linear part 04/27 16:53
→ Wush978: 必須要是-Inf / Inf ,進而導致數值收斂的困難 04/27 16:53
→ Wush978: 實務上除了去找方法修剪feature外,也可以把lambda打開用 04/27 16:54
→ Wush978: regularization解決收歛性的問題。你可以利用cross 04/27 16:54
→ Wush978: validation來挑適當的lamda值,對你的預測也有幫助 04/27 16:54
→ Wush978: 最後,小心若資料的label的0/1比率差很大,那準確率沒有 04/27 16:55
→ Wush978: 參考性。 04/27 16:55
→ pk790127: 謝謝兩位前輩 04/28 01:09