یادگیری نظارت شده (Supervised Learning) با پایتون — راهنمای جامع

۱۹۴۵ بازدید
آخرین به‌روزرسانی: ۱۷ تیر ۱۴۰۲
زمان مطالعه: ۷ دقیقه
یادگیری نظارت شده (Supervised Learning) با پایتون — راهنمای جامع

آینده سیاره زمین «هوش مصنوعی» (Artificial Intelligence)/«یادگیری ماشین» (Machine Learning) است. هرکسی که این موضوع را درک نکند خیلی زود از قافله عقب خواهد ماند. بیدار شدن در دنیای سرشار از نوآوری روز به روز بیشتر شبیه به جادو می‌شود. پیاده‌سازی‌ها و روش‌های گوناگونی برای هوش مصنوعی و یادگیری ماشین به منظور حل مسائل جهان واقعی وجود دارد و «یادگیری نظارت شده» (Supervised Learning) یکی از پرکاربردترین رویکردها است. «جف هاوکینز» (Jeff Hawkins) موسس کمپانی «Palm Computing» در این رابطه می‌گوید: «کلید ورود به هوش مصنوعی همواره ارائه کردن بوده است».

یادگیری نظارت شده چیست؟

در یادگیری نظارت شده» کار با ایمپورت کردن مجموعه داده‌های شامل ویژگی‌های آموزش (خصیصه‌های آموزش | training attributes) و ویژگی‌های هدف (خصیصه‌های هدف | target attributes) آغاز می‌شود. الگوریتم یادگیری نظارت شده رابطه بین مثال‌های آموزش و متغیرهای هدف مختص آن‌ها را به دست می‌آورد و آن رابطه یاد گرفته شده را برای دسته‌بندی ورودی‌های کاملا جدید مورد استفاده قرار می‌دهد (بدون هدف‌ها).

برای نمایش اینکه یادگیری نظارت شده چگونه کار می‌کند، یک مثال از پیش‌بینی نمرات دانش‌آموزان برپایه ساعات مطالعه آن‌ها ارائه می‌شود. از منظر ریاضی:

Y = f(X)+ C

که در آن:

  • F رابطه بین نمرات و تعداد ساعاتی است که دانش‌آموزان به منظور آماده شدن برای امتحانات به مطالعه می‌پردازند.
  • X ورودی است (تعداد ساعاتی که دانش‌آموز خود را آماده می‌کند).
  • Y خروجی است (نمراتی که دانش‌آموزان در آزمون کسب کرده‌اند).
  • C یک خطای تصادفی است.

هدف نهایی یادگیری نظارت شده پیش‌بینی Y با حداکثر دقت برای ورودی جدید داده شده X است. چندین راه برای پیاده‌سازی یادگیری نظارت شده وجود دارد. برخی از متداول‌ترین رویکردها در ادامه مورد بررسی قرار می‌گیرند. برپایه مجموعه داده موجود، مساله یادگیری ماشین در دو نوع «دسته‌بندی» (Classification) و «رگرسیون» (Regression) قرار می‌گیرد. اگر داده‌های موجود دارای مقادیر ورودی (آموزش) و خروجی (هدف) باشند، مساله از نوع دسته‌بندی است. اگر مجموعه داده دارای «مقادیر عددی پیوسته» (continuous numerical values) بدون هرگونه برچسب هدفی باشد، مساله از نوع رگرسیون محسوب می‌شود.

Classification: Has the output label. Is it a Cat or Dog?
Regression: How much will the house sell for?

دسته‌بندی

مثالی مفروض است که در آن یک پژوهشگر حوزه پزشکی می‌خواهد داده‌های سرطان سینه را به‌منظور پیش‌بینی اینکه بیمار کدام یک از سه نوع درمان را باید دریافت کند، مورد تحلیل قرار دهد. این وظیفه تحلیل داده «دسته‌بندی» (Classification) نامیده و در آن یک مدل یا «دسته‌بند» (Classifier) به منظور پیش‌بینی برچسب‌های دسته (کلاس) مانند «درمان A» (همان treatment A)، «درمان B» (همان treatment B) یا «درمان C» (همان treatment C) ساخته می‌شود.

دسته‌بندی یک مساله پیش‌بینی است که برچسب‌های کلاس دسته‌ای را که گسسته یا بدون ترتیب هستند پیش‌بینی می‌کند. این یک فرآیند دو مرحله‌ای است که شامل مرحله یادگیری و دسته‌بندی می‌شود.

روش‌های دسته‌بندی و انتخاب بهترین آن‌ها

برخی از الگوریتم‌های متداول داده‌کاوی در ادامه بیان شده‌اند.

در مرحله یادگیری، مدل دسته‌بندی، دسته‌بند را با تحلیل مجموعه داده آموزش می‌سازد. در مرحله دسته‌بندی، برچسب‌های کلاس برای داده‌های موجود پیش‌بینی می‌شوند. تاپل‌های مجموعه داده و برچسب‌های کلاس مربوط در حال تحلیل به دو دسته «مجموعه آموزش» (training set) و «مجموعه تست» (test set) تقسیم می‌شوند. «تاپل‌های» (tuples) مجزایی که مجموعه داده تست را می‌سازند از مجموعه داده تحت تحلیل به طور تصادفی نمونه‌برداری می‌شوند. تاپل‌های باقیمانده مجموعه داده تست را شکل می‌دهند و از تاپل‌های آموزش مستقل هستند، بدین معنا که برای ساخت دسته‌بند مورد استفاده قرار نمی‌گیرند.

مجموعه داده تست به منظور تخمین پیش‌بینی دسته‌بند استفاده می‌شود. دقت دسته‌بند درصدی از تاپل‌های تست است که توسط دسته‌بند به درستی دسته‌بندی شده‌اند. به منظور کسب دقت بیشتر، بهترین راه تست الگوریتم‌های گوناگون و آزمودن پارامترهای مختلف در هر الگوریتم است. بهترین حالت با «اعتبارسنجی متقابل» (cross-validation) قابل انتخاب است. برای انتخاب یک الگوریتم خوب برای مساله، پارامترهایی مانند دقت، زمان آموزش، «خطی بودن» (linearity)، تعداد پارامترها و شرایط خاص باید برای الگوریتم‌های متفاوت در نظر گرفته شود.

پیاده‌سازی KNN در Scikit-Learn روی مجموعه داده Iris جهت دسته‌بندی نوع گل‌ها برپایه ورودی‌های داده شده

اولین گام برای اعمال الگوریتم یادگیری ماشین مورد نیاز، درک و اکتشاف مجموعه داده است. در این مثال، از مجموعه داده Iris استفاده شده که از بسته scikit-learn ایمپورت شده. اکنون کد لازم برای این کار را نوشته و مجموعه داده گل‌های زنبق (scikit-learn) مورد بررسی قرار می‌گیرد.

ابتدا باید از نصب بودن پایتون روی سیستم کاربر اطمینان حاصل کرد. همچنین، بسته‌های زیر نیز باید با استفاده از PIP نصب شوند.

pip install pandas
pip install matplotlib
pip install scikit-learn

در قطعه کد پایین، مدل با بهره‌گیری از چند متد در کتابخانه Pandas، پیرامون ویژگی‌های مجموعه داده Iris می‌آموزد.

1from sklearn import datasets
2import pandas as pd
3import matplotlib.pyplot as plt
4
5# Loading IRIS dataset from scikit-learn object into iris variable.
6iris = datasets.load_iris()
7
8# Prints the type/type object of iris
9print(type(iris))
10# <class 'sklearn.datasets.base.Bunch'>
11
12# prints the dictionary keys of iris data
13print(iris.keys())
14
15# prints the type/type object of given attributes
16print(type(iris.data), type(iris.target))
17
18# prints the no of rows and columns in the dataset
19print(iris.data.shape)
20
21# prints the target set of the data
22print(iris.target_names)
23
24# Load iris training dataset
25X = iris.data
26
27# Load iris target set
28Y = iris.target
29
30# Convert datasets' type into dataframe
31df = pd.DataFrame(X, columns=iris.feature_names)
32
33# Print the first five tuples of dataframe.
34print(df.head())

