روشهای مختلفی برای ارزیابی یک مدل یادگیری ماشین وجود دارد. ما میتوانیم از MSE (خطای میانگین مربعات) برای رگرسیون، دقت، فراخوانی، و ROC (مشخصه عملکرد گیرنده) برای یک مسئله طبقهبندی به همراه خطای مطلق استفاده کنیم. به طور مشابه، اریبی (Bias) و واریانس (Variance) به ما در تنظیم پارامترها و تصمیمگیری در مورد مدلهای با برازش بهتر در میان چندین مدل ساخته شده کمک میکنند.
اریبی نوعی خطا است که به دلیل مفروضات نادرست درباره دادهها رخ میدهد، مانند فرض خطی بودن دادهها در حالی که در واقعیت، دادهها از یک تابع پیچیده پیروی میکنند. از سوی دیگر، واریانس با حساسیت بالا به تغییرات در دادههای آموزشی معرفی میشود. این نیز نوعی خطا است زیرا ما میخواهیم مدل خود را در برابر نویز مقاوم کنیم. دو نوع خطا در یادگیری ماشین وجود دارد: خطای قابل کاهش و خطای کاهشناپذیر. اریبی و واریانس تحت عنوان خطای قابل کاهش قرار میگیرند.
اریبی چیست؟
اریبی به سادگی به عنوان ناتوانی مدل تعریف میشود که به دلیل آن تفاوت یا خطایی بین مقدار پیشبینی شده مدل و مقدار واقعی رخ میدهد. این تفاوتها بین مقادیر واقعی یا مورد انتظار و مقادیر پیشبینی شده به عنوان خطا یا خطای اریبی یا خطای ناشی از اریبی شناخته میشوند. اریبی یک خطای سیستماتیک است که به دلیل مفروضات نادرست در فرآیند یادگیری ماشین رخ میدهد.
فرض کنید Y مقدار واقعی یک پارامتر باشد، و فرض کنید Ŷ یک تخمینگر Y بر اساس نمونهای از دادهها باشد. آنگاه، اریبی تخمینگر Ŷ به صورت زیر داده میشود:
Bias(Ŷ) = E(Ŷ) – Y
که در آن E(Ŷ) مقدار مورد انتظار تخمینگر Ŷ است. این اندازهگیری میزان برازش مدل به دادهها است.
- اریبی کم (Low Bias): مقدار اریبی کم به معنای کمتر بودن فرضیات در ساخت تابع هدف است. در این حالت، مدل به طور دقیق با مجموعه داده آموزشی مطابق خواهد داشت.
- اریبی بالا (High Bias): مقدار اریبی بالا به معنای بیشتر بودن فرضیات در ساخت تابع هدف است. در این حالت، مدل به طور دقیق با مجموعه داده آموزشی مطابق نخواهد داشت.
مدل با اریبی بالا قادر به دریافت روند مجموعه داده نخواهد بود. این مدل به عنوان مدل کمبرازش (Underfitting) در نظر گرفته میشود که نرخ خطای بالایی دارد. این امر به دلیل یک الگوریتم بسیار سادهشده است.
به عنوان مثال، یک مدل رگرسیون خطی ممکن است اریبی بالایی داشته باشد اگر دادهها رابطه غیرخطی داشته باشند.
روشهای کاهش اریبی بالا در یادگیری ماشین:
- از یک مدل پیچیدهتر استفاده کنید: یکی از دلایل اصلی اریبی بالا، مدل بسیار سادهشده است. این مدل قادر به دریافت پیچیدگی دادهها نخواهد بود. در چنین مواردی، میتوانیم مدل خود را با افزایش تعداد لایههای پنهان در مورد یک شبکه عصبی عمیق پیچیدهتر کنیم. یا میتوانیم از یک مدل پیچیدهتر مانند رگرسیون چندجملهای برای مجموعه دادههای غیرخطی، CNN برای پردازش تصویر و RNN برای یادگیری دنباله استفاده کنیم.
- افزایش تعداد ویژگیها: با افزودن ویژگیهای بیشتر به مجموعه داده آموزشی، پیچیدگی مدل افزایش مییابد و توانایی آن در دریافت الگوهای زیربنایی در دادهها بهبود مییابد.
- کاهش منظمسازی مدل: تکنیکهای منظمسازی مانند منظمسازی L1 یا L2 میتوانند به جلوگیری از بیشبرازش (Overfitting) و بهبود توانایی تعمیم مدل کمک کنند. اگر مدل دارای اریبی بالا باشد، کاهش قدرت منظمسازی یا حذف کلی آن میتواند به بهبود عملکرد آن کمک کند.
- افزایش اندازه دادههای آموزشی: افزایش اندازه دادههای آموزشی میتواند با فراهم کردن مثالهای بیشتر برای یادگیری از مجموعه داده، به کاهش اریبی کمک کند.
واریانس چیست؟
واریانس معیار پراکندگی دادهها از موقعیت میانگین آنها است. در یادگیری ماشین، واریانس مقدار تغییر عملکرد یک مدل پیشبینیکننده است زمانی که بر روی زیرمجموعههای مختلف دادههای آموزشی، آموزش داده میشود. به طور خاصتر، واریانس، نوسانپذیری مدل است که نشان میدهد مدل تا چه حد نسبت به زیرمجموعههای دیگر مجموعه داده آموزشی حساس است؛ یعنی تا چه حد میتواند خود را با زیرمجموعه جدید دادههای آموزشی تطبیق دهد.
فرض کنید Y مقادیر واقعی متغیر هدف، و Ŷ مقادیر پیشبینی شده متغیر هدف باشند. آنگاه واریانس یک مدل را میتوان به عنوان مقدار مورد انتظار مجذور تفاوت بین مقادیر پیشبینی شده و مقدار مورد انتظار مقادیر پیشبینی شده اندازهگیری کرد.
Variance = E[(Ŷ – E[Ŷ])2]
که در آن E[Y] مقدار مورد انتظار مقادیر پیشبینی شده است. در اینجا مقدار مورد انتظار بر روی تمام دادههای آموزشی میانگینگیری شده است.
خطاهای واریانس یا خطاهای واریانس کم هستند یا خطاهای واریانس بالا.
- واریانس کم (Low Variance): واریانس کم به این معنی است که مدل کمتر به تغییرات در دادههای آموزشی حساس است و میتواند برآوردهای ثابتی از تابع هدف را با زیرمجموعههای مختلف دادهها از یک توزیع تولید کند. با این حال، واریانس کم میتواند نشاندهنده کمبرازش (Underfitting) نیز باشد اگر مدل بیش از حد ساده باشد و نتواند الگوهای زیربنایی در دادهها را دریافت کند. این زمانی است که مدل هم بر روی دادههای آموزشی و هم بر روی دادههای آزمایشی عملکرد ضعیفی دارد.
- واریانس بالا (High Variance): واریانس بالا به این معنی است که مدل نسبت به تغییرات در دادههای آموزشی بسیار حساس است و میتواند منجر به تغییرات قابل توجهی در برآورد تابع هدف شود، زمانی که بر روی زیرمجموعههای مختلف دادهها از یک توزیع آموزش داده میشود. این مورد خطا یادگیری ماشین(Overfitting) است، زمانی که مدل بر روی دادههای آموزشی خوب عمل میکند اما بر روی دادههای آزمایشی جدید و دیده نشده ضعیف عمل میکند. مدل دادههای آموزشی را آنقدر دقیق برازش میکند که بر روی مجموعه داده آموزشی جدید شکست میخورد.
روشهای کاهش واریانس در یادگیری ماشین:
- اعتبارسنجی متقابل (Cross-validation): با تقسیم دادهها به مجموعههای آموزشی و آزمایشی برای چندین بار، اعتبارسنجی متقابل میتواند به شناسایی این که آیا مدل بیشبرازش یا کمبرازش است کمک کند و میتواند برای تنظیم ابرپارامترها جهت کاهش واریانس استفاده شود.
- انتخاب ویژگی: با انتخاب تنها ویژگیهای مرتبط، پیچیدگی مدل کاهش مییابد و میتواند خطای واریانس را کاهش دهد.
- منظمسازی (Regularization): میتوانیم از منظمسازی L1 یا L2 برای کاهش واریانس در مدلهای یادگیری ماشین استفاده کنیم.
- روشهای ترکیبی: این روشها چندین مدل را ترکیب میکنند تا عملکرد تعمیم را بهبود بخشند. Bagging، boosting و stacking روشهای ترکیبی رایجی هستند که میتوانند به کاهش واریانس و بهبود عملکرد تعمیم کمک کنند.
- سادهسازی مدل: کاهش پیچیدگی مدل، مانند کاهش تعداد پارامترها یا لایهها در یک شبکه عصبی، همچنین میتواند به کاهش واریانس و بهبود عملکرد تعمیم کمک کند.
- توقف زودهنگام : توقف زودهنگام تکنیکی است که برای جلوگیری از بیشبرازش با توقف آموزش مدل یادگیری عمیق زمانی که عملکرد بر روی مجموعه اعتبارسنجی متوقف میشود، استفاده میشود.
مشتق ریاضی برای خطای کل
MSE = (Y – Ŷ)2
= (Y – E(Ŷ) + E(Ŷ) – Ŷ)2
= (Y – E(Ŷ))2 + (E(Ŷ) – Ŷ)2 + 2(Y – E(Ŷ))(E(Ŷ) – Ŷ)
اعمال انتظارات به هر دو طرف.
E[(Y – Ŷ)2] = E[(Y – E(Ŷ))2 + (E(Ŷ) – Ŷ)2 + 2(Y – E(Ŷ))(E(Ŷ) – Ŷ)]
= E[(Y – E(Ŷ))2] + E[(E(Ŷ) – Ŷ)2] + 2E[(Y – E(Ŷ))(E(Ŷ) – Ŷ)]
= (Y – E(Ŷ))2 + E[(E(Ŷ) – Ŷ)2] + 2(Y – E(Ŷ))E[(E(Ŷ) – Ŷ)]
= (Y – E(Ŷ))2 + E[(E(Ŷ) – Ŷ)2] + 2(Y – E(Ŷ))[E[E(Ŷ)] – E[Ŷ]]
= (Y – E(Ŷ))2 + E[(E(Ŷ) – Ŷ)2] + 2(Y – E(Ŷ))[E(Ŷ) – E(Ŷ)]
= (Y – E(Ŷ))2 + E[(E(Ŷ) – Ŷ)2] + 2(Y – E(Ŷ))[0]
= (Y – E(Ŷ))2 + E[(E(Ŷ) – Ŷ)2] + 0
= [Bias2] + Variance
ترکیبات مختلف اریبی-واریانس
چهار ترکیب بین اریبی و واریانس وجود دارد:
- اریبی بالا، واریانس کم: مدلی با اریبی بالا و واریانس کم به کمبرازش (Underfitting) معروف است.
- واریانس بالا، اریبی کم: مدلی با واریانس بالا و اریبی کم به بیشبرازش (Overfitting) معروف است.
- اریبی بالا، واریانس بالا: مدلی دارای هم اریبی بالا و هم واریانس بالا است، به این معنی که مدل قادر به دریافت الگوهای زیربنایی در دادهها نیست (اریبی بالا) و همچنین نسبت به تغییرات در دادههای آموزشی بسیار حساس است (واریانس بالا). در نتیجه، مدل به طور متوسط پیشبینیهای ناسازگار و نادرستی را تولید میکند.
- اریبی کم، واریانس کم: مدلی که اریبی کم و واریانس کم دارد به این معنی است که مدل قادر به دریافت الگوهای زیربنایی در دادهها است (اریبی کم) و نسبت به تغییرات در دادههای آموزشی نیز بسیار حساس نیست (واریانس کم). این سناریوی ایدهآل برای یک مدل یادگیری ماشین است، زیرا قادر است به خوبی به دادههای جدید و دیده نشده تعمیم یابد و پیشبینیهای ثابت و دقیقی را تولید کند. اما در عمل، این امکانپذیر نیست.

اکنون میدانیم که حالت ایدهآل، اریبی کم و واریانس کم خواهد بود، اما در عمل، این امکانپذیر نیست. بنابراین، ما بین اریبی و واریانس بدهبستان (Bias-Variance Tradeoff) ایجاد میکنیم تا اریبی و واریانس متعادل را به دست آوریم.
مدلی با اریبی و واریانس متعادل دارای عملکرد تعمیم بهینه است. این بدان معناست که مدل قادر است الگوهای زیربنایی در دادهها را بدون بیشبرازش (Overfitting) یا کمبرازش (Underfitting) دریافت کند. احتمالاً مدل فقط به اندازه کافی پیچیده است تا پیچیدگی دادهها را دریافت کند، اما آنقدر پیچیده نیست که دادههای آموزشی را بیش از حد برازش کند. این میتواند زمانی اتفاق بیفتد که مدل با دقت تنظیم شده باشد تا با تنظیم ابرپارامترها و انتخاب یک معماری مدل مناسب، تعادل خوبی بین اریبی و واریانس برقرار کند.
| الگوریتم یادگیری ماشین | اریبی | واریانس |
|---|---|---|
| رگرسیون خطی | بالا | کمتر |
| درخت تصمیم | کم | بالا |
| جنگل تصادفی | کم | بالا |
| بگینگ (Bagging) | کم | بالا |
بدهبستان اریبی-واریانس
اگر الگوریتم بیش از حد ساده باشد (فرضیه با معادله خطی)، ممکن است در شرایط اریبی بالا و واریانس کم قرار گیرد و در نتیجه مستعد خطا باشد. اگر الگوریتمها بیش از حد پیچیده باشند (فرضیه با معادله درجه بالا)، ممکن است در شرایط واریانس بالا و اریبی کم قرار گیرند. در حالت دوم، ورودیهای جدید عملکرد خوبی نخواهند داشت. خوب، چیزی بین هر دوی این شرایط وجود دارد که به آن بدهبستان (Trade-off) یا بدهبستان اریبی-واریانس (Bias-Variance Tradeoff) میگویند. نمودار زیر به خوبی رابطه میزان پیچیدگی مدل و بدهبستان اریبی-واریانسی را نشان میدهد.
تکنیکی که توسط آن عملکرد مدل یادگیری ماشین را تحلیل میکنیم، به عنوان تجزیه اریبی-واریانس (Bias Variance Decomposition) شناخته میشود. مثال زیر یک نمونه از تجزیه اریبی-واریانس برای طبقهبندی و رگرسیون ارائه میدهد.
تجزیه اریبی-واریانس برای طبقهبندی و رگرسیون
طبق فرمولی که به دست آوردهایم، خطای کل برابر با مجموع مجذور اریبی و واریانس است. ما سعی میکنیم اطمینان حاصل کنیم که اریبی و واریانس قابل مقایسه هستند و یکی از دیگری بیش از حد فاصله ندارد.
# Import the necessary libraries
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from mlxtend.evaluate import bias_variance_decomp
import warnings
warnings.filterwarnings('ignore')
# Load the dataset
X, y = load_iris(return_X_y=True)
# Split train and test dataset
X_train, X_test,\
y_train, y_test = train_test_split(X, y,
test_size=0.25,
random_state=23,
shuffle=True,
stratify=y)
# Build the classification model
tree = DecisionTreeClassifier(random_state=123)
clf = BaggingClassifier(base_estimator=tree,
n_estimators=50,
random_state=23)
# Bias variance decompositions
avg_expected_loss, avg_bias, \
avg_var = bias_variance_decomp(clf,
X_train, y_train,
X_test, y_test,
loss='0-1_loss',
random_seed=23)
# Print the value
print('Average expected loss: %.2f' % avg_expected_loss)
print('Average bias: %.2f' % avg_bias)
print('Average variance: %.2f' % avg_var)
Pythonخروجی:
Average expected loss: 0.06
Average bias: 0.05
Average variance: 0.02
اکنون بیایید همین کار را روی وظیفه رگرسیون انجام دهیم و مقادیر اریبی و واریانس را بررسی کنیم:
# Load the necessary libraries
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import tensorflow as tf
from mlxtend.evaluate import bias_variance_decomp
import warnings
warnings.filterwarnings('ignore')
# Laod the dataset
X, y = fetch_california_housing(return_X_y=True)
# Split train and test dataset
X_train, X_test,\
y_train, y_test = train_test_split(X, y,
test_size=0.25,
random_state=23,
shuffle=True)
# Build the regression model
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(1)
])
# Set optimizer and loss
optimizer = tf.keras.optimizers.Adam()
model.compile(loss='mean_squared_error',
optimizer=optimizer)
# Train the model
model.fit(X_train, y_train, epochs=25, verbose=0)
# Evaluations
accuracy = model.evaluate(X_test, y_test)
print('Average: %.2f' % accuracy)
# Bias variance decompositions
avg_expected_loss, avg_bias,\
avg_var = bias_variance_decomp(model,
X_train, y_train,
X_test, y_test,
loss='mse',
random_seed=23,
epochs=5,
verbose=0)
# Print the result
print('Average expected loss: %.2f' % avg_expected_loss)
print('Average bias: %.2f' % avg_bias)
print('Average variance: %.2f' % avg_var)
Pythonخروجی:
162/162 [==============================] - 0s 802us/step - loss: 0.9195
Average: 0.92
Average expected loss: 2.30
Average bias: 0.72
Average variance: 1.58
