אשכול היררכי הוא אלגוריתם נוסף של למידת מכונה ללא פיקוח, המשמש לקיבוץ מערכי הנתונים הלא מסומנים לאשכול ומכונה גם ניתוח אשכולות היררכי או HCA.
באלגוריתם זה, אנו מפתחים את ההיררכיה של אשכולות בצורה של עץ, ומבנה זה בצורת עץ ידוע בשם דנדרוגרמה .
סורק Java הבא
לפעמים התוצאות של צבירת K-means ושל קיבוץ היררכי עשויות להיראות דומות, אבל שתיהן שונות בהתאם לאופן פעולתן. מכיוון שאין דרישה לקבוע מראש את מספר האשכולות כפי שעשינו באלגוריתם K-Means.
לטכניקת האשכול ההיררכי יש שתי גישות:
למה מקבץ היררכי?
כמו שכבר יש לנו אחרים מקבץ אלגוריתמים כגון K-Means Clustering , אז למה אנחנו צריכים אשכול היררכי? אז, כפי שראינו ב-K-means clustering שיש כמה אתגרים עם האלגוריתם הזה, שהם מספר קבוע מראש של אשכולות, והוא תמיד מנסה ליצור אשכולות באותו גודל. כדי לפתור את שני האתגרים הללו, אנו יכולים לבחור באלגוריתם האשכולות ההיררכית מכיוון שבאלגוריתם זה אין לנו צורך בידע על מספר האשכולות המוגדר מראש.
בנושא זה, נדון באלגוריתם האשכולות האגלומרטיבית ההיררכית.
אשכול היררכי אגלומרטיבי
אלגוריתם האשכולות ההיררכי האגלומרטיבי הוא דוגמה פופולרית של HCA. כדי לקבץ את מערכי הנתונים לאשכולות, הוא עוקב אחר ה גישה מלמטה למעלה . פירוש הדבר, אלגוריתם זה מחשיב כל מערך נתונים כאשכול בודד בהתחלה, ולאחר מכן מתחיל לשלב את זוג האשכולות הקרוב ביותר יחד. הוא עושה זאת עד שכל האשכולות יתמזגו לאשכול יחיד המכיל את כל מערכי הנתונים.
היררכיה זו של אשכולות מיוצגת בצורה של הדנדרוגרמה.
כיצד פועל האשכול ההיררכי האגרסיבי?
ניתן להסביר את פעולתו של אלגוריתם AHC באמצעות השלבים הבאים:
הערה: כדי להבין טוב יותר אשכול היררכי, מומלץ לעיין ב-k-means clustering
מדוד את המרחק בין שני אשכולות
כפי שראינו, ה המרחק הקרוב ביותר בין שני האשכולות הוא קריטי לאשכול ההיררכי. ישנן דרכים שונות לחישוב המרחק בין שני אשכולות, ודרכים אלו קובעות את הכלל לאשכולות. אמצעים אלה נקראים שיטות קישור . כמה משיטות הקישור הפופולריות ניתנות להלן:
מהגישות הנתונות לעיל, אנו יכולים ליישם כל אחת מהן בהתאם לסוג הבעיה או הדרישה העסקית.
התעוררות של דנדרוגרמה באשכולות היררכית
הדנדרוגרמה היא מבנה דמוי עץ המשמש בעיקר לאחסון כל צעד כזיכרון שאלגוריתם HC מבצע. בתרשים הדנדרוגרמה, ציר Y מציג את המרחקים האוקלידיים בין נקודות הנתונים, וציר ה-x מציג את כל נקודות הנתונים של מערך הנתונים הנתון.
ניתן להסביר את פעולת הדנדרוגרמה באמצעות התרשים שלהלן:
בתרשים שלמעלה, החלק השמאלי מראה כיצד נוצרים אשכולות בצביר אגרסיבי, והחלק הימני מציג את הדנדרוגרמה המקבילה.
- כפי שדיברנו לעיל, ראשית, נקודות הנתונים P2 ו-P3 משתלבות יחד ויוצרות מקבץ, בהתאמה נוצרת דנדרוגרמה, המחברת את P2 ו-P3 עם צורה מלבנית. הגובה נקבע על פי המרחק האוקלידי בין נקודות הנתונים.
- בשלב הבא, P5 ו-P6 יוצרים אשכול, ונוצר הדנדרוגרמה המתאימה. זה גבוה יותר מהקודם, מכיוון שהמרחק האוקלידי בין P5 ל-P6 הוא קצת יותר גדול מה-P2 ו-P3.
- שוב נוצרות שתי דנדרוגרמות חדשות המשלבות את P1, P2 ו-P3 בדנדרוגרם אחד, ו-P4, P5 ו-P6 בדנדרוגרם אחר.
- לבסוף נוצרת הדנדרוגרמה הסופית המשלבת את כל נקודות הנתונים יחד.
אנו יכולים לחתוך את מבנה עץ הדנדרוגרמה בכל רמה לפי הדרישה שלנו.
יישום פייתון של אשכול היררכי אגלומרטיבי
כעת נראה את היישום המעשי של אלגוריתם האשכולות ההיררכי האגלומרטיבי באמצעות Python. כדי ליישם זאת, נשתמש באותה בעיית מערך נתונים שבה השתמשנו בנושא הקודם של K-means clustering כך שנוכל להשוות את שני המושגים בקלות.
מערך הנתונים מכיל מידע על לקוחות שביקרו בקניון לצורך קניות. אז, בעל הקניון רוצה למצוא כמה דפוסים או התנהגות מסוימת של הלקוחות שלו באמצעות מידע הנתונים.
שלבים ליישום AHC באמצעות Python:
השלבים ליישום יהיו זהים ל-k-means clustering, למעט שינויים מסוימים כמו השיטה למציאת מספר האשכולות. להלן השלבים:
שלבי עיבוד מוקדם של נתונים:
בשלב זה, נייבא את הספריות ואת מערכי הנתונים עבור המודל שלנו.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
שורות הקוד שלמעלה משמשות לייבא את הספריות לביצוע משימות ספציפיות, כגון רדום עבור הפעולות המתמטיות, matplotlib לציור הגרפים או עלילת הפיזור, ו פנדות לייבוא מערך הנתונים.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
כפי שנדון לעיל, ייבאנו את אותו מערך נתונים של Mall_Customers_data.csv, כפי שעשינו ב-k- mean clustering. שקול את הפלט שלהלן:
כאן נחלץ רק את מטריצת התכונות מכיוון שאין לנו מידע נוסף על המשתנה התלוי. הקוד ניתן להלן:
x = dataset.iloc[:, [3, 4]].values
כאן חילצנו רק 3 ו-4 עמודות מכיוון שנשתמש בתרשים דו מימדי כדי לראות את האשכולות. לכן, אנו שוקלים את ציון ההכנסה וההוצאות השנתיות כמטריצת התכונות.
שלב-2: מציאת המספר האופטימלי של אשכולות באמצעות הדנדרוגרמה
כעת נמצא את המספר האופטימלי של אשכולות באמצעות הדנדרוגרמה עבור הדגם שלנו. בשביל זה, אנחנו הולכים להשתמש מצומצם הספרייה שכן היא מספקת פונקציה שתחזיר ישירות את הדנדרוגרמה עבור הקוד שלנו. שקול את שורות הקוד הבאות:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
בשורות הקוד לעיל, ייבאנו את ה הִיֵרַרכִיָה מודול של ספריית scipy. מודול זה מספק לנו שיטה shc.denrogram(), אשר לוקח את הַצמָדָה() כפרמטר. פונקציית הקישור משמשת להגדרת המרחק בין שני אשכולות, אז כאן העברנו את x(מטריצת התכונות), ואת השיטה ' מַחלָקָה ,' שיטת הקישור הפופולרית באשכולות היררכית.
שורות הקוד הנותרות נועדו לתאר את התוויות עבור עלילת הדנדרוגרמה.
תְפוּקָה:
על ידי ביצוע שורות הקוד לעיל, נקבל את הפלט שלהלן :
באמצעות דנדרוגרמה זו, אנו נקבע כעת את המספר האופטימלי של אשכולות עבור המודל שלנו. לשם כך, נמצא את מרחק אנכי מקסימלי שלא חותך שום פס אופקי. שקול את התרשים שלהלן:
בתרשים לעיל, הצגנו את המרחקים האנכיים שאינם חותכים את הפסים האופקיים שלהם. כפי שאנו יכולים לדמיין, ה-4ה'המרחק הוא המקסימום, אז לפי זה, מספר האשכולות יהיה 5 (הקווים האנכיים בטווח זה). אנחנו יכולים גם לקחת את ה-2נדמספר כפי שהוא שווה בערך ל-4ה'מרחק, אבל נשקול את 5 האשכולות כי אותו הדבר חישבנו באלגוריתם K-means.
אז, המספר האופטימלי של אשכולות יהיה 5 , ואנו נאמן את המודל בשלב הבא, תוך שימוש באותו.
שלב-3: הכשרת מודל האשכולות ההיררכית
מכיוון שאנו יודעים את המספר האופטימלי הנדרש של אשכולות, אנו יכולים כעת לאמן את המודל שלנו. הקוד ניתן להלן:
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
בקוד לעיל, ייבאנו את צבירה אשכול כיתה של מודול אשכול של ספריית לימוד sikit.
לאחר מכן יצרנו את האובייקט של המחלקה הזו בשם as hc. המחלקה AgglomerativeClustering לוקחת את הפרמטרים הבאים:
בשורה האחרונה, יצרנו את המשתנה התלוי y_pred כדי להתאים או לאמן את המודל. הוא אכן מאמן לא רק את המודל אלא גם מחזיר את האשכולות שאליהם שייכת כל נקודת נתונים.
לאחר ביצוע שורות הקוד לעיל, אם נעבור על אפשרות סייר המשתנה ב-Sypder IDE שלנו, נוכל לבדוק את המשתנה y_pred. אנו יכולים להשוות את מערך הנתונים המקורי עם המשתנה y_pred. שקול את התמונה הבאה:
הערך של מחרוזת java
כפי שאנו יכולים לראות בתמונה לעיל, ה y_pred מציג את ערך האשכולות, כלומר מזהה הלקוח 1 שייך ל-5ה'אשכול (מכיוון שהאינדקס מתחיל מ-0, אז 4 פירושו 5ה'אשכול), מזהה הלקוח 2 שייך ל-4ה'אשכול וכן הלאה.
שלב 4: הדמיית האשכולות
מכיוון שאימנו את המודל שלנו בהצלחה, כעת אנו יכולים לדמיין את האשכולות התואמים למערך הנתונים.
כאן נשתמש באותן שורות קוד כמו שעשינו ב-k-means clustering, למעט שינוי אחד. כאן לא נשרטט את המרכז שעשינו ב-k-אמצעים, כי כאן השתמשנו בדנדרוגרמה כדי לקבוע את המספר האופטימלי של אשכולות. הקוד ניתן להלן:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
פלט: על ידי ביצוע שורות הקוד לעיל, נקבל את הפלט שלהלן: