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

تحجيم القيم لأقرب الجيران

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

يقيس k-NN المسافة، لذا يتغلب أحد السمات ذات القيم الكبيرة على بقية السمات، كما حذّر القسم 2. هنا، تطغى المسافة عن النهر، بالمتر، على الارتفاع:

خريطتان لـ160 منزلًا، المسافة عن النهر أفقيًا والارتفاع عموديًا، ومنازل غمرتها المياه أو بقيت جافة. قبل التحجيم: تنقسم الخريطة إلى أشرطة عمودية بحسب المسافة وحدها، والدقة 0.6. بعد التحجيم: تقع المنازل التي غمرتها المياه في الركن المنخفض قرب النهر، والدقة 0.925

أجرِ التحجيم أولًا. درّب أداة التحجيم على صفوف التدريب فقط، ثم حوّل مجموعتي البيانات:

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_s, y_train)
print(model.score(X_test_s, y_test))

يطبع هذا 0.925، بزيادة عن 0.6. تظل صفوف الاختبار غير مرئية: لا يتعلم منها المُقيِّس شيئًا.

challenge icon

التحدي

سهل

يخمّن العداد الذكي الجهاز الذي يعمل حاليًا من قدرته (بالواط) ومدة تشغيله (بالدقائق)، في meter.csv. يقرأ الكود المبدئي قيمة k ويطبع دقة خوارزمية k-NN على الميزات الخام.

  1. درّب StandardScaler على صفوف التدريب وحوّل مجموعتي البيانات كلتيهما.
  2. درّب نموذج k-NN بالقيمة نفسها لـ k على الصفوف بعد تحجيمها؛ واطبع دقته إلى 3 منازل عشرية.
  3. اطبع مقدار التحسّن.

بالنسبة إلى منزل آخر و k = 5:

Unscaled accuracy: 0.65
Scaled accuracy: 0.875
Scaling gains 0.225

جرّب بنفسك

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

# صف واحد لكل تشغيل لجهاز: القدرة بالواط، ومدة التشغيل بالدقائق، ونوع الجهاز
meter = pd.read_csv("meter.csv")
X = meter[["watts", "minutes"]]
y = meter["appliance"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())

# تطبيق k-NN على السمات الخام
raw_model = KNeighborsClassifier(n_neighbors=k)
raw_model.fit(X_train, y_train)
raw = raw_model.score(X_test, y_test)
print(f"Unscaled accuracy: {round(raw, 3)}")

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

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

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

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