Menu
CoddyTech
flag Ar iconالعربيةdown icon

القصور الذاتي

جزء من قسم التعلّم غير الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 6 من 51.

يتناول هذا الفصل كيفية اختيار k. وبحلول نهايته، ستختاره لتوصيلات مخبز وترسم خريطة للمناطق:

خريطة لمحطات التوصيل في مدينة'، مع الشرق على المحور الأفقي بالكيلومترات والشمال إلى الأعلى بالأمتار، مقسمة إلى ثلاث مناطق تضم 45 و40 و25 محطة، وتتوسط كل منطقة نجمة سوداء

أولًا، مقياس. تجمع القصور الذاتي مربعات المسافات من كل نقطة إلى مركز مجموعتها: وتكون القيمة صغيرة عندما تتجمع النقاط حول مراكزها.

36 تفاحة موزعة على ثلاث مجموعات، ترتبط كل منها بمركز مجموعتها المميز بنجمة سوداء بخط رمادي رفيع. يربع القصور الذاتي طول كل خط ويجمعها كلها

يحتفظ KMeans بها في inertia_. بالنسبة إلى 180 تفاحة:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

يعرض هذا:

1 1718
2 752
3 230
4 196

مراكز أكثر وأذرع أقصر: يتناقص القصور الذاتي دائمًا كلما زادت k. وعندما يكون هناك مركز واحد لكل نقطة، تكون قيمته 0، لذا فالأصغر ليس الأفضل.

challenge icon

التحدي

سهل

يقوم مصنع فخار بتعبئة المزهريات في صناديق بأحجام قليلة. يُخصَّص لكل مزهرية أقرب حجم؛ ويقيس القصور الذاتي مدى سوء ملاءمتها. يقرأ البرنامج budget، وهو مقدار سوء الملاءمة الذي يقبله مصنع الفخار.

  1. جرّب k = 1، 2، 3 وهكذا: درّب KMeans على vases واطبع قيمة القصور الذاتي لكل k بعد تقريبها.
  2. توقّف عند أول k تكون قيمة القصور الذاتي لديه ضمن الميزانية، واطبعه.

لمصنع فخار آخر:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

جرّب بنفسك

import numpy as np
from sklearn.cluster import KMeans

# لا تغيّر الأسطر أدناه
rng = np.random.default_rng(8)
# أربعة أنواع من المزهريات: الارتفاع والعرض المعتادان بوحدة cm، وعدد المزهريات من كل نوع
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 مزهرية، صف واحد لكل منها: الارتفاع والعرض بوحدة cm
vases = np.round(np.concatenate(parts), 1)

# أقصى مقدار لعدم الملاءمة، مقاسًا بالقصور الذاتي، تقبله ورشة الفخار
budget = int(input())

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم غير الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت