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

تعويض القيم المفقودة ضمن مسار المعالجة

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

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

املأ القيم قبل التقسيم، فتساعد صفوف الاختبار في اختيار تلك القيمة: هذا تسرّب. سبعة أعماق للغوص وفجوة واحدة:

نسختان من عمود يضم 8 أعماق للغوص، مع تحديد الصفين الأخيرين كصفّي اختبار وخلية واحدة تمثل فجوة. يسارًا، املأ القيم ثم قسّم: تصبح قيمة الفجوة 21.3، وهو متوسط الأعماق السبعة المعروفة كلها، بما فيها صفوف الاختبار، وهذا تسرّب. يمينًا، قسّم ثم استخدم خط المعالجة: تصبح قيمة الفجوة 18.0، وهو متوسط صفوف التدريب فقط

في مسار المعالجة، تتعلّم fit قيم التعويض من صفوف التدريب فقط:

from sklearn.impute import SimpleImputer

pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), model)
pipe.fit(X_train, y_train)
print(pipe[0].statistics_)  # القيم المستخدمة لملء البيانات المفقودة في الخطوة الأولى

بالنسبة إلى سجل غوص (العمق، الدقائق، درجة حرارة الماء)، يطبع هذا:

[19. 44. 21.]

وبالنسبة إلى الكلمات أيضًا، تصبح خطوات الأرقام مسارًا واحدًا في ColumnTransformer:

lane = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
("numbers", lane, ["depth_m", "minutes"])
challenge icon

التحدي

متوسط

تتنبأ خدمة الغابات بأي ضربات البرق تتسبب في حرائق، لكن بعض القراءات مفقودة. يقسم البرنامج التمهيدي wildfire.csv ويقرأ استراتيجية، إما mean أو median.

  1. درّب مسارًا يتكون من مُعوِّض يستخدم تلك الاستراتيجية، ومُقيِّس، وانحدار لوجستي. اطبع دقته على بيانات الاختبار.
  2. لكل عمود، اطبع قيمة التعبئة في المسار، والقيمة التي ستنتجها جميع صفوف X، مع التقريب إلى منزلة عشرية واحدة.

غابة أخرى، باستخدام median:

Test accuracy: 0.840
humidity_pct: fill 46.0, all rows would give 46.0
wind_kmh: fill 29.0, all rows would give 32.0
temp_c: fill 25.0, all rows would give 26.0
days_without_rain: fill 23.0, all rows would give 23.0

حيثما اختلفت القيمتان، فإن التعبئة قبل التقسيم كانت ستسمح لصفوف الاختبار بالتأثير في بيانات التدريب.

جرّب بنفسك

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

# صواعق البرق في غابة جافة: هل تسبب البرق في اندلاع حريق (1) أم لا (0)؟
# بعض قراءات الطقس مفقودة.
strikes = pd.read_csv("wildfire.csv")
columns = ["humidity_pct", "wind_kmh", "temp_c", "days_without_rain"]
X = strikes[columns]
y = strikes["fire"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
strategy = input()

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

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

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

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