تحجيم القيم لأقرب الجيران
جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 9 من 58.
يقيس k-NN المسافة، لذا يتغلب أحد السمات ذات القيم الكبيرة على بقية السمات، كما حذّر القسم 2. هنا، تطغى المسافة عن النهر، بالمتر، على الارتفاع:
أجرِ التحجيم أولًا. درّب أداة التحجيم على صفوف التدريب فقط، ثم حوّل مجموعتي البيانات:
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. تظل صفوف الاختبار غير مرئية: لا يتعلم منها المُقيِّس شيئًا.
التحدي
سهليخمّن العداد الذكي الجهاز الذي يعمل حاليًا من قدرته (بالواط) ومدة تشغيله (بالدقائق)، في meter.csv. يقرأ الكود المبدئي قيمة k ويطبع دقة خوارزمية k-NN على الميزات الخام.
- درّب
StandardScalerعلى صفوف التدريب وحوّل مجموعتي البيانات كلتيهما. - درّب نموذج k-NN بالقيمة نفسها لـ k على الصفوف بعد تحجيمها؛ واطبع دقته إلى 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)}")
# اكتب الكود الخاص بك أدناه
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم الخاضع للإشراف
تدرّب بنفسك: مترجم Python عبر الإنترنت