שְׁאֵלָה:
הדרך הטובה ביותר להציג יער אקראי בפרסום?
danielsbrewer
2010-09-03 18:50:52 UTC
view on stackexchange narkive permalink

אני משתמש באלגוריתם היער האקראי כמסווג חזק של שתי קבוצות במחקר microarray עם 1000 תכונות.

  • מהי הדרך הטובה ביותר להציג את היער האקראי כך שיהיה מספיק מידע כדי להפוך אותו להפקה במאמר?
  • האם יש שיטת עלילה ב- R כדי לשרטט בפועל העץ, אם יש מספר מצומצם של מאפיינים?
  • האם אומדן ה- OOB לשיעור השגיאות הוא הנתון הטוב ביותר לצטט?
אין עץ אחד ... אבל עיין בתגובת @Shane's לתכנון אחד מהם למטרות המחשה.
בהחלט כדאי לשקול אקראיForest :: partialPlot, http://stats.stackexchange.com/questions/92150/r-what-do-i-see-in-partial-dependence-plots-of-gbm-and-randomforest/112603# 112603
אתה יכול לנסות את חבילת הדמיית היער האקראית שלי, forestFloor - http://forestfloor.dk/
שְׁלוֹשָׁה תשובות:
#1
+50
Shane
2010-09-03 19:32:35 UTC
view on stackexchange narkive permalink

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

בנוגע להדמיה, ליאו בריימן עשה עבודה מעניינת בנושא זה (ראה דף הבית שלו, בפרט החלק בגרפיקה).

אך אם אתה משתמש ב- R, אז לחבילה randomForest יש כמה פונקציות שימושיות:

  נתונים (mtcars) mtcars.rf <- randomForest (mpg ~., data = mtcars, ntree = 1000, keep.forest = FALSE, חשיבות = TRUE) מגרש (mtcars.rf, log = "y") varImpPlot (mtcars.rf)  

ו-

  set.seed (1) data (iris) iris.rf <- randomForest (Species ~., iris, קרבה = TRUE, keep.forest = FALSE) MDSplot (iris.rf, iris $ Species)  

אני לא מודע לדרך פשוטה לשרטט עץ בפועל, אבל אתה יכול להשתמש הפונקציה getTree כדי לאחזר את העץ ולשרטט אותו בנפרד.

  getTree (randomForest (קשתית העין [, - 5], קשתית העין [, 5], ntree = 10) , 3, labelVar = TRUE)  

ה במצגת Strobl / Zeileis בנושא "מדוע וכיצד להשתמש במדידות חשיבות משתנות של יער (וכיצד לא כדאי)" יש דוגמאות לעצים שחייב להיות מיוצרים בצורה זו. ל פוסט בבלוג זה על דגמי עצים יש כמה דוגמאות נחמדות לחלקי עץ CART בהם תוכלו להשתמש למשל.

כפי שהעירה @chl, עץ יחיד אינו משמעותי במיוחד בכך. בהקשר, כל כך קצר להשתמש בו כדי להסביר מהו יער אקראי, לא הייתי כולל את זה במאמר.

