فهرست بستن

یادگیری ماشین در پایتون با کتابخانه Scikit-learn

امروزه کمتر کاربردی از تکنولوژی را می توان یافت که از یادگیری ماشین و هوش مصنوعی بهره نگرفته باشد. از شناسایی چهره گرفته تا تشخیص عیب در سیستمهای صنعتی همه و همه با به کارگیری یادگیری ماشین شاهد پیشرفتی غیر قابل وصف بوده اند. ابزارهای زیادی برای پیاده سازی روشهای متداول یادگیری ماشین ارائه شده اند که از میان آنها می توان به کتابخانه Tensorflow گوگل اشاره کرد. از لحاظ راحتی برای شروع کار کتابخانه های توسعه یافته مبنی بر SciPy مثل Scikit-learn کار را بسیار ساده تر می نماید. در این نوشته به معرفی این کتابخانه و امکانات آن پرداخته می شود.

بسم الله الرحمن الرحیم

کتابخانه Scikit-learn که مبتنی بر SciPy می‌باشد، برای کاربردهای یادگیری ماشین از جمله خوشه بندی، رگرسیون و کلاس بندی ابزار قدرتمند و در عین حال ساده ای می باشد. یادگیری استفاده از آن بسیار سریع و آسان بوده و انعطاف آن باعث می شود تا بتوان آن را در مسائل متنوعی مورد استفاده قرار داد. روش‌های متنوعی در آن فراهم آمده است که برای مثال در زمینه کلاس بندی می توان موارد زیر را نام برد:

  • Nearest Neighbors
  • Linear SVM
  • RBF SVM
  • Gaussian Process
  • Decision Tree
  • Random Forest
  • Neural Networks
  • AdaBoost
  • Naive Bayes
  • QDA

با یک مثال کلاسبندی ساده وارد نحوه استفاده از این کتابخانه می شویم:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.datasets import make_moons

h = .02

clf = SVC(gamma=2, C=1)
X, y = make_moons(noise=0.3, random_state=0)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)

x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

cm = plt.cm.RdBu

plt.figure()
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm, edgecolors='k')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm, alpha=0.6, edgecolors='k')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.show()


clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)

Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure()
plt.contourf(xx, yy, Z, alpha=.8, cmap=cm)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm, edgecolors='k')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm, alpha=0.6, edgecolors='k')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.show()

همانطور که مشخص است، ابتدا داده‌های استاندارد moons با نویز برابر سه دهم تولید و آماده استفاده در کتابخانه می نماید. با توجه به اینکه می خواهیم کانتورهای معیار تعلق به کلاس را نیز رسم نماییم، فضای دو بعدی را با meshgrid می سازیم که بعدا استفاده می شود. روش کلاسبندی C-Support Vector Classification می باشد که بطور پیشفرض با توجه به عدم مقدار دهی ما از کرنل rbf استفاده می شود. ابتدا داده های خام رسم می شوند تا بدانیم قرار است کلاسبندی بر روی چه داده هایی انجام شود. خروجی بشکل زیر می باشد:

داده های آبی متعلق به یک کلاس و داده های قرمز متعلق به کلاس دیگر می باشند. کمرنگ برای تست و پر رنگ برای آموزش است. دستور clf.fit(X_train, y_train) کار آموزش را انجام می دهد و متعاقب آن دستور score = clf.score(X_test, y_test) خروجی را برای داده های تست حساب می نماید. در ادامه با استفاده از خروجی داده های تست و همچنین تابع تصمیم گیری الگوریتم کلاسبندی که از clf.decision_function قابل دسترسی است اقدام به رسم خروجی می نماییم. تابع تصمیم گیری برای رسم کانتورها مورد استفاده قرار می گیرد و خروجی داده های تست scatter می شود. که در نهایت خروجی به شکل زیر است:

نکته قابل توجه این است که با کوچکترین تغییر می توانید روش های دیگر فراهم شده در این کتابخانه را نیز مورد ارزیابی قرار دهید برای مثال با تغییر سطر تعریف کلاسیفایر clf به شکل زیر نتایج برای روش AdaBoost حاصل می گردد:

from sklearn.ensemble import AdaBoostClassifier
clf = AdaBoostClassifier()

که خروجی آن به شکل زیر خواهد بود:

البته دقت شود که بعضی از روشها بجای تابع تصمیم گیری clf.decision_function، تابع احتمال پیشبینی یعنی clf.predict_proba دارند که باید در کدها اعمال شود.

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