برازش منحنی در پایتون

تصویر یک
تصویر یک

طرح مسئله

فرض کنید تعدادی نقاط از یک تابع مجهول را در اختیار داریم می خواهیم تابع اصلی را با استفاده از این داده ها پیدا کنیم. گاه این تابع وجود خارجی ندارد و هدف ما صرفا پیدا کردن تابعی است که تا حد امکان به داده ها موجود نزدیک باشد. برای پیچیدگی فرض کنید بر روی داده های نمونه مقداری نویز وجود دارد. در تصویر فوق با در دست داشتن مقادیر x و y می خواهیم تابع f یا تابعی نزدیک به این تابع را بدست آوریم. هدف برازش یا رگریسیون پیدا کردن تابعی تا حد ممکن نزدیک به تابع f از روی مقادیر y است.

ابزار های برازش یا رگریسیون با استفاده از مقادر x وy سعی در تخمین تابع f هستند.
ابزار های برازش یا رگریسیون با استفاده از مقادر x وy سعی در تخمین تابع f هستند.

تولید داده تصادفی

با استفاده از توابع کتابخانه numpy و اسکریپت زیر تعدادی نمونه تصادفی برای تابع sin ایجاد می کنیم.

در خط 6 به تعداد ۲۰ نقطه به صورت تصادفی در بازه ۰ تا ۷ انتخاب می شود در خط ۷ آنها را مرتب می کنیم.

خط ۹ داده تصادفی از نوع نرمال ایجاد و درون متغییر noise قرار می گیرد.

خط ۱۳ داده نویز به مقدار واقعی y اضافه می شود تا داده تصادفی ایجاد شود

تخمین تابع

حال با در دست داشتن مقدار x و ynoise می خواهیم تابعی بدست بیاوریم که تا حد امکان به y نزدیک باشد.

خط ۱۶ از تابع polyfix برای تخمین چند جمله ای استفاده می شود این تابع مقادیر x وynoise را دریافت می کند و ضرایب چند جمله ای را به عنوان خروجی بر می گرداند.

خط ۱۷ با داشتن ضرایب چند جمله ای را ایجاد می کند

خط ۲۰ داده ها تخمین زده توسط چند جمله ایجاد شده درون متغییر yest قرار می گیرد.

نمودار سبز نمودار تابع y تابع هدف است. نمودار قرمز نمودار داده های نویز دار و نمودار آبی نمودار چند جمله ای تخمین زده است.
نمودار سبز نمودار تابع y تابع هدف است. نمودار قرمز نمودار داده های نویز دار و نمودار آبی نمودار چند جمله ای تخمین زده است.