در درس پنجم از آموزش رایگان یادگیری ماشین با پایتون می خواهیم با 9تا از بهترین کتابخانه های پایتون برای یادگیری ماشین آشنا شویم. یادگیری ماشین، همانطور که از اسمش پیداست، علمی است که به کامپیوترها این امکان را میدهد تا از انواع مختلف دادهها یاد بگیرند. تعریف کلیتری که توسط آرتور ساموئل ارائه شده است این است:
“یادگیری ماشین، زمینهای است که به کامپیوترها امکان یادگیری بدون نیاز به برنامهنویسی صریح را میدهد.”
معمولاً از این تکنولوژی برای حل مسائل متنوع زندگی استفاده میشود.
در گذشته، مردم برای انجام وظایف یادگیری ماشین با کدنویسی دستی، تمامی الگوریتمها و فرمولهای ریاضی و آماری را پیادهسازی میکردند. این کار باعث میشد که این پروسه، زمانبر، خستهکننده و کمکارایی باشد. اما در دوران مدرن، این فرآیند نسبت به گذشته، با استفاده از کتابخانهها، چارچوبها و ماژولهای مختلف پایتون، بسیار سادهتر و بهینهتر شده است.
امروزه، زبان برنامه نویسی پایتون یکی از محبوبترین زبانهای برنامهنویسی در این زمینه است. یکی از دلایل این محبوبیت، مجموعه گستردهای از کتابخانههای پایتون است که در یادگیری ماشین بهکار میروند. این کتابخانهها عبارتند از:
✔️ Numpy
✔️ Scipy
✔️ Scikit-learn
✔️ Theano
✔️ TensorFlow
✔️ Keras
✔️ PyTorch
✔️ Pandas
✔️ Matplotlib
✔️ Numpy
NumPy یک کتابخانه بسیار محبوب در زبان برنامهنویسی پایتون است که برای پردازش آرایهها و ماتریسهای چند بعدی با استفاده از یک مجموعه وسیع از توابع ریاضی سطح بالا طراحی شده است.
این کتابخانه برای محاسبات علمی اساسی در حوزه یادگیری ماشین بسیار کارآمد است و به ویژه برای جبر خطی، تبدیل فوریه و توانمندیهای ایجاد اعداد تصادفی بسیار مفید است. کتابخانههای پیشرفته مانند TensorFlow از NumPy بهطور داخلی برای انجام عملیات بر روی تنسورها استفاده میکنند.
# Python program using NumPy # for some basic mathematical # operations import numpy as np # Creating two arrays of rank 2 x = np.array([[1, 2], [3, 4]]) y = np.array([[5, 6], [7, 8]]) # Creating two arrays of rank 1 v = np.array([9, 10]) w = np.array([11, 12]) # Inner product of vectors print(np.dot(v, w), "\n") # Matrix and Vector product print(np.dot(x, v), "\n") # Matrix and matrix product print(np.dot(x, y))
خروجی:
219
[29 67]
[[19 22]
[43 50]]
✔️ Scipy
SciPy یک کتابخانه بسیار محبوب در میان علاقهمندان به یادگیری ماشین است، زیرا شامل ماژولهای مختلف برای بهینهسازی، جبر خطی، ادغام و آمار میشود.
تفاوتی بین کتابخانه SciPy و اینکه از یک “پکیج SciPy” صحبت میشود، وجود دارد. SciPy یکی از بستههای اصلی است که به تشکیل پکیج SciPy کمک میکند. همچنین، SciPy برای کارهای مرتبط با تصاویر نیز بسیار کارآمد است.
# Python script using SciPy for image manipulation from scipy import ndimage import matplotlib.pyplot as plt # Read a JPEG image into a numpy array img = plt.imread('cat.jpg') # path of the image print(img.dtype, img.shape) # Tinting the image with an intensity factor tint_intensity = 0.003 # Adjust this value to control the tinting intensity img_tint = img * [1, 0.45, 0.3] * tint_intensity # Scaling values to the [0, 1] range img_tint = img_tint.clip(0, 1) # Saving the tinted image plt.imsave('cat_tinted.jpg', img_tint) # Resizing the tinted image to be 300 x 300 pixels img_tint_resize = ndimage.zoom(img_tint, (300 / img_tint.shape[0], 300 / img_tint.shape[1], 1), order=3) # Scaling values to the [0, 1] range for resized image img_tint_resize = img_tint_resize.clip(0, 1) # Saving the resized tinted image plt.imsave('cat_tinted_resized.jpg', img_tint_resize)
✔️ Scikit-learn
Scikit-learn یکی از پرطرفدارترین کتابخانههای یادگیری ماشین برای الگوریتمهای کلاسیک یادگیری ماشین است. این کتابخانه بر پایه دو کتابخانه اصلی پایتون، یعنی NumPy و SciPy ساخته شده است.
Scikit-learn اکثر الگوریتمهای یادگیری با نظارت و بدون نظارت را پشتیبانی میکند. همچنین، میتوان از Scikit-learn برای استخراج داده و تحلیل داده نیز استفاده کرد، که این کتابخانه را به یک ابزار عالی برای کسانی که تازه با یادگیری ماشین شروع کردهاند، تبدیل کرده است.
# Python script using Scikit-learn # for Decision Tree Classifier # Sample Decision Tree Classifier from sklearn import datasets from sklearn import metrics from sklearn.tree import DecisionTreeClassifier # load the iris datasets dataset = datasets.load_iris() # fit a CART model to the data model = DecisionTreeClassifier() model.fit(dataset.data, dataset.target) print(model) # make predictions expected = dataset.target predicted = model.predict(dataset.data) # summarize the fit of the model print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted))
خروجی:
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best') precision recall f1-score support 0 1.00 1.00 1.00 50 1 1.00 1.00 1.00 50 2 1.00 1.00 1.00 50 micro avg 1.00 1.00 1.00 150 macro avg 1.00 1.00 1.00 150 weighted avg 1.00 1.00 1.00 150 [[50 0 0] [ 0 50 0] [ 0 0 50]]
✔️ Theano
همه ما میدانیم که یادگیری ماشین اساساً بر پایه دانش ریاضیات و آمار است. Theano یک کتابخانه پرطرفدار در زبان برنامه نویسی پایتون است که برای تعریف، ارزیابی و بهینهسازی عبارات ریاضی مرتبط با آرایههای چند بعدی به نحوی کارآمد مورد استفاده قرار میگیرد. این کار با بهینهسازی استفاده از منابع پردازشی مرکزی (CPU) و گرافیکی (GPU) انجام میشود.
Theano به طور گسترده برای تست و اعتبارسنجی خودکار برای شناسایی و تشخیص انواع مختلف خطاها استفاده میشود. این کتابخانه یک ابزار بسیار قدرتمند است که به مدت طولانی در پروژههای علمی با محاسبات گسترده مورد استفاده قرار گرفته است، اما به اندازهای ساده و قابل دسترس است که افراد بتوانند آن را برای پروژههای شخصی خود به کار ببرند.
# Python program using Theano # for computing a Logistic # Function import theano import theano.tensor as T x = T.dmatrix('x') s = 1 / (1 + T.exp(-x)) logistic = theano.function([x], s) logistic([[0, 1], [-1, -2]])
خروجی:
array([[0.5, 0.73105858], [0.26894142, 0.11920292]])
✔️ TensorFlow
TensorFlow یک کتابخانه متن باز (Open-source) بسیار محبوب برای محاسبات عددی با عملکرد بالا است که توسط تیم Google Brain در گوگل توسعه یافته است.
همانطور که از نام آن پیداست، TensorFlow یک چارچوب است که شامل تعریف و اجرای محاسبات مرتبط با تنسورها میشود.
TensorFlow این قابلیت را دارد که شبکههای عصبی عمیق را آموزش داده و اجرا کند که میتواند برای توسعه انواع برنامههای هوش مصنوعی مورد استفاده قرار گیرد. TensorFlow به طور گسترده در زمینه تحقیقات و کاربردهای یادگیری عمیق استفاده میشود.
# Python program using TensorFlow # for multiplying two arrays # import `tensorflow` import tensorflow as tf tf.compat.v1.disable_eager_execution() # Initialize two constants x1 = tf.constant([1, 2, 3, 4]) x2 = tf.constant([5, 6, 7, 8]) # Multiply result = tf.multiply(x1, x2) sess = tf.compat.v1.Session() # Initialize the Session # Print the result print(sess.run(result)) # Close the session sess.close()
خروجی:
[ 5 12 21 32]
✔️ Keras
این کتابخانه بسیاری از روشهای داخلی برای گروهبندی، ترکیب و فیلتر کردن دادهها را فراهم میکند. Keras یک کتابخانه بسیار محبوب برای یادگیری ماشین در زبان پایتون است.
این کتابخانه یک واسط نرمافزاری برای شبکههای عصبی سطح بالا است که قابل اجرا بر روی TensorFlow، CNTK یا Theano است و به صورت ساده بر روی هر دو CPU و GPU قابل اجرا است.
Keras به افراد مبتدی در زمینه یادگیری ماشین این امکان را میدهد که به راحتی یک شبکه عصبی را طراحی و ایجاد کنند. یکی از بهترین ویژگیهای Keras این است که اجازه ساخت نمونهها (پروتوتایپها) به سرعت و با سهولت را فراهم میکند.
✔️ PyTorch
PyTorch یک کتابخانه محبوب یادگیری ماشین متنباز برای زبان پایتون است که بر پایه Torch قرار دارد. Torch یک کتابخانه متنباز یادگیری ماشین است که با یک پیادهسازی در زبان C و یک wrapper در Lua ایجاد شده است.
PyTorch دارای انتخاب گستردهای از ابزارها و کتابخانههاست که از دید بینایی ماشین، پردازش زبان طبیعی (NLP) و برنامههای مختلف یادگیری ماشین پشتیبانی میکنند که به توسعهدهندگان این امکان را میدهد که محاسبات را بر روی تنسورها با استفاده از شتابدهی GPU انجام داده و همچنین در ایجاد گرافهای محاسباتی به کار گرفته میشود.
# Python program using PyTorch # for defining tensors fit a # two-layer network to random # data and calculating the loss import torch dtype = torch.float device = torch.device("cpu") # device = torch.device("cuda:0") Uncomment this to run on GPU # N is batch size; D_in is input dimension; # H is hidden dimension; D_out is output dimension. N, D_in, H, D_out = 64, 1000, 100, 10 # Create random input and output data x = torch.randn(N, D_in, device=device, dtype=dtype) y = torch.randn(N, D_out, device=device, dtype=dtype) # Randomly initialize weights w1 = torch.randn(D_in, H, device=device, dtype=dtype) w2 = torch.randn(H, D_out, device=device, dtype=dtype) learning_rate = 1e-6 for t in range(500): # Forward pass: compute predicted y h = x.mm(w1) h_relu = h.clamp(min=0) y_pred = h_relu.mm(w2) # Compute and print loss loss = (y_pred - y).pow(2).sum().item() print(t, loss) # Backprop to compute gradients of w1 and w2 with respect to loss grad_y_pred = 2.0 * (y_pred - y) grad_w2 = h_relu.t().mm(grad_y_pred) grad_h_relu = grad_y_pred.mm(w2.t()) grad_h = grad_h_relu.clone() grad_h[h < 0] = 0 grad_w1 = x.t().mm(grad_h) # Update weights using gradient descent w1 -= learning_rate * grad_w1 w2 -= learning_rate * grad_w2
خروجی:
0 47168344.0 1 46385584.0 2 43153576.0 ... ... ... 497 3.987660602433607e-05 498 3.945609932998195e-05 499 3.897604619851336e-05
✔️ Pandas
Pandas یک کتابخانه پرطرفدار در زبان پایتون برای تحلیل دادههاست، اما به طور مستقیم به یادگیری ماشین مرتبط نیست. همانطور که میدانیم، قبل از شروع فرآیند آموزش، مجموعه داده باید آماده شود.
در این مورد، Pandas به عنوان یک ابزار مفید به کار میآید؛ زیرا به طور ویژه برای استخراج و آمادهسازی دادهها توسعه یافته است. این کتابخانه ساختارهای داده سطح بالا و ابزارهای گوناگون برای تحلیل داده را فراهم میکند. Pandas از متدهای داخلی بسیاری برای گروهبندی، ترکیب و فیلتر کردن داده پشتیبانی میکند.
# Python program using Pandas for # arranging a given set of data # into a table # importing pandas as pd import pandas as pd data = {"country": ["Brazil", "Russia", "India", "China", "South Africa"], "capital": ["Brasilia", "Moscow", "New Delhi", "Beijing", "Pretoria"], "area": [8.516, 17.10, 3.286, 9.597, 1.221], "population": [200.4, 143.5, 1252, 1357, 52.98] } data_table = pd.DataFrame(data) print(data_table)
خروجی:
✔️ Matplotlib
Matplotlib یک کتابخانه بسیار محبوب در زبان پایتون برای تصویرسازی دادههاست و مانند Pandas، به یادگیری ماشین ارتباط مستقیم ندارد. این کتابخانه به طور ویژه، زمانی که یک برنامهنویس میخواهد الگوهای موجود در دادهها را تصویر کند بسیار مفید است.
Matplotlib برای ایجاد نمودارها و چارتهای دوبعدی به کار میرود. ماژول pyplot این امکان را به برنامهنویسان میدهد که به راحتی نمودارها را رسم کنند، زیرا این ابزار ویژگیهایی را برای کنترل استیل خطوط، خصوصیات فونت، قالببندی محورها و غیره فراهم میکند.
این کتابخانه انواع مختلفی از نمودارها و چارتها را برای تصویرسازی داده فراهم میکند، از جمله histogram، نمودارهای خطا، نمودارهای میلهای و غیره.
# Python program using Matplotlib # for forming a linear plot # importing the necessary packages and modules import matplotlib.pyplot as plt import numpy as np # Prepare the data x = np.linspace(0, 10, 100) # Plot the data plt.plot(x, x, label ='linear') # Add a legend plt.legend() # Show the plot plt.show()
خروجی: