مقدمه کوتاه در مورد آموزش یادگیری ماشین با پایتون
دوستان عزیز، قبل از اینکه به آموزش یادگیری ماشین با پایتون بپردازیم بیایید نگاهی به رویای محققان علوم کامپیوتر بیاندازیم. یک خانم خانهدار دوست دارد یک ربات خستگیناپذیر در کارها و امورات روزانه بهاو کمک کند. مدیران شرکتها و کارخانهها میخواهند حداکثر بهرهوری از خط تولید خود را داشته باشند. برنامهنویسان و طراحان صفحات وب، علاقمند هستند که یک الگوریتم بهینه برای مدیریت حجم انبوه دادههای ورودی طراحی کنند؛ بهنحوی که الگوریتمشان دچار خطا نشود یا حتی از کار نیوفتند. دانش آموزان تمایل دارند با استفاده از نرم افزارهای هوشمند اشکالات خود را برطرف کنند.
از هر زاویه که به زندگی روزمره نگاه کنیم؛ متوجه خواهیم شد که آموختن و به کار بستن قواعد و اصول طراحی ماشین هوشمند، بهعنوان یک نیاز روز همواره امری لازم و ضروری است. دانشمندان حوزه علوم کامپیوتر در نظر دارند؛ تمام این خواستههای مردم عادی را عملی کنند. اگر شما هم بهدنبال آسان کردن زندگی برای مردم و خدمت بهآنها هستید؛ باید از همین امروز هوش مصنوعی و چگونگی استفاده از زبانهای یادگیری ماشین را بیاموزید.
الگوریتمهای طراحی شده بهشما کمک خواهند کرد که در کنار کسب درآمدهای بالا، از پیچیدگی محاسبات الگوریتمهای موجود بکاهید و کار را برای خود و همکارانتان آسان کنید. در ادامه، کاربردهای یادگیری ماشین را ملاحظه میکنید.
پیشنیاز های آموزش یادگیری ماشین با پایتون
دوستان و همراهان گرامی، بهعنوان یک مدرس علوم کامپیوتر به شما میگویم که قبل از فراگیری اصول یاادگیری ماشین با پایتون، نیاز است در ابتدا بهریاضیات تسلط داشته باشید؛ علم آمار و احتمالات و چگونگی محاسبات عددی را آموخته و بهعملکرد انواع توابع ریاضی ازجمله توابع جبرخطی، حساب دیفرانسیل، واریانس، انتگرال و غیره آشنایی داشته باشید. توصیه میشود اگر به ریاضیات مسلط نیستند؛ بهمرحله بعد نروید.
در این مقاله، کلیه آموزشها بر مبنای پایتون شکل میگیرد و از انواع ماژولهای پایتون برای دریافت بهینهترین حالات ممکن استفاده خواهد شد. آموزشهای مقدماتی پایتون، شما را آماده میکند تا در این بخش دچار مشکل نشوید. در انتها هم از آمار و احتمالات و ریاضیات استفاده خواهیم کرد تا بر اساس آموزشها و تجزیه و تحلیلهای صورت گرفته، بهترین نتیجه را پیشبینی کنیم. پیشنهاد می کنیم برای آموزش زبان پایتون حتماً از مجموعه آموزش های پایتون فرادرس استفاده کنید.
مثال کاربردی از یادگیری ماشین
بهجدول زیر توجه کنید.
دوستان عزیز از مشاهده پایگاه داده بالا، چه اطلاعاتی را میتوان استخراج کرد؟ آیا میتوان گفت که میزان سرعت متوسط خودروها چیزی در حدود ۸۰ یا ۹۰ است؟ یا مثلاً میتوان نتیجه گرفت که رنگ سفید محبوبترین رنگ در بین رنگهای پایگاهداده است؟ یادگیری ماشین هم همین کار را انجام میدهد. دادههای موجود در پایگاه داده را بررسی کرده و از تجزیه و تحلیل دادههای موجود، نتیجهگیری کرده و سپس با استفاده از نتایج بهدست آمده، مدل متناسب با هدف مجموعه را استخراج میکند.
گروه بندی داده ای در یادگیری ماشین
هر ماشینی قبل از شروع فرآیند تجزیه و تحلیل باید دادهها را در گروه مناسب خود دستهبندی کند. دادهها در حالت کلی در سه دسته عددی، ترتیبی و طبقهبندی شده قرار میگیرند که در ادامه توضیحی اجمالی از هر کدام آورده شده است.
- دادههای عددی: این نوع دادهها به صورت پیوسته مثل قیمت کالای یک کارخانه یا گسسته مثل تعداد خودروهای عبوری از خط ترخیص گمرک بهواحد آموزش ماشین ارائه میشود.
- دادههای ترتیبی: دادههای مقایسهپذیری هستند که میتوان برای آنهای میانگین درنظر گرفت و بر اساس میانگین دیتاهای پایگاه داده به نتیجه رسید. مثل نمرات دنشجویان یک ورودی در یک رشته خاص یا ستون مربوط به سرعت متوسط و سن هر خودرو در پایگاه داده جدول بالا.
- دادههای طبقهبندی شده: این دادهها قابل مقایسه و میانگینگیری نیستند. مثل ستون مربوط به فلگ یا رنگ در جدول پایگاه داده بالا. دادههای طبقهبندی شده هم بر اساس تعداد تکرارشان یا معیارهای دیگر قابل نتیجهگیری هستند.
آشنایی با مفاهیم ریاضی در یادگیری ماشین
عزیزان، برای درک بهتر مقدمات مبحث آموزش یادگیری ماشین با پایتون، بهتر است که با مفاهیم ریاضی میانگین، میانه، مُد، انحراف معیار و واریانس آشنا شوید تا در کدنویسی با مشکل روبرو نشوید.
۱- میانگین
با محاسبه مقدار متوسط دادههای عددی یا ترتیبی پایگاه داده، میانگین آن مجموعه بهدست میآید. بهعنوان مثال در جدول بالا، میزان سرعت متوسط سرعت ۱۳ خودرو به ترتیب زیر آمده است.
Speed = [ 99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86 ]
می دانیم میانگین مجموعه بالا به روش زیر بهدست خواهدآمد.
۸۹.۷۷ = 13 / (۹۹ + ۸۶ + ۸۷ + ۸۸ + ۱۱۱ + ۸۶ + ۱۰۳ + ۸۷ + ۹۴ + ۷۸+ ۷۷+ ۸۵+ ۸۶)
یادگیری ماشین، میزان متوسط سرعت این ۱۳ خودرو را با استفاده از متد NumPy به شرح زیر محاسبه میکند.
import numpy speed = [99,86,87,88,111,86,103,87,94,78,77,85,86] x = numpy.mean(speed) print(x)
۲- میانه
برای محاسبه میانه در دادههای ترتیبی و عددی ابتدا باید دادهها مرتب شده و سپس مقداری که در وسط دادهها قرار گرفته بهعنوان میانه انتخاب شود. در مثال زیر، میخواهیم میانه سرعت متوسط پایگاه داده را پیدا کنیم.
۱۱۱, ۱۰۳, ۹۹, ۹۴, ۸۸, ۸۷, ۸۷, ۸۶, ۸۶, ۸۶, ۸۵, ۷۸, ۷۷
بهتکه کد زیر توجه کنید.
import numpy speed = [99,86,87,88,111,86,103,87,94,78,77,85,86] x = numpy.median(speed) print(x)
گاهی اتفاق میافتد که تعداد کل دادهها زوج باشد. در این صورت باید دو عددی که در وسط قرار گرفتهاند؛ جمع شده و تقسیم بر دو شوند. بهمثال زیر توجه کنید.
۸۶.۵ = 2 / (۸۷+۸۶) ⇒ ۱۰۳, ۹۹, ۹۸, ۹۴, ۸۷, ۸۷, ۸۷, ۸۶, ۸۶, ۸۶, ۸۵, ۷۸, ۷۷
نحوه کدنویسی محاسبه میانه در پایتون به شکل زیر، انجام میشود.
import numpy speed = [99,86,87,88,86,103,87,94,78,77,85,86] x = numpy.median(speed) print(x)
۳- مُد
در بین دادههای موجود، هرکدام که بیشتر از همه تکرار شود را بهعنوان مد برمیگزینیم. به مثال زیر توجه کنید.
⇒ ۸۶, ۸۵, ۷۷, ۷۸, ۹۴, ۸۷, ۱۰۳, ۸۶, ۱۱۱, ۸۸, ۸۷, ۸۶, ۹۹
Mode = 86
بهنحوه کدنویسی مد در محیط پایتون توجه بفرمایید.
rom scipy import stats speed = [99,86,87,88,111,86,103,87,94,78,77,85,86] x = stats.mode(speed) print(x)
۴- انحراف معیار
تعیین انحراف معیار در مبحث آموزش یادگیری ماشین با پایتون بسیار مهم است. بهاین ترتیب که میزان انحراف استانداردی به عنوان معیار پراکندگی دادههای دستهبندی شده تعیین میگردد و از آن به بعد، نتایج پایینتر از معیار تعیین شده، نشانگر نزدیکی اعداد به میانگین خواهد بود و نتایج بالاتر از معیار پراکندگی، نشان میدهد که دادهها در سطح وسیعتری پخش شدهاند. بهمثال زیر که از جدول بالا برای بررسی انحراف معیار ۷ خودرو آورده شده است؛ توجه کنید.
Speed = [ 86, 87, 88, 86, 87, 88, 85, 86 ]
در مثال بالا، میزان انحراف معیار ۰.۹ خواهد بود. نحوه کدنویسی انحراف معیار بهشرح زیر است.
import numpy speed = [86,87,88,86,87,85,86] x = numpy.std(speed) print(x)
۵- واریانس
همراهان گرامی، نحوه محاسبه واریانس یا میزان پراکندگی بسیار ساده است. بهاین ترتیب که اگر انحراف معیار را در خودش ضرب کنید؛ واریانس بهدست خواهد آمد. به نحوه کدنویسی واریانس در پایتون توجه بفرمایید.
import numpy speed = [32,111,138,28,59,77,97] x = numpy.var(speed) print(x)
نحوه مطالعه کلان داده
دوستان عزیز، در مثالهای بالا مشاهده میکنید که جامعه آماری بسیار کوچک است. درحالی که در دنیای واقعی اینچنین نیست و ما با حجم باانبوهی از دادهها مواجه هستیم. در این صورت ماژول NumPy با استفاده از انواع روشهای آماده، میتواند چاره کار باشد و از پیچیدگی محاسبات بکاهد. بهعنوان مثال، در تکه کد زیر، یک آرایه ۲۵۰ تایی اعداد تصادفی در بازه ۰ تا ۵ با استفاده از ماژول NumPy جهت بررسی و تجزیه و تحلیل بهماشین یادگیری مدل، تحویل داده میشود.
import numpy x = numpy.random.uniform(0.0, 5.0, 250) print(x)
در این روش، جامعه آماری کوچکتر برای تصمیمگیری مدل آموزش ایجاد میشود. با بررسی مثال بیان شده، میتوانید بیاموزید که چگونه یک آرایه تصادفی، با اندازه معین و بین دو مقدار داده شده میتوان ایجاد کرد.
رسم هیستوگرام
بسیاری از اساتید حوزه علوم کامپیوتر، برای درک بهتر جامعه آماری و حصول نتایج دقیقتر معمولاً پیشنهاد میکنند که دانشجویان همواره نمودارهای مربوط به یافتههایشان را رسم کنند. دوستان عزیز، اصلاً نگران نباشید. پایتون برای تمام مسائل یک راه حل از پیش طراحی شده، ارائه میکند و برای رسم هیستوگرام، بهراحتی میتوانید از ماژول Matplotlib استفاده کنید. اگر باورتان نمیشود که این کار واقعاً ساده است؛ توصیه میکنم بهنمودار مثال بالا، توجه بفرمایید.
import numpy import matplotlib.pyplot as plt x = numpy.random.uniform(0.0, 5.0, 250) plt.hist(x, 5) plt.show()
با پیادهسازی تکه کد بالا، نمودار زیر بهدست خواهد آمد.
احتمالاً برایتان سؤال پیش آمده باشد که ماشین با بررسی نمودار بالا، چه اطلاعاتی بهدست خواهد آورد؟! در جواب، باید بگویم که در جامعه آماری مورد بررسی، ۵۲ داده در بازه ۰ و ۱، ۴۸ مقدار در بازه ۱ و ۲، ۴۹ داده بین بازه ۲ و ۳، ۵۱ مقدار بین ۳ و ۴ و بههمین صورت، ۵۰ داده هم در بازه ۴ و ۵ قرار میگیرد.
توزیع نرمال داده
عزیزان، در این بخش از آموزش یادگیری ماشین با پایتون، باید یک آرایه تصادفی ایجاد کنید که در آن مقادیر دادهای حول یک مقدار معین متمرکز شود. نام دیگر این روش، توزیع نرمال گاوسی بوده و نمودار حاصل از آن به منحنی زنگ معروف است. در ادامه، میخواهیم توزیع نرمال داده برای آرایه با ۱۰۰۰۰۰ عدد تصادفی را بررسی کنیم. برای این منظور از متد ()Numpy.random.normal استفاده کرده و با فرض اینکه مقدار میانگین برابر با ۵.۰ و انحراف استاندار ۱.۰ باشد؛ با استفاده از یک هیستوگرام ۱۰۰ میلهای آن را بهنمایش میگذاریم.
import numpy import matplotlib.pyplot as plt x = numpy.random.normal(5.0, 1.0, 100000) plt.hist(x, 100) plt.show()
نمودار حاصل از پیادهسازی تکه کد، به شکل زیر خواهد بود.
در نمودار بالا، مشاهده میکنید که مقادیر دادهای در بازه ۴.۰ و ۶.۰ قرار گرفته و حدوداً حول مقدار تعیین شده ۵.۰ متمرکز شدهاند.
رگرسیون خطی
گاهی اتفاق میافتد که ماشین میخواهد رابطه بین متغییرها را کشف کند. در اینصورت است که روش رگرسیون بهکار میآید. از این روش، در علم مدلسازی آماری و روشهای یادگیری ماشین، برای پیشبینی نتیجه رویدادهای آتی استفاده میشود. رگرسیون خطی، همان طور که از نام آن پیداست بهکمک یک خط راست، رابطه بین نقاط داده را پیشبینی میکند. شکل زیر نشان میدهد که رگرسیون خطی چگونه بهکمک تعیین روابط بین دادههای آماری کمک میکند.
مثالی برای کاربرد رگرسیون خطی در یادگیری ماشین
ایستگاه عوارضی ورودیهای هر شهر روزانه هزاران خودرو را ثبت میکنند. ما اطلاعات مربوط به سن و سرعت ۱۳ خودرو از عوارضی زنجان تبریز را جمعآوری کردیم. با استفاده از محور X سن هر خودرو و با استفاده از محور Y سرعت مربوط بهآن خودرو را نشان دادهایم. میخواهیم با استفاده از روش رگرسیون خطی، ارتباط بین این دو پارامتر را بیابیم. البته در نظر داشته باشید که از قبل باید بدانیم که ارتباطی بین این دو محور وجود دارد. درغیر اینصورت رگرسیون خطی کاربردی در این مورد نخواهد داشت. با رسم نمودار پراکندگی، حل مسئله را شروع میکنیم.
import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] plt.scatter(x, y) plt.show()
از پیادهسازی تکه کد بالا، نمودار زیر ایجاد خواهد شد.
حالا با استفاده از Scipy بهراحتی میتوانید رگرسیون خطی را کدنویسی کنید.
import matplotlib.pyplot as plt from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
نتیجه حاصل از اجرای تکه کد بالا، در ادامه آورده شده است.
ضریب همبستگی R
در تکمیل مبحث آموزش یادگیری ماشین با پایتون، برای اینکه بدانیم بین گروههای دادهای ارتباط وجود دارد یا نه از ضریب همبستگی R استفاده میکنیم. ضریب همبستگی R در بازه ۱ و ۱- قرار میگیرد ولی اگر مقدار این ضریب برابر با ۰ باشد؛ بهاین معنی است که بین متغییرهای دسته مورد نظر ارتباطی وجود ندارد. دوستان عزیزم، نیاز نیست که محاسبات مربوط به ضریب همبستگی R را بدانید. ماژول Scipy موجود در محیط پایتون این کار را برای شما انجام خواهد داد. به تکه کد زیر توجه کنید.
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
ضریب همبستگی، بهماشین کمک میکند تا با تشخیص صحیح روابط بین دادهها، الگوی آموزش جامعتری طراحی کرده و تأثیر قابل توجهی در طراحی مدل آموزشی متناسب با هدف مجموعه داشته باشد. با کمی تأمل در تکه کد بالا، میتوان نتیجه گرفت که میزان سرعت قابل قبول برابر با ۸۵.۶ است. به نتیجه اجرای تکه کد، توجه کنید.
پیشنهاد میکنیم برای یادگیری کامل این مبحث از آموزش کتابخانه scikit-learn در پایتون فرادرس استفاده کنید.
سخن آخر در رابطه با آموزش یادگیری ماشین با پایتون
دوستان و همراهان همیشگی مجموعه پی استور، خسته نباشید. ملاحظه کردید که سازمانها و مؤسسات بهسادگی میتوانند با تصادفیسازی، جوامع کوچکتری تشکیل داده؛ با استفاده از روشها و الگوهای موجود، ارتباط بین دادهها را بررسی کرده و از ارتباطات مؤثر بهنتایج مطلوب تولید مدل آموزشی مناسب برسند. شما عزیزان می توانید از مقاله خوشه بندی K-Means در پایتون نیز برای افزایش اطلاعات و دانش خود در یادگیری ماشین، استفاده کنید.
مشاهده میکنید که آموزش یادگیری ماشین بسیار فرار است. برای آموزش کامل و جامع این مبحث باید ساعات بیشتری را صرف کرده و مطالعات بیشتری انجام دهید. توصیه میکنم آموزشهای مرتبط با این پست را هم دانلود کرده و بررسی کنید. امیدواریم آنچه که گفته شد را در ابعاد و دادههای بزرگتر پیادهسازی کرده و نتایج خود را با ما بهاشتراک بگذارید. از اینکه همواره نظرات و پیشنهادات خود را با ما در میان میگذارید و ما را در بهبود هرچه بهتر کیفیت آموزشی یاری میکنید؛ از شما متشکریم.
موفق و پیروز باشید.
یک پاسخ
در مورد انواع رگرسیون خطی هم توضیح بدین ممنون می شم.