שְׁאֵלָה:
חלופות לרגרסיה לוגיסטית ב- R
Tal Galili
2010-08-31 15:02:08 UTC
view on stackexchange narkive permalink

הייתי רוצה כמה שיותר אלגוריתמים שמבצעים את אותה משימה כמו רגרסיה לוגיסטית. כלומר אלגוריתמים / מודלים שיכולים לתת חיזוי לתגובה בינארית (Y) עם משתנה הסבר כלשהו (X).

אני אשמח אם אחרי שתקרא שם לאלגוריתם, אם תראה גם איך הנה את זה ב- R. הנה קוד שניתן לעדכן עם דגמים אחרים:

  set.seed (55) n <- 100x <- c (rnorm (n), 1 + rnorm ( n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, family = binomial) plot (y ~ x) abline (lm (y ~ x), col = 'אדום', lty = 2) xx <- seq (min (x), max (x), אורך = 100) yy <- לחזות (r, data.frame (x = xx), סוג = 'תגובה' ) שורות (xx, yy, col = 'כחול', lwd = 5, lty = 2) כותרת (main = 'רגרסיה לוגיסטית עם פונקציית "glm")  
האם עלינו להניח שאתה שוקל קבוצה מנבאת קבועה, כלומר אתה מעוניין לקבל חיזוי אמין בהתחשב בניבוי $ k $, או שאתה מעוניין גם באיזושהי ענישה על $ X_j \ quad (j = 1 \ נקודות k) $?
אני מודה שעבור האינטרס האישי שלי, לא יהיה צורך בהעניש, ולמען הידע כאן הייתי אומר ששניהם תשובות רלוונטיות :)
להתייחסות עתידית: ייתכן שהיית יכול לבטא שאלה זו באופן שהיינו מאפשרים זאת כשאלה שאינה CW. ראה http://meta.stats.stackexchange.com/questions/290/what-is-community-wiki
תודה על הקישור שיין. דיון מאוד מעניין שפתחת שם. לאחר שקראתי את התשובה של תומאס, אני מאמין שזו עדיין צריכה להיות וויקי בקהילה, מכיוון שכוונתי הייתה למצוא כמה שיותר חלופות (דבר שאני בספק אם מישהו יכול לספק). ובכל זאת, שוב, תודה שהכוונת אותי לשרשור ההוא!
זה לא ממש רחב מכדי שיהיה ניתן לענות עליו - כרגע יש לו 6 תשובות (5 הצביעו).יתר על כן, השאלה מועדת מאוד ומועדפת מאוד, והיא CW.זה צריך להישאר פתוח, IMO.
שֵׁשׁ תשובות:
#1
+29
Joe
2010-08-31 15:13:21 UTC
view on stackexchange narkive permalink

פופולריים כרגע הם RandomForest ו- gbm (הנקראים MART או Gradient Boosting בספרות לימוד מכונה), חלקם של עצים פשוטים. פופולרי גם הוא bayesglm, המשתמש ב- MAP עם קודמים לצורך הסדרה.

  install.packages (c ("randomForest", "gbm", "rpart", "arm")) ספרייה (randomForest) ספרייה (gbm) ספרייה (rpart) ספרייה (זרוע) r1 <- randomForest (y ~ x) r2 <- gbm (y ~ x) r3 <- rpart (y ~ x) r4 <- bayesglm (y ~ x, family = binomial) yy1 <- לנבא (r1, data.frame (x = xx)) yy2 <- לנבא (r2, data.frame (x = xx)) yy3 <- לחזות (r3, data.frame (x = xx)) yy4 <- חיזוי (r4, data.frame (x = xx), סוג = "תגובה")  
#2
+24
Joris Meys
2010-08-31 20:30:47 UTC
view on stackexchange narkive permalink

למעשה, זה תלוי במה שאתה רוצה להשיג. אם אתה מבצע רגרסיה לוגיסטית רק עבור התחזיות, אתה יכול להשתמש בכל שיטת סיווג מפוקחת המתאימה לנתונים שלך. אפשרות נוספת: ניתוח מפלה (lda () ו- qda () מחבילה MASS)

  r <- lda (y ~ x) # השתמש ב- qda () לניתוח אפליה ריבועיxx <- seq (דקות (x), מקסימום (x), אורך = 100) pred <- לחזות (r, data.frame (x = xx), סוג = 'תגובה') yy <- pred $ אחורי [, 2] צבע <- c ( "אדום", "כחול") עלילה (y ~ x, pch = 19, col = color [pred $ class]) קווים (lm (y ~ x), col = 'אדום', lty = 2) קווים (xx, yy, col = 'blue', lwd = 5, lty = 2) title (main = 'lda implement')  

מצד שני, אם אתה זקוק לרווחי ביטחון סביב התחזיות שלך או שגיאות סטנדרטיות באומדנים שלך, רוב אלגוריתמי הסיווג לא יעזרו לך. אתה יכול להשתמש בדגמי תוספים כללים (מעורבים), שעבורם מספר חבילות זמינות. לעתים קרובות אני משתמש בחבילת mgcv של סיימון ווד. מודלים של תוספים כללים מאפשרים גמישות רבה יותר מאשר רגרסיה לוגיסטית, מכיוון שתוכלו להשתמש בקווים לתיאור המנבאים שלכם.

  set.seed (55) דורשים (mgcv) n <- 100x1 <- c (rnorm ( n), 1 + rnorm (n)) x2 <- sqrt (c (rnorm (n, 4), rnorm (n, 6))) y <- c (rep (0, n), rep (1, n) ) r <- gam (y ~ s (x1) + s (x2), family = binomial) xx <- seq (min (x1), max (x1), אורך = 100) xxx <- seq (min (x2) , max (x2), אורך = 100) yy <- לחזות (r, data.frame (x1 = xx, x2 = xxx), סוג = 'תגובה') color = c ("אדום", "כחול") אשכולות < - ifelse (r $ fit.values ​​< 0.5,1,2) מגרש (y ~ x1, pch = 19, col = צבע [אשכול]) שורת קו (lm (y ~ x1), col = 'אדום', lty = 2 ) שורות (xx, yy, col = 'blue', lwd = 5, lty = 2) title (main = 'gam implement')  

יש עוד הרבה מה לעשות:

  op <- par (mfrow = c (2,1)) plot (r, all.terms = T) par (op) סיכום (r) anova (r) r2 <- gam ( y ~ s (x1), family = binomial) anova (r, r2, test = "Chisq")  

...

אני ממליץ על הספר של סיימון ווד על מודלים של תוספים כלליים

#3
+14
Shane
2010-08-31 18:02:43 UTC
view on stackexchange narkive permalink

אני מסכים עם ג'ו והייתי מוסיף:

ניתן להשתמש באופן כללי בשיטת סיווג כלשהי, אם כי היא תלויה בנתונים / במצב. לדוגמה, אתה יכול גם להשתמש ב- SVM, אולי עם המודל הפופולרי C-SVM. הנה דוגמה מ- kernlab המשתמשת בפונקציית ליבה רדיאלית:

  ספרייה (kernlab) x <- rbind (matrix (rnorm (120) ,, 2), matrix (rnorm (120, mean = 3) ,, 2)) y <- מטריצה ​​(c (rep (1,60), rep (-1,60))) svp <- ksvm (x, y, type = "C-svc") חלקה (svp , data = x)  
#4
+12
jphoward
2010-12-31 20:56:21 UTC
view on stackexchange narkive permalink

ישנם כ- 100 דגמי סיווג ורגרסיה הניתנים להכשרה באמצעות חבילת הקרטון. כל אחד ממודלי הסיווג יהווה אופציה עבורך (בניגוד למודלי רגרסיה, הדורשים תגובה רציפה). לדוגמא לאימון יער אקראי:

  רכבת (caret) רכבת (תגובה ~., Data, method = "rf")  

ראה את ה caret מודל אימון מודלים המגיע עם ההפצה לרשימה מלאה של הדגמים הזמינים. הוא מחולק למודלים דו-שימושיים וסיווגים (שניהם תוכלו להשתמש) ורגרסיה בלבד (אשר אינכם יכולים). caret יאמן באופן אוטומטי את הפרמטרים עבור המודל שבחרת עבורך.

#5
+7
IEORTools
2011-11-22 20:26:26 UTC
view on stackexchange narkive permalink

Naive Bayes היא שיטה פשוטה וטובה לאימון נתונים כדי למצוא תגובה בינארית.

  ספרייה (e1071) fitNB <- naiveBayes (y ~ x) מנבאים (fitNB, x)  קוד> 
#6
+3
Ferdi
2016-09-15 18:33:22 UTC
view on stackexchange narkive permalink

ישנן שתי וריאציות של הרגרסיה הלוגיסטית שעדיין לא מתוארות. ראשית, הרגרסיה הלוגיסטית מעריכה הסתברויות תוך שימוש בפונקציה לוגיסטית שהיא התפלגות לוגיסטית מצטברת (המכונה גם sigmoid). ניתן גם לאמוד הסתברויות באמצעות פונקציות הנגזרות מהפצות אחרות. הדרך הנפוצה ביותר מלבד הרגרסיה הלוגיסטית היא הרגרסיה המסתמנת הנגזרת מהתפלגות הנורמלית. לדיון מפורט יותר בין ההבדלים בין probit ו- logit אנא בקרו באתר הבא.

ההבדל בין logit ו- דגמי probit

  set. זרע (55) n <- 100x <- c (rnorm (n), 1 + rnorm (n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, family = binomial (link = "probit")) plot (y ~ x) abline (lm (y ~ x), col = 'red', lty = 2) xx <- seq (min (x), max ( x), אורך = 100) yy <- לחזות (r, data.frame (x = xx), סוג = 'תגובה') שורות (xx, yy, col = 'אדום', lwd = 5, lty = 2) כותרת (main = 'רגרסיה של פרוביט עם פונקציית "glm")  

החלופה השנייה מציינת שבועיות של הפונקציה הלוגיסטית שביצעת. אם יש לך גודל מדגם קטן ו / או חסרים ערכים פונקציה לוגיסטית אינה מומלצת. מכאן שנסיגה לוגיסטית מדויקת היא מודל טוב יותר. סיכויי היומן של התוצאה מעוצבים כשילוב לינארי של משתני החיזוי.

  elrm (נוסחה = y ~ x)  

יתר על כן ישנן חלופות אחרות כמו להזכיר:

  1. שתיים -טבלת מצבי דרך
  2. ניתוח פונקציות מפלה של שתי קבוצות.
  3. T2 של הוטלינג.

הערה אחרונה: רגרסיה לוגיסטית זהה ל רשת עצבית קטנה ללא שכבות נסתרות ורק נקודה אחת ברובד הסופי. לכן אתה יכול להשתמש ביישומים של חבילות רשת עצביות כגון nnet ב- R.

עריכה :

כעבור כמה שבועות הבנתי שיש גם את Winnow ואת אלגוריתם Perceptron. שתיהן מסווגות הפועלות גם לסיווג לשתי קבוצות, אך שתיהן נפלו מהחסר ב -15 השנים האחרונות.



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 2.0 עליו הוא מופץ.
Loading...