אלגוריתם אשכולות היררכי פיתון!

צומת המקור: 1055669

מאמר זה פורסם כחלק מה- בלוגאת מדע הנתונים

מבוא

במאמר זה, נסתכל על גישה שונה ל-K Means Clustering המכונה Clustering היררכי. בהשוואה ל-K Means או K Mode, ל-Clustering היררכי יש אלגוריתם בסיס שונה לאופן פעולתו של מנגנון האשכולות. צבירת היררכיה משתמשת בטכניקות אגלומרטיביות או מחלקות, בעוד K Means משתמשת בשילוב של מרחק מרכזי ומרחק אוקלידי כדי ליצור צבירים. ניתן להשתמש בדנדרוגרמות כדי להמחיש אשכולות באשכולות היררכית, מה שיכול לעזור בפרשנות טובה יותר של תוצאות באמצעות טקסונומיות משמעותיות. אנחנו לא צריכים לציין את מספר האשכולות בעת ביצוע דנדרוגרמה.

כאן אנו משתמשים ב-Python כדי להסביר את מודל האשכולות ההיררכית. יש לנו 200 נתונים של לקוחות קניונים במערך הנתונים שלנו. מזהה הלקוח, הז'אנר, הגיל, ההכנסה השנתית וציון ההוצאה של כל לקוח כלולים במסגרת הנתונים. הסכום המחושב עבור ציוני ההוצאות של כל אחד מהלקוחות שלהם מבוסס על מספר קריטריונים, כגון ההכנסה שלהם, מספר הפעמים בשבוע שהם מבקרים בקניון וכמות הכסף שהם הוציאו בשנה. ציון זה נע בין 1 ל-100. מכיוון שאיננו יודעים את התשובות, בעיה עסקית הופכת לבעיית אשכולות. הקטגוריות האחרונות של הנתונים אינן ידועות לנו. כתוצאה מכך, המטרה שלנו היא לגלות כמה אשכולות לקוחות שלא היו ידועים בעבר.

אבל תחילה, אנו בוחנים כמה מונחים חשובים בקיבוץ היררכי.

מונחים חשובים באשכול הירארכי

שיטות קישור

אם יש (א) תצפיות מקוריות a[0],...,a[|a|1] בצביר (א) ו-(ב) עצמים מקוריים b[0],...,b[|b|1] בצביר ( ב), אז עלינו לחשב את המרחק בין שני אשכולות (א) ו-(ב) כדי לשלב אותם (ב). נניח שיש נקודה (ד) שלא הוקצתה לאף אחד מהאשכולות. נצטרך להבין כמה רחוק האשכול (א) מהאשכול (ד) והאשכול (ב) מהאשכול (ד).

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

קישור יחיד - המרחקים בין האיברים הדומים ביותר מחושבים עבור כל זוג אשכולות, ולאחר מכן איחוד האשכולות מבוסס על המרחק הקצר ביותר.

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

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

קישור חציוני - אנו משתמשים במרחק החציוני במקום המרחק הממוצע באופן דומה להצמדה הממוצעת.

קישור מחלקה - קובע את המרחק בין אשכולות באמצעות שיטת ניתוח השונות.

קישור מרכזי - המרכז של כל אשכול מחושב על ידי ממוצע של כל הנקודות המוקצות לאשכול, והמרחק בין אשכולות מחושב לאחר מכן באמצעות מרכז זה.

חישוב מרחק

קיימות גישות מרובות לחישוב מרחק בין שני אשכולות או יותר, כאשר המרחק האוקלידי הוא הפופולרי ביותר. מדדי מרחק אחרים, כגון Minkowski, City Block, Hamming, Jaccard, ו-Chebyshev, יכולים לשמש גם עם אשכול היררכי. למדדי מרחק שונים יש השפעה על קיבוץ היררכי, כפי שמוצג באיור 2.

חישוב מרחק

דנדרוגרם

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

דוגמה

כעת אנו בוחנים דוגמאות באמצעות Python כדי להדגים את מודל האשכולות ההיררכית. יש לנו 200 נתונים של לקוחות קניונים אצלנו מערך נתונים. מזהה הלקוח, הז'אנר, הגיל, ההכנסה השנתית וציון ההוצאה של כל לקוח כלולים במסגרת הנתונים. הסכום שחושב עבור ציוני ההוצאות של כל אחד מהלקוחות שלהם מבוסס על מספר קריטריונים, כגון ההכנסה שלהם, מספר הפעמים בשבוע שהם מבקרים בקניון והכסף שהם הוציאו במשך שנה. ציון זה נע בין 1 ל-100. מכיוון שאיננו יודעים את התשובות, בעיה עסקית הופכת לבעיית אשכולות.

#1 ייבוא ​​הספריות
יבוא numpy כ-np יבוא matplotlib.pyplot כ-plt יבוא פנדות כ-pd
#2 ייבוא ​​מערך הנתונים של Mall_Customers על ידי פנדות
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

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

#3 שימוש בדנדרוגרמה כדי למצוא את המספרים האופטימליים של אשכולות. # הדבר הראשון שאנחנו הולכים לעשות הוא לייבא ספריית scipy. scipy היא ספריית קוד פתוח # Python המכילה כלים לביצוע אשכולות היררכיים ובניית דנדרוגרמות. # ייבא רק את הכלי הדרוש. ייבוא ​​scipy.cluster.hierarchy בתור sch 
#תנו ליצור משתנה דנדרוגרמה # קישור הוא למעשה האלגוריתם עצמו של clustering היררכי ואז ב-#linkage עלינו לציין על אילו נתונים אנו מיישמים ומעורבים. זהו X מערך נתונים dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('מרחקים אוקלידיים') plt. הופעה()

שיטת וורד היא שיטה המנסה להפחית שונות בתוך כל אשכול. זה כמעט כמו כשהשתמשנו ב-K-means כדי למזער את ה-wcss כדי לשרטט את תרשים שיטת המרפק שלנו; ההבדל היחיד הוא שבמקום wcss, אנחנו ממזערים את גרסאות בתוך אשכול. בתוך כל אשכול, זו השונות. הדנדרוגרמה מוצגת להלן.

דנדוגרמה

לקוחות מיוצגים על ציר ה-x, והמרחק האוקלידי בין אשכולות מיוצג על ציר ה-y. כיצד נבין את המספר הטוב ביותר של אשכולות בהתבסס על תרשים זה? אנו רוצים למצוא את המרחק האנכי הארוך ביותר שאנו יכולים מבלי לחצות קווים אופקיים, שהוא הקו האדום בתרשים למעלה. בואו נספור את השורות בתרשים ונבין כמה אשכולות הם הטובים ביותר. עבור מערך נתונים זה, מספר האשכול יהיה 5.

#4 התאמת אשכולות היררכיים למערך הנתונים של Mall_Customes # ישנם שני אלגוריתמים לאשכולות היררכית: אשכול היררכי אגלומרטיבי ו-# אשכול היררכי מחלק. אנו בוחרים בשיטת מרחק אוקלידית עבור מחלקת האלגוריתם # שלנו מ-sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, זיקה = 'euclidean', linkage ='ward') # בוא ננסה להתאים את אלגוריתם האשכולות ההיררכיים למערך X תוך יצירת וקטור # אשכולות שמספר לכל לקוח לאיזה אשכול הלקוח שייך. y_hc=hc.fit_predict(X)
# 5 הדמיית האשכולות. קוד זה דומה לקוד ההדמיה של k-means. #אנחנו מחליפים רק את שם הווקטור y_kmeans ל-y_hc עבור האשכול ההיררכי plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'אשכול 1') plt.scatter(X[y_hc==1, 0], X[y_hc===1, 1], s=100, c='blue', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='green', label ='Cluster 3') plt.scatter(X[y_hc===3, 0] , X[y_hc==3, 1], s=100, c='cyan', label ='Cluster 4') plt.scatter(X[y_hc===4, 0], X[y_hc===4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('Clusters of Customers (Clusters Hirarchical Clustering Model)') plt.xlabel('Annual Income(k$)') plt.ylabel ('Spending Score(1-100') plt.show()
אשכולות | אשכול היררכי
אשכול 1 (אדום), אשכול 2 (כחול), אשכול 3 (ירוק), אשכול 4 (ציאן), אשכול 5 (מגנטה)

ניתן להתייחס לאשכולות הללו כאל פלח הלקוחות של הקניון.

זה כל מה שיש למודל אשכול היררכי סטנדרטי. מערך הנתונים כמו גם כל הקודים זמינים בסעיף Github.

סיכום

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

EndNote

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

על המחבר

הרדיקומאר מ' דאדוק
מנתח נתונים | מומחה לניתוח נתונים דיגיטלי | לומד מדעי נתונים
התחבר איתי הלאה Linkedin
התחבר איתי הלאה GitHub

אמצעי התקשורת המוצגים במאמר זה אינם בבעלות Analytics Vidhya ומשמשים את שיקול הדעת של המחבר.

מקור: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

בול זמן:

עוד מ אנליטיקה וידיה