精華區beta R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用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
andrew43: 另見 http://tinyurl.com/mou43rh 04/26 01:50
andrew43: 可多利用 http://tinyurl.com/mnerchs 搜本看板舊文 04/26 01:52
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