خروجی

<class ‘sklearn.datasets.base.Bunch’>
dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]
<class ‘numpy.ndarray’> <class ‘numpy.ndarray’>
(150, 4)
[‘setosa’ ‘versicolor’ ‘virginica’]
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

K-نزدیک‌ترین همسایگی در scikit-learn

به یک الگوریتم «یادگیرنده تنبل» (Lazy Learner) گفته می‌شود اگر تاپل‌های مجموعه داده آموزش را ذخیره کرده و تا هنگامی که تاپل آزمون (test) داده می شود صبر کند. این نوع یادگیرنده، تنها هنگامی که تاپل تست را می‌بیند عمومی‌سازی را به منظور دسته‌بندی تاپل‌ها برپایه مشابهت آن‌ها با تاپل‌های آموزش ذخیره شده انجام می‌دهد.

دسته‌بند K-نزدیک‌ترین همسایگی یک یادگیرنده تنبل است. این الگوریتم (KNN) برپایه یادگیری با مقایسه، که در واقع مقایسه یک تاپل تست داده شده با تاپل‌های آموزش مشابه آن محسوب می‌شود بنا نهاده شده است. تاپل‌های آموزش با n مشخصه تشریح شده‌اند. هر تاپل یک نقطه را در فضای n-بعدی نشان می‌دهد. بدین شکل، همه تاپل‌های آموزش در فضای الگوری n-بُعدی ذخیره می‌شوند. هنگامی که یک تاپل ناشناخته داده می‌شود، دسته‌بند k-نزدیک‌ترین همسایگی فضای الگو را برای k تاپل‌های آموزش که نزدیک‌ترین همسایه‌های «تاپل ناشناخته هستند» جست‌و‌جو می‌کند. «نزدیکی» (Closeness) با توجه به سنجه فاصله مانند فاصله اقلیدسی تعریف می‌شود. یک مقدار خوب برای K به طور تجربی تعیین می‌شود. در این قطعه کد، دسته‌بند KNN از sklearn ایمپورت و بر داده‌های ورودی اعمال می‌شود و سپس می‌تواند گل‌ها را دسته‌بندی کند.

1from sklearn import datasets
2from sklearn.neighbors import KNeighborsClassifier
3
4# Load iris dataset from sklearn
5iris = datasets.load_iris()
6
7# Declare an of the KNN classifier class with the value with neighbors.
8knn = KNeighborsClassifier(n_neighbors=6)
9
10# Fit the model with training data and target values
11knn.fit(iris['data'], iris['target'])
12
13# Provide data whose class labels are to be predicted
14X = [
15    [5.9, 1.0, 5.1, 1.8],
16    [3.4, 2.0, 1.1, 4.8],
17]
18
19# Prints the data provided
20print(X)
21
22# Store predicted class labels of X
23prediction = knn.predict(X)
24
25# Prints the predicted class labels of X
26print(prediction)

خروجی

[1 1]

در اینجا

  • ۰ مطابق با Versicolor است.
  • ۱ مطابق با Virginica است.
  • ۲ مطابق با Setosa است.

برپایه ورودی داده شده، ماشین پیش‌بینی کرده که هر دو گل از گونه Versicolor هستند.

KNN برای دسته‌بندی مجموعه داده Iris

رگرسیون

رگرسیون معمولا به منظور تعیین روابط بین دو یا تعداد بیشتری متغیر مورد استفاده قرار می‌گیرد. برای مثال، حالتی را می‌توان در نظر گرفت که نیاز به پیش‌بینی درآمد یک نفر بر پایه داده‌های درآمد X است. در اینجا، متغیر هدف به معنای متغیر ناشناخته‌ای است که کاربر به پیش‌بینی آن اهمیت می‌دهد و پیوسته به معنای آن است که شکافی (ناپیوستگی) در مقداری که Y می‌تواند داشته باشد وجود ندارد.

