K- يعني التجميع باستخدام طريقة Elbow ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.

K- يعني التجميع باستخدام طريقة الكوع

K-mean clustering عبارة عن خوارزمية تعليمية غير خاضعة للإشراف تجمع البيانات بناءً على كل مسافة إقليدية نقطة إلى نقطة مركزية تسمى النقطه الوسطى. يتم تعريف النقط الوسطى من خلال وسائل جميع النقاط الموجودة في نفس المجموعة. تختار الخوارزمية أولاً النقاط العشوائية كنقط نقطية ثم تكرر تعديلها حتى التقارب الكامل.

من الأمور المهمة التي يجب تذكرها عند استخدام وسائل K ، هو أن عدد المجموعات عبارة عن معلمة فائقة ، وسيتم تحديدها قبل تشغيل النموذج.

يمكن تنفيذ وسائل K باستخدام Scikit-Learn بثلاثة أسطر فقط من التعليمات البرمجية. لدى Scikit-Learn أيضًا طريقة تحسين النقطه الوسطى المتاحة ، كمينز ++، فهذا يساعد النموذج على التقارب بشكل أسرع.

لتطبيق خوارزمية التجميع K-mean ، فلنقم بتحميل ملف طيور البطريق بالمر مجموعة البيانات ، اختر الأعمدة التي سيتم تجميعها ، واستخدم 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);

تشير طريقة الكوع إلى أن بياناتنا تحتوي على مجموعتين. دعنا نرسم البيانات قبل وبعد التجميع:

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- يعني التجميع باستخدام طريقة Elbow ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.

يوضح هذا المثال كيف أن طريقة Elbow هي مرجع فقط عند استخدامها لاختيار عدد المجموعات. نحن نعلم بالفعل أن لدينا 3 أنواع من طيور البطريق في مجموعة البيانات ، ولكن إذا أردنا تحديد عددها باستخدام طريقة Elbow ، فستكون النتيجة مجموعتان.

نظرًا لأن K-mean حساسة لتباين البيانات ، فلنلقِ نظرة على الإحصائيات الوصفية للأعمدة التي نقوم بتجميعها:

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)

الآن ، دعنا نكرر عملية طريقة Elbow للبيانات المقاسة:

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- يعني التجميع باستخدام طريقة Elbow ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling 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- يعني التجميع باستخدام طريقة Elbow ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.

عند استخدام K-mean Clustering ، تحتاج إلى تحديد عدد المجموعات مسبقًا. كما رأينا عند استخدام طريقة لاختيار k عدد المجموعات ، والنتيجة هي مجرد اقتراح ويمكن أن تتأثر بمقدار التباين في البيانات. من المهم إجراء تحليل متعمق وإنشاء أكثر من نموذج مع _k_s مختلفة عند التجميع.

إذا لم يكن هناك مؤشر مسبق على عدد المجموعات الموجودة في البيانات ، فقم بتصورها واختبرها وفسرها لمعرفة ما إذا كانت نتائج التجميع منطقية. إذا لم يكن كذلك ، فقم بالتجمع مرة أخرى. أيضًا ، انظر إلى أكثر من ذلك القياس الواحد وقم بإنشاء نماذج مجموعات مختلفة - بالنسبة إلى K-mean ، انظر إلى درجة الصورة الظلية وربما التجميع الهرمي لمعرفة ما إذا كانت النتائج تبقى كما هي.

الطابع الزمني:

اكثر من ستاكابوز