סיומת קטנה על חלקות: 'plot.randomForest' מראה כיצד שגיאת OOB ושגיאת OOB בכיתה התפתחו עם הגדלת מספר העצים; 'varImpPlot' מציג מדדי חשיבות לתכונות עבור מאפיינים עליונים ו- 'MDSplot' את כל האובייקטים שתוכננו בהקרנת 2D של מדד הקרבה של אובייקט RF.
+1 לצטט את הפונקציה `MDSplot (). אני חייב להודות שלעתים קרובות אני משתמש ב- RF כדרך להבליט אשכולות של אנשים (בהתבסס על מדד הקרבה של RF) במקום לבחור את התכונות הטובות ביותר. לרוב הקלינאים קוראים הרבה יותר עלילות כאלה מאשר נקודת העלילה של var. חֲשִׁיבוּת...
#2
+18
user88
2010-09-04 00:22:57 UTC
view on stackexchange narkive permalink
  1. כפי שכתב שיין; הפוך אותו למחקר לשחזור + כולל זרעים אקראיים, מכיוון שה- RF הוא סטוכסטי.
  2. קודם כל, זמירת עצים בודדים ויוצרים RF זה שטויות; זה מסווג אנסמבל, זה הגיוני רק בכללותו. אבל אפילו לתכנן את כל היער זה שטויות - זהו מסווג של קופסאות שחורות, ולכן הוא לא נועד להסביר את הנתונים במבנה שלהם, אלא לשכפל את התהליך המקורי. במקום זאת, בצע חלק מהעלילות ששני הציע.
  3. בפועל, OOB הוא קירוב שגיאות טוב מאוד; עם זאת זו אינה עובדה מקובלת, ולכן לפרסום עדיף להכין קורות חיים לאישורה.
אז @mbq כשאתה עושה קורות חיים זה תקף לעשות תחילה יער אקראי עם כל הדגימות שנבחרו; לעשות את זה פעמיים פעם עם כולם ושנית עם 10 המשתנים המובילים (שניתן לצטט במאמר). ואז בצע אימות מוצלב של אחד (בחירת 10 הגנים המובילים בכל ניסיון) וציטט את שגיאת קורות החיים מזה?
@danielsbrewer הייתי עושה זאת בדרך אחרת (לשים לב יותר לבחירת התכונות), אבל זה נכון; עם זאת, זה יותר בנושא בחירת ביצועי תכונות RF מאשר בבחירת הסמנים הטובים ביותר לבעיה הביולוגית שלך.
@mbq, מצטער להמשיך, אבל אני מאוד חדש בתחום הסיווג הנטוי למכונה. אז אם היית רוצה לבחור את הסמנים המפליגים הטובים ביותר לבעיה שלי, איך היית מתמודד עם זה? ועל איזו שגיאה היית מדווח? אני מעריך את כל התשומות.
הבעיה העיקרית היא שקשה באמת להשוות בין שני מודלים (מודל = שיטת למידה + שיטת בחירת תכונות), אך לפשטות אתה יכול פשוט להניח משהו (כמו שאשתמש ב- RF ואבחר בתכונות 10 הראשונות) ולהודות שאתה יודע שזה יכול להיות לא מיטבי, אבל אתה מסכים לכך בזמן שאתה למשל מרוצה מהדיוק. במקרה כזה הבעיה היחידה שלך היא להסיר הטיה של בחירת תכונות. tbc.
אז הייתי עושה שקיות פשוטות: אתה יוצר 10 (או 30 אם יש לך מחשב טוב) דוגמאות משנה אקראיות של אובייקטים (נניח על ידי בחירה אקראית עם החלפה), מאמן RF על כל אחד, מקבל את החשיבות שלו ומחזיר דרגה של כל אחד ממוצע של התכונה על כל החזרות (התכונה הטובה ביותר זוכה לדרגה 1, השנייה הטובה ביותר 2 וכן הלאה; ניתן לממוצע אותה כך שהתכונה שהייתה 12 פעמים 1 ו 18 פעמים 2 יש דירוג של 1.6), בחר לבסוף 10 עם הדרגות הטובות ביותר וקרא להם הסמנים שלך. לאחר מכן השתמש בקורות חיים (LOO, פי 10 או רצוי דגימה אקראית) כדי לקבל קירוב שגיאה של RF באמצעות הסמנים שלך. tbc.
דווח על הדרגות (אני מקווה שהם צריכים להיות די ליד 1,2,3 ...), שגיאת קורות חיים עם הסטייה שלה (רק ספור סטיית תקן של תוצאות כל סיבוב קורות חיים) ושגיאת OOB (כנראה זהה לשגיאת קורות חיים). כתב ויתור: זו לא שיטה לבחירת מספר התכונות האופטימלי - אתה צריך RFE וקורות חיים מקוננים בכדי לעשות זאת. כתב ויתור 2: לא עבדתי עם נתונים כאלה, ולכן אני לא מתחייב שהשופטים שלך יהיו מרוצים מכך (אם כי אני מאמין שהם צריכים).
#3
+13
Patrick Caldon
2012-12-05 11:03:49 UTC
view on stackexchange narkive permalink

זכור את האזהרות בתשובות האחרות לגבי העלילה בהכרח משמעותיות. אבל אם אתה רוצה עלילה למטרות המחשה / פדגוגיות, קטע ה- R הבא עשוי להיות שימושי. לא קשה להוסיף "נקודת פיצול" לטקסט הקצה אם אתה זקוק לו.

  to.dendrogram <- function (dfrep, rownum = 1, height.increment = 0.1) {if (dfrep [rownum, 'status'] == -1) {rval <- list () attr (rval, "members") <- 1 attr (rval, "גובה") <- 0.0 attr (rval, "label") < - dfrep [rownum, 'prediction'] attr (rval, "leaf") <- TRUE} אחר {## שימו לב לשינוי "ל-.dendrogram" ולא "to.dendogram" שמאלה <- to.dendrogram (dfrep, dfrep [rownum, 'בת שמאל'], גובה. תוספת) ימין <- to.dendrogram (dfrep, dfrep [rownum, 'בת ימין'], height. increment) rval <- רשימה (שמאל, ימין) attr (rval, " חברים ") <- attr (שמאל," חברים ") + attr (מימין," חברים ") attr (rval," גובה ") <- מקסימום (attr (שמאל," גובה "), attr (מימין," גובה " )) + height.increment attr (rval, "leaf") <- FALSE attr (rval, "edgetext") <- dfrep [rownum, 'split var'] # להוספת נקודה מפוצלת i n Dendrogram #attr (rval, "edgetext") <- הדבק (dfrep [rownum, 'split var'], "\ n<", עגול (dfrep [rownum, 'point split'], ספרות = 2), "= > ", sep =" ")} class (rval) <-" dendrogram "return (rval)} mod <- randomForest (Species ~., data = iris) tree <- getTree (mod, 1, labelVar = TRUE) d < - אל.dendrogram (עץ) str (d) חלקה (d, center = TRUE, leaflab = 'none', edgePar = list (t.cex = 1, p.col = NA, p.lty = 0))  קוד> 
הקוד מייצר חלקת עץ טובה מאוד.אך הערכים אינם מוצגים.כנראה שיש להוסיף פונקציית טקסט () לאחר הצהרה אחרונה (עלילה).


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