پیش‌بینی درآمد یک مساله کلاسیک رگرسیون است. داده ورودی باید همه اطلاعاتی (که با عنوان ویژگی شناخته شده‌اند) را درباره یک فرد که می‌تواند منجر به پیش‌بینی درآمد شود، مانند ساعات کار، تجربه آموزش، عنوان شغلی و محلی که زندگی می‌کند داشته باشد.

مدل رگرسیون

برخی از مدل‌های رگرسیون متداول عبارتند از:

  • «رگرسیون خطی» (Linear Regression)
  • «رگرسیون لجستیک» (Logistic Regression)
  • «رگرسیون چند جمله‌ای» (Polynomial Regression)

رگرسیون خطی، رابطه‌ای بین متغیر وابسته (Y) و یک یا تعداد بیشتری متغیر مستقل (X) با استفاده از بهترین خط راستی که برازش دارد برقرار می‌کند (به این نوع رگرسیون، رگرسیون خطی نیز گفته می‌شود).

به بیان ریاضی:

h(xi) = βo + β1 * xi + e

در حالیکه  βo عرض از مبدا است، β1 شیب خط و e میزان خطا محسوب می‌شود.

رگرسیون خطی
رگرسیون خطی به بیان گرافیکی

الگوریتم رگرسیون لجستیک هنگامی مورد استفاده قرار می‌گیرد که متغیر پاسخ دسته‌ای باشد. ایده رگرسیون لجستیک پیدا کردن رابطه بین ویژگی و احتمال یک خروجی خاص است.

به بیان ریاضی:

p(X) = βo + β1 * X

که در آن

p(x) = p(y = 1 | x)

رگرسیون لوجستیک
رگرسیون لجستیک به بیان ریاضی

رگرسیون لجستیک شکلی از تحلیل‌های رگرسیون است که در آن ارتباطی بین متغیرهای مستقل x و متغیر وابسته y به عنوان یک چندجمله‌ای درجه n در x مدل می‌شود.

حل مساله رگرسیون خطی

مجموعه داده X و مقدار هدف Y موجود است. از «کمترین مربعات» (Least Squares) برای یادگیری مدل خطی استفاده می‌شود که می‌توان از آن برای پیش‌بینی یک y جدید که به x دیده نشده پیشین داده شده با کمترین میزان خطای ممکن بهره برد. داده‌های موجود به دو بخش مجموعه داده آموزش و آزمون (تست) تقسیم می‌شوند.

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

پیاده‌سازی رگرسیون خطی در scikit-learn

1from sklearn import datasets, linear_model
2import matplotlib.pyplot as plt
3import numpy as np
4
5# Load the diabetes dataset
6diabetes = datasets.load_diabetes()
7
8
9# Use only one feature for training
10diabetes_X = diabetes.data[:, np.newaxis, 2]
11
12# Split the data into training/testing sets
13diabetes_X_train = diabetes_X[:-20]
14diabetes_X_test = diabetes_X[-20:]
15
16# Split the targets into training/testing sets
17diabetes_y_train = diabetes.target[:-20]
18diabetes_y_test = diabetes.target[-20:]
19
20# Create linear regression object
21regr = linear_model.LinearRegression()
22
23# Train the model using the training sets
24regr.fit(diabetes_X_train, diabetes_y_train)
25
26# Input data
27print('Input Values')
28print(diabetes_X_test)
29
30# Make predictions using the testing set
31diabetes_y_pred = regr.predict(diabetes_X_test)
32
33# Predicted Data
34print("Predicted Output Values")
35print(diabetes_y_pred)
36
37# Plot outputs
38plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
39plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)
40
41plt.show()

خروجی

Input Values
[
[ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656]
[ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154][-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ]
]
Predicted Output Values
[ 
225.9732401 115.74763374 163.27610621 114.73638965 120.80385422 158.21988574 236.08568105 121.81509832 
99.56772822 123.83758651 204.73711411 96.53399594 
154.17490936 130.91629517 83.3878227 171.36605897 
137.99500384 137.99500384 189.56845268 84.3990668 
]

نمودار بین پیش‌بینی‌های (diabetes_X_test, diabetes_y_pred) در معادله خطی پیوسته خواهد بود.

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *