استانداردسازی یک ویژگی عددی، مقدار آن را نسبت به میانگین و مقیاس مرجع بازنویسی میکند. در یک خط لوله یادگیری ماشین، مرجع باید از بخش آموزش همان تقسیم به دست بیاید؛ داده تازه را با همان اعداد تبدیل میکنیم. محاسبه دوباره میانگین از هر فایل تازه، معنای ورودی مدل را عوض میکند.
یک مثال که با دست کنترل میشود
داده آموزشی ساختگی ما ۲، ۴ و ۶ است. میانگین ۴ میشود. جمع مربع فاصلهها از میانگین برابر ۸ و واریانس با تقسیم بر تعداد مشاهدهها برابر ۸÷۳ است. در این تمرین از تعریف جمعیتی، یعنی مخرج ۳، استفاده میکنیم؛ انحراف معیار تقریباً ۱٫۶۳۲۹۹۳ خواهد بود. این قرارداد با ddof=0 سازگار است؛ محاسبه با مخرج ۲ عدد دیگری میسازد.
| مقدار | تبدیل با آمار آموزش |
|---|---|
| ۲ | حدود منفی ۱٫۲۲۴۷۴۵ |
| ۴ | صفر |
| ۶ | حدود مثبت ۱٫۲۲۴۷۴۵ |
| ۸، مشاهده تازه | حدود ۲٫۴۴۹۴۹۰ |
قرارگرفتن مقدار تازه بالاتر از ۱ خطا نیست. استانداردسازی، داده را به بازه منفی یک تا مثبت یک محدود نمیکند. همچنین تغییر واحد، توزیع داده را الزاماً نرمال نمیسازد؛ شکل توزیع و وجود مقدار پرت به بررسی جداگانه نیاز دارند.
چه اتفاقی میافتد اگر آزمون را هم وارد کنیم؟
فرض کنید داده آزمون ۸ و ۱۰۰ باشد. اگر پیش از جداسازی، هر پنج مقدار را برای برازش تبدیل مصرف کنیم، میانگین ۲۴ میشود. همان مقدار ۸ دیگر با مرجع ۴ مقایسه نمیشود. این تفاوت، شاهد بهبود مدل نیست؛ بخشی از اطلاعات مجموعهای که قرار بود تازه باشد وارد آمادهسازی شده است. در اعتبارسنجی چندبخشی هم هر بخش، تبدیلِ برازششده روی آموزش خودش را لازم دارد.
موضوع نشت داده از آینده علاوه بر این مسئله، زمان دسترسپذیری ویژگی را بررسی میکند. اینجا فرض کردهایم مقدارهای عددی مجازند و فقط منشأ آمارِ تبدیل را کنترل میکنیم. روش تقسیم زمانی یا گروهی را این محاسبه تعیین نمیکند.
کد آموزشی بدون نصب کتابخانه
import math
def fit(values):
if not values or not all(math.isfinite(x) for x in values):
raise ValueError('finite nonempty training data required')
mean = math.fsum(values)/len(values)
variance = math.fsum((x-mean)**2 for x in values)/len(values)
scale = math.sqrt(variance) or 1.0
return mean, scale
def transform(values, state):
if not all(math.isfinite(x) for x in values):
raise ValueError('finite values required')
mean, scale = state
return [(x-mean)/scale for x in values]
train, test = [2.0, 4.0, 6.0], [8.0, 100.0]
state = fit(train)
print('training mean/scale', state)
print('training z', transform(train, state))
print('test z with training state', transform(test, state))
print('wrong all-data mean/scale', fit(train+test))
assert state[0] == 4.0
assert abs(transform([8.0], state)[0]-math.sqrt(6)) < 1e-12
assert fit(train+test)[0] == 24.0
assert transform([5.0, 6.0], fit([5.0, 5.0])) == [0.0, 1.0]
خروجی نخست میانگین، مقیاس و مقدارهای تبدیلشده را نشان میدهد. برای مقایسه خطا، کد عمداً یک تبدیل دوم از کل پنج مقدار میسازد؛ آن خط، الگوی استفاده درست در پروژه نیست. در فایل واقعی باید مشخص باشد کدام بخش آموزش است و ویژگیهای هر ستون چه واحدی دارند.
ستون ثابت و داده نامعتبر
اگر آموزش فقط ۵ و ۵ داشته باشد، انحراف معیار صفر است. در این تمرین مقیاس چنین ستونی را ۱ میگذاریم؛ مقدارهای آموزشی به صفر تبدیل میشوند، اما مقدار تازه ۶ به ۱ میرسد. پس عبارت «ستون ثابت همیشه صفر است» برای تمام ورودیهای آینده درست نیست. حذف ستون، نگهداشتن آن یا هشدار تغییر باید تصمیمی ثبتشده باشد.
کد، آموزش خالی و عدد نامتناهی را رد میکند و سیاست جایگزینی مقدار گمشده ندارد. برای داده ناقص ابتدا معنای مقدار ناموجود را تعیین کنید. در پیادهسازی کتابخانهای، رفتار NaN و ستون ثابت را از مستندات همان ابزار بخوانید؛ این تابع کوچک جای خط لوله کامل را نمیگیرد.
این تبدیل کجا ضروری است؟
روشهای وابسته به فاصله یا جریمه وزن میتوانند به مقیاس ویژگیها حساس باشند. درخت تصمیم معمولی همان نیاز را به یک شکل ندارد. اثر واقعی را با داده اعتبارسنجی بسنجید؛ «همه مدلها با استانداردسازی بهتر میشوند» نتیجه این مثال نیست.
برای اجرای بعدی، میانگین، مقیاس، ترتیب ستونها و نسخه تبدیل را همراه مدل حفظ کنید. قرارداد ویژگی آفلاین و آنلاین به کنترل همین سازگاری در دو مسیر کمک میکند. اگر هدف شما پاسخگویی به مشتری است، پیش از انتخاب الگوریتم، ورودی و خروجی لازم را در مسیر خدمات اپرا مشخص کنید؛ این آموزش معرفی محصول پیشبینی عددی اپرا نیست.
فایل تمرین و منبع
دریافت کد مستقل این تمرین. ورودیها آموزشیاند؛ این فایل اتصال شبکه ندارد و ابزار پردازش عملیاتی داده مشتری نیست.
تاریخ خواندن منبع: ۳ نوامبر ۲۰۲۶. کد و داده مثال برای همین راهنما طراحی شدهاند.