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

StandardScaler

جزء من قسم الإحصاء لتعلّم الآلة في رحلة Machine Learning على Coddy. الدرس 50 من 64.

يجب أن يوسّع النموذج نطاق كل عيّنة جديدة بالطريقة نفسها التي وسّع بها نطاق بيانات التدريب. تقوم StandardScaler من scikit-learn بالتوحيد القياسي وتحتفظ بمعلومات عن الطريقة:

رسم توضيحي: تمرّ 4 وظائف سابقة لمنظّف نوافذ، X_train، عبر fit إلى أداة تحجيم تتذكر mean_ 8 و22 وscale_ 4.47 و9.72. تمرّ وظيفة جديدة، 8 و30، عبر transform باستخدام هذه الأرقام، وتخرج بقيمتي 0.00 و0.82

في الشيفرة، كل مهمة لها عدد النوافذ التي تم تنظيفها والدقائق المستغرقة:

from sklearn.preprocessing import StandardScaler

X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]])  # عينة واحدة: جدول بصف واحد
print(np.round(scaler.transform(X_new), 2))

يطبع هذا:

[[0.   0.82]]

تتعلّم fit متوسط كل عمود وانحرافه المعياري (بالقسمة على n، كما في np.std)، وتُحفَظ القيمتان في scaler.mean_ وscaler.scale_. وتطبّقهما transform.

لا تُجرِ الملاءمة على بيانات جديدة أبدًا: فسيكون متوسطها هو متوسطها الخاص، وستصبح [[0. 0.]]. على بيانات التدريب، تنفّذ fit_transform الأمرين معًا في استدعاء واحد.

challenge icon

التحدي

متوسط

تعلّم فرّازٌ من حبات الأفوكادو في X_train: الوزن والصلابة وعدد الأيام منذ الحصاد. يقرأ البرنامج حبة أفوكادو جديدة في الجدول ذي الصف الواحد new_avocado، لكن التحجيم في البرنامج الابتدائي يطبع [[0. 0. 0.]] لكل حبة أفوكادو.

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

لدفعة أخرى:

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

جرّب بنفسك

import numpy as np
from sklearn.preprocessing import StandardScaler

# أفوكادو التدريب، صف واحد لكل حبة: الوزن بالغرامات، الصلابة من 1 إلى 10، والأيام منذ الحصاد
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# حبة أفوكادو جديدة على السير الناقل
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# يطبع هذا [[0. 0. 0.]] لكل حبة أفوكادو: أصلحه
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

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

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

جميع دروس الإحصاء لتعلّم الآلة

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