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

اما انجام یادگیری ماشینی با برنامه نویسی کلاسیک تفاوت اساسی دارد. در این مقاله ، اصول یادگیری ماشین را یاد خواهید گرفت و یک مدل اساسی ایجاد خواهید کرد که می تواند گونه های گل را بر اساس اندازه گیری های آنها پیش بینی کند.

یادگیری ماشین چگونه کار می کند؟

برنامه نویسی کلاسیک به مشکلات کاملاً مشخصی متکی است که می تواند به کلاسهای مختلف ، توابع و دستورات if – else تقسیم شود. از طرف دیگر ، یادگیری ماشین به توسعه رفتار خود بر اساس تجربه متکی است. به جای ارائه مدل های یادگیری ماشین با قوانین ، آنها را از طریق مثال آموزش می دهید.

دسته های مختلفی از الگوریتم های یادگیری ماشین وجود دارد که هر کدام می توانند مشکلات خاصی را حل کنند.

یادگیری تحت نظارت

یادگیری تحت نظارت برای مشکلاتی که می خواهید از داده های ورودی به نتایج بروید مناسب است. ویژگی مشترک همه مشکلات یادگیری تحت نظارت این است که یک حقیقت اساسی وجود دارد که می توانید مدل خود را مانند تصاویر دارای برچسب یا داده های فروش تاریخی آزمایش کنید.

مدل های یادگیری تحت نظارت می توانند مشکلات رگرسیون یا طبقه بندی را حل کنند. مدل های رگرسیون مقادیر (مانند تعداد کالاهای فروخته شده یا قیمت سهام) را پیش بینی می کنند در حالی که مشکلات طبقه بندی سعی در تعیین دسته داده های ورودی دارد (مانند گربه / سگ / ماهی / پرنده ، کلاهبرداری / نه کلاهبرداری).

طبقه بندی تصویر ، تشخیص چهره ، پیش بینی قیمت سهام و پیش بینی فروش نمونه هایی از مشکلات یادگیری تحت نظارت است که می تواند حل کند.

برخی از الگوریتم های یادگیری نظارت شده رایج شامل رگرسیون خطی و لجستیک ، ماشین های بردار پشتیبان ، درخت های تصمیم گیری و شبکه های عصبی مصنوعی هستند.

یادگیری بدون نظارت

یادگیری بدون نظارت برای مشکلاتی که در آنها داده دارید مناسب است اما به جای نتایج ، به دنبال الگوهایی هستید. به عنوان مثال ، ممکن است بخواهید مشتریان خود را بر اساس شباهت هایشان به بخشهایی تقسیم کنید. به این میگن خوشه بندی در یادگیری بدون نظارت. یا ممکن است بخواهید ترافیک شبکه مخربی را که از فعالیت عادی در شرکت شما فاصله دارد ، شناسایی کنید. به این میگن تشخیص ناهنجاری، یک کار یادگیری بدون نظارت دیگر است. یادگیری بدون نظارت نیز برای مفید است کاهش ابعاد، ترفندی است که با حذف ویژگیهای نامربوط ، وظایف یادگیری ماشین را ساده می کند.

برخی از الگوریتم های محبوب یادگیری بدون نظارت شامل خوشه بندی K-means و تجزیه و تحلیل م principleلفه های اصلی (PCA) هستند.

یادگیری تقویت

یادگیری تقویت شاخه ای از یادگیری ماشین است که در آن یک عامل باهوش سعی می کند با تعامل با محیط خود به هدفی دست یابد. یادگیری تقویت شامل اقدامات ، حالت ها و پاداش ها است. یک عامل RL آموزش ندیده با اقداماتی تصادفی شروع به کار می کند. هر عملی وضعیت محیط را تغییر می دهد. اگر نماینده خود را در حالت مطلوب ببیند ، پاداش دریافت می کند. عامل سعی می کند توالی اعمال و حالاتی را پیدا کند که بیشترین پاداش را دارند.

یادگیری تقویت در سیستم های توصیه ، رباتیک و ربات های بازی مانند AlphaGo و AlphaStar Google استفاده می شود.

تنظیم محیط پایتون

در این پست ، ما یادگیری تحت نظارت را مورد توجه قرار خواهیم داد ، زیرا این شاخه محبوب ترین شاخه یادگیری ماشین است و نتایج آن آسان تر ارزیابی می شود. ما از پایتون استفاده خواهیم کرد ، زیرا این ویژگی ها و کتابخانه های بسیاری دارند که از برنامه های یادگیری ماشین پشتیبانی می کنند. اما مفاهیم کلی را می توان برای هر زبان برنامه نویسی که دارای کتابخانه های مشابه است ، به کار برد.

