K-Means Clustering בשיטת Elbow PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

K-Means Clustering בשיטת המרפק

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

דבר שחשוב לזכור בעת שימוש ב-K-means, הוא שמספר האשכולות הוא היפרפרמטר, הוא יוגדר לפני הפעלת המודל.

ניתן ליישם את K-means באמצעות Scikit-Learn עם 3 שורות קוד בלבד. ל-Scikit-learn יש כבר שיטת אופטימיזציה של מרכזיות זמינה, kmeans++, שעוזר למודל להתכנס מהר יותר.

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

הערות: אתה יכול להוריד את מערך הנתונים מכאן קישור.

בוא נייבא את הספריות ונטען את מערך הנתונים של Penguins, נקצר אותו לעמודות שנבחרו ונשחרר שורות עם נתונים חסרים (היו רק 2):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

אנו יכולים להשתמש בשיטת Elbow כדי לקבל אינדיקציה של אשכולות עבור הנתונים שלנו. זה מורכב בפרשנות של עלילת קו עם צורת מרפק. מספר האשכולות הוא היו כפיפות המרפקים. ציר ה-x של העלילה הוא מספר האשכולות וציר ה-y הוא סכום הריבועים בתוך אשכולות (WCSS) עבור כל מספר אשכולות:

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

שיטת המרפק מציינת שהנתונים שלנו כוללים 2 אשכולות. בוא נשרטט את הנתונים לפני ואחרי קיבוץ:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Clustering בשיטת Elbow PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

מכיוון ש-K-means רגיש לשונות נתונים, הבה נסתכל על הסטטיסטיקה התיאורית של העמודות שאנו מקבצים:

df.describe().T 

זו התוצאה:

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

שימו לב שהממוצע רחוק מסטיית התקן (std), זה מצביע על שונות גבוהה. בואו ננסה לצמצם את זה על ידי שינוי קנה המידה של הנתונים עם Standard Scaler:

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

כעת, בואו נחזור על תהליך שיטת המרפק עבור הנתונים המותאמים:

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Clustering בשיטת Elbow PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

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

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Clustering בשיטת Elbow PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

בעת שימוש ב-K-means Clustering, עליך לקבוע מראש את מספר האשכולות. כפי שראינו בעת שימוש בשיטה לבחור שלנו k מספר האשכולות, התוצאה היא רק הצעה ויכולה להיות מושפעת מכמות השונות בנתונים. חשוב לערוך ניתוח מעמיק וליצור יותר ממודל אחד עם _k_s שונים בעת יצירת אשכולות.

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

בול זמן:

עוד מ Stackabuse