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

العناقيد كسمات

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

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

135 منزلًا في ثلاث قرى، الشرق إلى اليمين والشمال إلى الأعلى، وكل قرية حول علامة تقاطع سوداء، وهي مركز k-means. تصل خطوط متقطعة منزلًا أحمر بالمراكز الثلاثة: 4.9 km و5.2 km، والأقرب 1.0 km

تحدّد خوارزمية k-means القرى. تعطي km.transform مسافة كل صف إلى كل مركز، ويُبقي .min(axis=1) على الأقرب:

km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])

بإضافة ذلك العمود الإضافي، يرتفع معامل التحديد R² للنموذج الخطي في الاختبار من 0.000 إلى 0.886.

قم بملاءمة خوارزمية k-means على صفوف التدريب فقط، كما تفعل مع أداة التحجيم، ثم حوِّل كلا المجموعتين.

challenge icon

التحدي

متوسط

يريد فريق الصوت في مهرجان أن يعرف مدى ارتفاع الصوت في الأماكن التي يقف فيها الناس. يقسم الملف المبدئي البيانات في crowd.csv، ويقرأ k، ويطبع النتيجة اعتمادًا على الموقع وحده.

  1. طبّق خوارزمية k-means باستخدام k عناقيد على مواقع بيانات التدريب.
  2. أضف مسافة كل صف إلى أقرب مركز بوصفها عمودًا ثالثًا، في كلتا المجموعتين.
  3. اطبع معامل R تربيع الجديد للاختبار ومقدار التحسّن، إلى 3 منازل عشرية.

في مهرجان آخر وعندما تكون k = 4:

Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637

جرّب بنفسك

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans

# 250 من روّاد المهرجان: أماكن وقوفهم (m) ومستوى الصوت هناك (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())


# يلائم نموذج انحدار خطي باستخدام أعمدة التدريب، ويُرجع قيمة R squared على أعمدة الاختبار
def test_r2(A_train, A_test):
    model = LinearRegression().fit(A_train, y_train)
    return model.score(A_test, y_test)


before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")

# اكتب شيفرتك أدناه
quiz iconاختبر نفسك

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

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

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