تمرین برنامه‌نویسی متلب؛ از اسکریپت تا تابع

تمرین محاسبه خطای پیش‌بینی در MATLAB؛ تبدیل اسکریپت به تابع، بررسی ابعاد ورودی، واحدها و آزمون با نتیجه قابل محاسبه.

راهنمای آموزشی دیجی‌استاد · حدود 4 دقیقه مطالعه · بررسی منابع:

تمرین را حول یک خروجی مشخص تعریف کن

دو بردار داری: مقدار واقعی و مقدار پیش‌بینی‌شده. می‌خواهی میانگین قدرمطلق خطا یا MAE را حساب کنی. به‌جای شروع از یک حلقه طولانی، ابتدا تعریف را بنویس: اختلاف هر زوج داده را می‌گیریم، قدرمطلق می‌کنیم و میانگین می‌گیریم. جواب باید یک عدد و در همان واحد داده اصلی باشد.

اسکریپت اولین مثال

actual = [10 12 14];
predicted = [9 13 12];
absoluteErrors = abs(actual - predicted);
mae = mean(absoluteErrors);
disp(mae);

قدر مطلق خطاها ۱، ۱ و ۲ است؛ پس MAE برابر ۴ تقسیم بر ۳ می‌شود. این جواب معلوم را نگه دار. حالا اگر کد را تغییر دادی، می‌توانی نتیجه را دوباره با همین مثال بررسی کنی.

یک نکته پنهان در شکل آرایه

اگر actual بردار سطری و predicted بردار ستونی باشد، در نسخه‌هایی که بسط ضمنی آرایه‌ها را پشتیبانی می‌کنند ممکن است تفریق به جای بردار خطای زوجی، یک ماتریس بسازد. برنامه الزاماً خطا نمی‌دهد، اما محاسبه موردنظر تو انجام نشده است. تعداد عناصر و شکل ورودی را باید آگاهانه مدیریت کنی.

تابع را با قرارداد روشن بنویس

این تابع برای دو بردار عددی حقیقی، متناهی و غیرخالی تعریف شده و هر دو را به بردار ستونی تبدیل می‌کند. فایل را با نام predictionMAE.m ذخیره کن. پذیرفتن یا حذف داده گمشده یک تصمیم مستقل است؛ این مثال چنین ورودی‌ای را رد می‌کند.

function value = predictionMAE(actual,predicted)
    validateattributes(actual,{'numeric'}, ...
        {'real','vector','nonempty','finite'});
    validateattributes(predicted,{'numeric'}, ...
        {'real','vector','nonempty','finite'});
    actual = double(actual(:));
    predicted = double(predicted(:));
    assert(numel(actual) == numel(predicted), ...
        'Inputs must have the same number of elements.');
    value = mean(abs(actual - predicted));
end

سه کنترل مستقل برای تابع

assert(abs(predictionMAE([10 12 14],[9 13 12])-4/3) < 1e-12);
assert(predictionMAE([2 4 6],[2 4 6]) == 0);
assert(predictionMAE([1 3],[1; 3]) == 0);

کنترل اول یک جواب دستی را بررسی می‌کند. کنترل دوم می‌گوید پیش‌بینی کاملاً برابر باید خطای صفر داشته باشد. کنترل سوم مدیریت بردار سطری و ستونی را می‌سنجد. هیچ‌کدام به‌تنهایی همه رفتارهای تابع را ثابت نمی‌کنند، اما از صرف دیدن یک خروجی روی صفحه مفیدترند.

حالا تمرین را خودت گسترش بده

  1. به‌جای قدرمطلق، خطا را مربع کن و RMSE را حساب کن.
  2. واحد نتیجه را بنویس و با واحد MAE مقایسه کن.
  3. یک خطای بزرگ به داده اضافه کن و حساسیت دو معیار را ببین.
  4. برای ورودی‌های با طول متفاوت، بررسی کن پیام خطا روشن است یا نه.

ارتباط تمرین با برنامه‌نویسی متلب

تابع‌نویسی فقط برای تمیزشدن ظاهر کد نیست؛ کمک می‌کند یک کار تکرارشونده قرارداد روشن داشته باشد و جداگانه بررسی شود. در تحلیل داده، بهینه‌سازی و ارزیابی LSTM همین تفکیک کوچک، بررسی نتیجه را آسان‌تر می‌کند.

دوره مرتبط: آموزش متلب از مقدماتی تا پیشرفته