התקבצות עם מודל תערובת תהליכים של Dirichlet ב-Java PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אשכול עם דגם תערובת Dirichlet בתבנית Java

במאמרים הקודמים דנו בפירוט ב- דגמי תערובת של תהליך הרישלט וכיצד ניתן להשתמש בהם בניתוח אשכולות. במאמר זה נציג יישום Java של שני דגמי DPMM שונים: מודל התערובת הרגיל רב-משתני של Dirichlet אשר יכול לשמש לאשכול נתונים גאוסיים ואת מודל התערובת Dirichlet-Multinomial המשמש לאשכול מסמכים. קוד Java מקורו תחת רישיון GPL v3 וניתן להוריד אותו בחינם GitHub.

עדכון: מסגרת הלמידה על מכונה של Datumbox היא כעת קוד פתוח וחינמית ל- להורדה. עיין בחבילה com.datumbox.framework.machinelearning.clustering כדי לראות את היישום של דגמי תערובת Dirichlet בתבנית Java.

יישום מודל תערובת של תהליך Dirichlet ב- Java

הקוד מיישם את מודל תערובת Dirichlet Process עם Gibbs Sampler ומשתמש במתמטיקה 3.3 של Apache Commons כספריית מטריצות. זה מורשה תחת GPLv3 אז אל תהסס להשתמש בו, לשנות אותו ולהפיץ אותו מחדש באופן חופשי ותוכל להוריד את יישום Java מ GitHub. שים לב שתוכל למצוא את כל החלקים התיאורטיים של שיטת האשכולות בחמש המאמרים הקודמים והערות מפורטות של Javadoc ליישום בקוד המקור.

להלן נפרט תיאור ברמה גבוהה על הקוד:

1. מחלקת DPMM

ה- DPMM הוא מעמד מופשט ופועל כבסיס למודלים השונים, ומיישם את תהליך המסעדה הסינית ומכיל את סמפלר ג'יבס התמוטט. יש לו את אשכול השיטה הציבורית () המקבל את מערך הנתונים כרשימת נקודות ואחראי על ביצוע ניתוח האשכול. שיטות שימושיות נוספות בכיתה הן getPointAssignments () המשמש לאחזור מטלות האשכול לאחר סיום האשכולות ו- getClusterList () המשמש לקבלת רשימת האשכולות המזוהים. ה- DPMM מכיל את אשכול המעמד המופשט הסטטי המקונן; הוא מכיל מספר שיטות מופשטות הנוגעות לניהול הנקודות ולהערכת קובץ ה- PDF האחורי המשמשות להערכת מטלות האשכול.

2. מעמד GaussianDPMM

ה- GaussianDPMM הוא הטמעת מודל תערובת רגילה רב-משתנה של Dirichlet ומרחיב את מחלקת DPMM. הוא מכיל את כל השיטות הנדרשות לאמידת ההסתברויות בהנחה הגאוסית. יתר על כן הוא מכיל את אשכול המחלקה המקונן הסטטי המיישם את כל השיטות המופשטות של מחלקת DPMM.Cluster.

3. מחלקה multinomialDPMM

ה- MultinomialDPMM מיישם את מודל התערובת Dirichlet-Multinomial ומרחיב את מעמד ה- DPMM. בדומה למחלקת GaussianDPMM, היא מכילה את כל השיטות הנדרשות לאמידת ההסתברויות בהנחת Multinomial-Dirichlet ומכילה את אשכול המחלקה המקונן הסטטי המיישם את השיטות המופשטות של DPMM. Cluster.

4. כיתת SRS

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

5. כיתת נקודה

המחלקה פוינט משמשת כפולה המאחסנת את נתוני הרשומה יחד עם מזהה.

6. Apache Commons Math Lib

Apache Commons Math 3.3 lib משמש לכפל מטריקס וזה התלות היחידה ביישום שלנו.

7. DPMM מחלקה לדוגמא

מחלקה זו מכילה דוגמאות לשימוש ביישום Java.

שימוש ביישום Java

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

List<Point> pointList = new ArrayList<>();
//add records in pointList

//Dirichlet Process parameter
Integer dimensionality = 2;
double alpha = 1.0;

//Hyper parameters of Base Function
int kappa0 = 0;
int nu0 = 1;
RealVector mu0 = new ArrayRealVector(new double[]{0.0, 0.0});
RealMatrix psi0 = new BlockRealMatrix(new double[][]{{1.0,0.0},{0.0,1.0}});

//Create a DPMM object
DPMM dpmm = new GaussianDPMM(dimensionality, alpha, kappa0, nu0, mu0, psi0);

int maxIterations = 100;
int performedIterations = dpmm.cluster(pointList, maxIterations);

//get a list with the point ids and their assignments
Map<Integer, Integer> zi = dpmm.getPointAssignments();

להלן נוכל לראות את תוצאות הפעלת האלגוריתם על מערך נתונים סינתטי המורכב מ -300 נקודות נתונים. הנקודות נוצרו במקור על ידי 3 התפלגויות שונות: N ([10,50], I), N ([50,10], I) ו- N ([150,100], I).

פיזור עלילה 1
איור 1: עלילת פיזור של מערך הדגמה

האלגוריתם לאחר ריצה של 10 חזרות, זיהה את שלושת מרכזי האשכול הבאים: [3, 10.17], [50.11, 49.99] ו- [10.13, 149.97]. לבסוף מכיוון שאנו מתייחסים לכל דבר באופן בייזיאני, אנו מסוגלים לא רק לספק הערכות נקודה בודדות של מרכזי האשכול אלא גם את חלוקת ההסתברות שלהם באמצעות נוסחה המשוואה.

scatterplot2-mapmap
איור 2: פיזור עלילת ההסתברויות למרכזי אשכולות

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

כדי להשתמש ביישום Java ביישומים בעולם האמיתי עליך לכתוב קוד חיצוני הממיר את מערך הנתונים המקורי שלך לפורמט הנדרש. יתרה מכך ייתכן שיהיה צורך בקוד נוסף אם ברצונך לדמיין את הפלט כפי שנראה לעיל. לבסוף שימו לב כי ספריית Apache Commons Math כלולה בפרויקט ולכן אין צורך בתצורה נוספת להפעלת הדגמות.

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

בול זמן:

עוד מ דטומבוקס