چگونه هوش مصنوعی را با استفاده از scikit-learn پیادهسازی کنیم؟
در این مطلب قصد داریم یکی از قدرتمندترین ابزارهای قابلاستفاده در پایتون را برای پیادهسازی هوش مصنوعی در کوتاهترین زمان به کار ببریم و…
چگونه هوش مصنوعی را با استفاده از scikit-learn پیادهسازی کنیم؟
در این مطلب قصد داریم یکی از قدرتمندترین ابزارهای قابلاستفاده در پایتون را برای پیادهسازی هوش مصنوعی در کوتاهترین زمان به کار ببریم و شما را با اصول کلی طراحی در این زمینه آشنا کنیم.
دانشمندان داده از هوش مصنوعی (AI) برای انجام طیف وسیعی از کارها استفاده میکنند. در حال حاضر، سیستمهای کنترلی قادر به کاهش مصرف انرژی ساختمانها هستند، توصیههایی برای خرید لباس یا تماشای فیلمها و سریالها ارائه میدهند، به بهبود شیوههای کشاورزی و آبیاری کم میکنند و حتی قادر به هدایت خودروها هستند. دانستن نحوه استفاده از این ابزارها به شما کمک میکند تا بتوانید چالشهای فنی مهم دیگر جامعه را حل کنید.
خوشبختانه شروع به کار باهوش مصنوعی برای افرادی که از قبل با پایتون و تجزیهوتحلیل دادهها کار کردهاند، چندان دشوار نیست. شما میتوانید از بسته قدرتمند scikit-learn برای انجام فرایندهای سخت برنامهنویسی استفاده کنید.
scikit-learn چیست؟
scikit-learn یک بسته پایتون است که برای تسهیل استفاده از الگوریتمهای یادگیری ماشین و هوش مصنوعی طراحی شده است. بسته فوق شامل الگوریتمهایی است که برای طبقهبندی، رگرسیون و خوشهبندی، جنگلهای تصادفی و الگوریتمهای ارتقا شیب استفاده میشود. این بسته نرمافزاری بهگونهای طراحی شده است که تعامل خوبی با سایر بستههای رایج علمی دارد. علیرغم اینکه به طور خاص برای کار با پانداس طراحی نشده، اما با پانداس ارتباط خوبی دارد.
علاوه بر این، scikit-learn شامل ابزارهای مفیدی برای تسهیل استفاده از الگوریتمهای یادگیری ماشین است. طراحی و توسعه گذرگاههای انتقال داده مورداستفاده در یادگیری ماشین که دقت یک سیستم در پیشبینیها را به شکل قابلتوجهی بهتر میکنند، مستلزم تقسیمبندی دادهها به مجموعههای آموزشی و آزمایشی و امتیازدهی به الگوریتمها برای تعیین نحوه عملکرد خوب آنها و متمایز ساختن مدلهای مناسب و غیر مناسب از یکدیگر است. رابط کاربری scikit-learn شامل ابزارهایی برای انجام همه این وظایف است.
اسکیتلرن چگونه کار میکند؟
توسعه و آزمایش الگوریتمهای یادگیری اسکیت را میتوان به سه مرحله کلی زیر تقسیم کرد:
مدل را با استفاده از مجموعهدادههای موجود و توصیف پدیدههایی که برای پیشبینی مدل نیاز دارید، آموزش دهید.
مدل را با مجموعهدادههای دیگر آزمایش کنید تا از عملکرد خوب آن اطمینان حاصل کنید.
از مدل برای پیشبینی پدیدهها استفاده کنید.
رابط برنامهنویسی برنامه کاربردی scikit-learn دستوراتی را برای انجام هر یک از این مراحل با فراخوانی یک تابع واحد ارائه میدهد. همه الگوریتمهای یادگیری اسکیت از تابع یکسان برای این فرایند استفاده میکنند، بنابراین اگر با اصول اولیه آشنا شوید قادر به استفاده از آن در پروژههای دیگر هستید. آن را برای یک نفر یاد بگیرید، آن را برای همه یاد میگیرید.
فراخوانی تابع برای آموزش الگوریتم یادگیری اسکیت تابع .fit() است که برای آموزش هر مدل باید تابع فوق را فراخوانی کنید و دو مؤلفه از مجموعهدادههای آموزشی را به آن انتقال دهید. دو مؤلفه عبارتاند از مجموعهداده x، دادههایی که ویژگیهای مجموعهداده را توصیف میکند و داده y که اشاره به اطلاعاتی دارد که اهداف سیستم را توصیف میکند (ویژگیها (Features) و اهداف (Targets) از اصطلاحات یادگیری ماشین هستند که در اصل به معنی داده x و y هستند). الگوریتم سپس یک مدل ریاضی ایجاد میکند که توسط الگوریتم انتخاب شده و در ادامه پارامترهای مدل را بهگونهای تعیین میکند که تا حد ممکن با دادههای آموزشی ارائه شده مطابقت داشته باشند. در مرحله بعد پارامترها را در مدل ذخیره میکند و به شما این امکان را میدهد تا نسخه مناسب مدل را در صورت نیاز برای پروژه خود فراخوانی کنید.
تابع آزمایش هماهنگی مدل .score() نام دارد. برای استفاده از این تابع، باید آن را فراخوانی کنید و مجموعهداده x که نمایانگر ویژگیها و مجموعهداده y که بیانگر اهداف است را ارسال میکنید. نکته مهمی که باید در این بخش به آن دقت کنید این است که از مجموعهداده متفاوتی به نام مجموعهدادههای آزمایشی، برای آموزش مدل استفاده کنید. وقتی یک مدل بر مبنای دادههای تمرینی ارزشگذاری میشود، احتمالاً نمره بسیار خوبی خواهد گرفت، زیرا از نظر ریاضی مجبور است با آن مجموعهداده مطابقت داشته باشد. آزمایش واقعی این است که مدل چگونه روی مجموعهدادههای مختلف عملکرد خوبی داشته باشند، زیرا قرار است روی مجموعهدادههای واقعی عملکرد خوبی داشته باشد. هنگام فراخوانی تابع، تابع .score() بسته اسکیتلرن مقدار r² را برمیگرداند تا نشان دهد مدل چگونه مجموعهدادههای ارائه شده y را با استفاده از مجموعهداده ارائه شده x پیشبینی کرده است.
با استفاده از تابع .predict() بسته فوق میتوانید خروجی یک سیستم را باتوجهبه ورودیهای ارائه شده پیشبینی کنید. نکته مهم دیگری که باید به آن دقت کنید این است که فرایند فوق را تنها پس از نصب مدل انجام دهید. در اینجا یک فرایند برازش انجام میشود که نشان میدهد چگونه نحوه تطابق مدل با مجموعهداده را مدیریت کنید؛ بنابراین اگر این کار را انجام ندهید، مدل پیشبینی ارزشمندی ارائه نمیکند. هنگامی که کارهای مربوطه انجام شد، در ادامه میتوانید یک مجموعهداده x را به تابع .predict() انتقال دهید تا مدل یک مجموعهداده y پیشبینی شده را بهعنوان خروجی باز گرداند. بهاینترتیب میتوانید نحوه رفتار سیستم در آینده را پیشبینی کنید.
این سه تابع عملکرد پایه و اصلی واسط برنامهنویسی کاربردی اسکیتلرن را شکل میدهند و به شما کمک میکنند از هوش مصنوعی برای حل مشکلات فنی استفاده کنید.
چگونه میتوان مجموعهدادههای آموزشی و آزمایشی ایجاد کرد؟
ایجاد مجموعهدادههای آموزش جداگانه و آزمایشی یکی از مهمترین بخشهای آموزش مدلهای هوش مصنوعی است. بدون انجام این کار، نمیتوانیم مدلی ایجاد کنیم که با سیستمی که سعی در پیشبینی آن داریم مطابقت داشته باشد و علاوه بر این، نمیتوان صحت پیشبینیهای انجامگرفته را تأیید کرد. خوشبختانه، اسکیتلرن یک ابزار مفید برای تسهیل این فرایند آماده کرده است. این ابزار train_test_split() نام دارد.
Train_test_split() دقیقاً همان کاری را انجام میدهد که از نامش پیدا است. تابع فوق مجموعهداده دریافتی را به مجموعهدادههای آموزشی و آزمایشی تقسیم میکند. توسعهدهندگان میتوانند از ابزار فوق برای ساخت مجموعهدادههای موردنیاز خود استفاده کنند تا مطمئن شوند مدل طراحی شده بهدرستی قادر به پیشبینی است. در اینجا باید یک مجموعهداده در اختیار train_test_split قرار دهید و مجموعهدادههای آموزشی و آزمایش موردنیاز را آماده کنید. در ادامه مجموعهداده را به مجموعهدادههای آموزشی و آزمایشی که میتوانید برای توسعه مدل خود استفاده کنید، تقسیم میکند.
هنگام استفاده از تابع فوق باید به چند نکته توجه کرد. اول اینکه train_test_split ماهیتی تصادفی دارد. به بیان دقیقتر، تابع فوق اگر چندمرتبه دادههای ورودی یکسانی را اجرا کند، مجموعهدادههای آموزشی و آزمایشی یکسانی را بر نمیگرداند. اگر میخواهید دقت مدل را آزمایش کنید، رویکرد فوق مناسب است، اما اگر بخواهید بارهاوبارها از یک مجموعهداده مشابه در مدل استفاده کنید، ممکن است چندان جالب نباشد. برایآنکه اطمینان حاصل کنید در هر مرتبه اجرا نتیجه یکسانی را دریافت میکنید پیشنهاد میکنم از پارامتر random_state استفاده کنید. تنظیم حالت تصادفی آن را مجبور میکند که هر بار که از آن استفاده میکنید از همان هسته تصادفی استفاده کند و تقسیمات داده یکسانی را ارائه دهد. بیشتر توسعهدهندگان هنگام استفاده از random_state آن را روی مقدار 42 تنظیم میکنند.
وقتی این ابزارها با هم ترکیب میشوند چگونه کار میکنند؟
در مجموع، این ابزارها یک رابط کاربری ساده برای ساخت و استفاده از ابزارهای یادگیری اسکیت ایجاد میکنند. بهتر است برای درک بهتر موضوع از مثال مدل خطی رگرسیون اسکیتلرن استفاده کنیم.
برای پیادهسازی این فرایند باید ابزارهای موردنیاز برای انجام این کار را فراخوانی کنید. آنها شامل مدل اسکیتلرن، تابع train_test_split() و پانداس برای فرایند تجزیهوتحلیل دادهها است. توابع به شرح زیر استفاده میشوند:
from scikit-learn.linear_model import LinearRegression
from scikit-learn.model_selection import train_test_split
import pandas as pd
اکنون میتوانیم از مجموعه دادهای برای آموزش و آزمایش مدل استفاده کنیم. اکنون باید مشابه با دستور زیر از مجموعه دادهای که در اختیار دارید در ارتباط با مدلی که قصد ایجاد آن را دارید استفاده کنید.
data = pd.read_csv(‘Hamid_Reza_Taebi.csv’, index_col = 0)
در ادامه باید تقسیم دادههای مجموعه به دادههای X و y را انجام دهید و خصلتهایی که به دنبال ارزیابی آنها هستید را در قالب ستونهایی مشخص کنید. در این مورد نیز مهم است که مجموعهدادههای خود را فیلتر کنید، بهگونهای که فقط در لحظه از دادهها استفاده کند. اگر این مرحله را نادیده بگیریم، مدل غیرخطی را به یک مدل خطی تبدیل میکنید و مدل با شکست روبرو میشود.