(درصورتی که تازه وارد پایتون شوید ، freeCodeCamp از ویژگی های بسیار خوبی برخوردار است) دوره سقوط این کار شما را با اصول اولیه شروع می کند.)

یکی از کتابخانه های پایتون که اغلب برای علم داده و یادگیری ماشین استفاده می شود ، می باشد Scikit یاد بگیر، که پیاده سازی الگوریتم های محبوب یادگیری ماشین را فراهم می کند. Scikit-learn بخشی از نصب پایه Python نیست و باید آن را به صورت دستی نصب کنید.

macOS و Linux با نصب مجدد پایتون ارائه می شوند. برای نصب کتابخانه Scikit-learn ، دستور زیر را در یک پنجره ترمینال تایپ کنید:

pip install scikit-learn

یا برای پایتون 3:

python3 -m pip install scikit-learn

در Microsoft Windows ، ابتدا باید پایتون را نصب کنید. شما می توانید نصب آخرین نسخه Python 3 برای ویندوز را از اینجا دریافت کنید وب سایت رسمی. پس از نصب پایتون ، دستور زیر را در یک پنجره خط فرمان تایپ کنید:

python -m pip install scikit-learn

همچنین می توانید چارچوب Anaconda را نصب کنید ، که شامل نصب مستقل Python 3 به همراه Scikit-learn و بسیاری دیگر از کتابخانه های مورد استفاده برای علم داده و یادگیری ماشین است ، مانند پوزخند، کلاهبردار، و Matplotlib. می توانید دستورالعمل نصب نسخه رایگان آناکوندا را بصورت رایگان مشاهده کنید وب سایت رسمی آن.

مرحله 1: مسئله را تعریف کنید

اولین قدم برای هر پروژه یادگیری ماشین ، دانستن این است که می خواهید چه مشکلی را حل کنید. تعریف مسئله به شما کمک می کند نوع داده مورد نیاز برای جمع آوری را تعیین کنید و از نوع الگوریتم یادگیری ماشین که باید استفاده کنید ایده ای به شما می دهد.

در مورد ما ، ما می خواهیم مدلی ایجاد کنیم که گونه های گل را بر اساس اندازه گیری گلبرگ و کاسبرگ طول و عرض.

این یک مشکل طبقه بندی تحت نظارت است. ما باید لیستی از اندازه گیری نمونه های مختلف گل و گونه های مربوط به آنها را جمع آوری کنیم. سپس ما از این داده ها برای آموزش و آزمایش یک مدل یادگیری ماشین استفاده خواهیم کرد که می تواند اندازه گیری ها را بر روی گونه ها ترسیم کند.

مرحله 2: داده ها را جمع آوری کنید

یکی از پیچیده ترین قسمت های یادگیری ماشین جمع آوری داده ها برای آموزش مدل های شما است. شما باید منبعی را پیدا کنید که بتوانید داده ها را به مقدار لازم برای آموزش مدل خود جمع کنید. همچنین باید کیفیت داده های خود را تأیید کنید ، مطمئن شوید که نمایانگر موارد مختلفی است که مدل شما برطرف می کند و از جمع آوری داده هایی که دارای تعصبات پنهان هستند ، خودداری کنید.

خوشبختانه برای ما ، Scikit-learn شامل چندین مجموعه داده اسباب بازی برای آزمایش الگوریتم های مختلف یادگیری ماشین است. یکی از آنها “مجموعه داده های گل زنبق”، که اتفاقاً حاوی داده های دقیق مورد نیاز ما برای مشکل خود است. تنها کاری که باید انجام دهیم بارگیری آن از کتابخانه است.

کد زیر مجموعه داده مسکن را بارگیری می کند:

from sklearn.datasets import load_iris

iris = load_iris()

مجموعه داده Iris شامل 150 مشاهده است که هر یک شامل چهار اندازه گیری است (iris.data) و گونه های گل هدف (iris.target) نام ستون های داده را می توان در مشاهده کرد iris.feature_names:

print(iris.feature_names)
'''
['sepal length (cm)',
 'sepal width (cm)',
 'petal length (cm)',
 'petal width (cm)']
'''

iris.target شامل شاخص عددی (0-2) از یکی از سه گونه گل ثبت شده در مجموعه داده است. نام گونه های گل در موجود است iris.target_names:

print(iris.target_names)
'''['setosa' 'versicolor' 'virginica']'''

مرحله 3: مجموعه داده را تقسیم کنید

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

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

بسته به نوع مسئله ای که حل می کنید و مقدار داده شما ، باید تعیین کنید که چه مقدار از داده خود را به مجموعه آزمایش اختصاص دهید. معمولاً ، وقتی داده های زیادی داشته باشید (به ترتیب ده ها مثال) ، حتی یک نمونه کوچک در حدود یک درصد نیز برای آزمایش مدل شما کافی خواهد بود. در مورد مجموعه داده Iris ، که در مجموع شامل 150 رکورد است ، ما یک تقسیم 75-25 را انتخاب خواهیم کرد.

Scikit-learn دارای یک train_test_split عملکردی که مجموعه داده را به مجموعه داده های قطار و آزمون تقسیم می کند:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25, stratify=iris.target, random_state=42)

train_test_split داده ها را می گیرد و مجموعه داده ها را هدف قرار می دهد و دو جفت مجموعه داده را برای آموزش برمی گرداند (X_train و y_train) و آزمایش (X_test و y_test) test_size پارامتر درصد (بین 0 تا 1) داده هایی را که به آزمایش اختصاص می یابد تعیین می کند. stratify پارامتر اطمینان حاصل می کند که قطارها و آرایه های آزمون دارای تعداد متعادل نمونه ای از هر کلاس هستند. random_state متغیر ، که در بسیاری از توابع Scikit-learn وجود دارد ، کنترل مولدهای اعداد تصادفی و قابلیت تکرار است.

مرحله 4: مدل را بسازید

اکنون که داده های ما آماده است ، می توانیم یک مدل یادگیری ماشین ایجاد کنیم و آن را روی مجموعه قطار آموزش دهیم. الگوریتم های یادگیری ماشینی زیادی وجود دارد که می تواند مشکلات طبقه بندی را حل کند مانند موردی که ما با آن سر و کار داریم. در مورد ما ، ما از “رگرسیون لجستیک”الگوریتم ، که بسیار سریع و مناسب برای مشکلات طبقه بندی است که ساده هستند و ابعاد زیادی ندارند.

Scikit یاد بگیر LogisticRegression کلاس این الگوریتم را پیاده سازی می کند. پس از فوری کردن ، ما آن را در مجموعه قطار خود آموزش می دهیم (X_train و y_train) با تماس با fit تابع. این پارامترهای مدل را تنظیم می کند تا نگاشتی بین اندازه گیری ها و گونه های گل پیدا کند.

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(X_train, y_train)

مرحله 5: مدل را ارزیابی کنید

اکنون که این مدل را آموزش دادیم ، می خواهیم دقت آن را بسنجیم. LogisticRegression کلاس دارای score روشی که دقت مدل را برمی گرداند. ابتدا دقت مدل را بر روی داده های آموزش اندازه گیری خواهیم کرد:

print(lr.score(X_train, y_train))

این تقریباً 0.97 برمی گردد ، این بدان معنی است که مدل کلاس 97 درصد از نمونه های آموزش را به طور دقیق پیش بینی می کند ، که با توجه به اینکه فقط حدود 37 نمونه آموزش برای هر گونه داشتیم ، بسیار خوب است.

در مرحله بعدی ، ما دقت مدل را در مجموعه آزمایش بررسی خواهیم کرد:

print(lr.score(X_test, y_test))

این به ما حدود 95 درصد ، کمی پایین تر از دقت آموزش می دهد ، که طبیعی است زیرا اینها نمونه هایی است که این مدل قبلاً هرگز ندیده است. با ایجاد یک مجموعه داده بزرگتر یا الگوریتم یادگیری ماشین دیگر (مانند ماشین های بردار پشتیبانی) ، ممکن است بتوانیم دقت مدل را بیشتر بهبود دهیم و شکاف بین آموزش و عملکرد آزمون را برطرف کنیم.

سرانجام ، ما می خواهیم ببینیم که چگونه می توانیم از مدل آموزش دیده خود در نمونه های جدید استفاده کنیم. LogisticRegression کلاس دارای predict تابعی که آرایه ای از مشاهدات را ورودی می کند و کلاس پیش بینی شده را برمی گرداند. در مورد مدل طبقه بندی گل ، ما باید یک آرایه از چهار اندازه گیری (طول کاسبرگ ، عرض گلبرگ ، طول گلبرگ ، عرض گلبرگ) را در اختیار آن قرار دهیم و یک عدد صحیح را نشان می دهد که نشان دهنده کلاس گل است:

output = lr.predict([[4.4, 3.2, 1.3, 0.2]])
print(iris.target_names[output[0]])

'''setosa

تبریک می گویم! شما اولین مدل یادگیری ماشین خود را ایجاد کرده اید. اکنون می توانیم آن را در برنامه ای قرار دهیم که از کاربران اندازه گیری می کند و گونه های گل را باز می گرداند:

sepal_l = float(input("Sepal length (cm):"))
sepal_w = float(input("Sepal width (cm):"))
petal_l = float(input("Petal length (cm):"))
petal_w = float(input("Petal width (cm):"))

measurements = [[sepal_l, sepal_w, petal_l, petal_w]]
output = lr.predict(measurements)
print(f"Your flower is {iris.target_names[output[0]]}")

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