مقدمه
ماتریسها یک مفهوم کلیدی نه تنها در جبر خطی بلکه با توجه به کاربرد و استفاده برجسته آنها در یادگیری ماشین (ML) و علم داده نیز هستند. در اصل، یک ماتریس یک رویکرد ساختیافته برای نمایش و دستکاری دادهها است، اما همچنین یک عنصر اصلی در الگوریتمهای ML برای آموزش مدلهایی مانند رگرسیون خطی تا مدلهای شبکههای عصبی است.
این راهنما نحوه تعریف و استفاده از ماتریسها در پایتون، عملیاتهای آنها و طرحی از کاربردهایشان در فرآیندهای ML را معرفی میکند.
ماتریس چیست؟
ماتریس یک آرایه دو بعدی (در اصطلاح روزمره، مجموعه) از اعداد است که به صورت ردیفی-ستونی مرتب شدهاند. با توجه به این شباهت ساختاری به مجموعهدادههای جدولی متشکل از نمونهها و ویژگیها، آنها به طرز باورنکردنی برای نمایش مجموعهدادهها و انجام تبدیلها روی دادهها، و همچنین انجام عملیات ریاضی به طور موثر مفید هستند.
پایتون دو رویکرد اساسی برای پیادهسازی ماتریسها ارائه میدهد: یا با استفاده از لیستهای تو در تو یا با توسل به کتابخانه NumPy، که دومی از عملیاتهای ماتریسی بهینه شده پشتیبانی میکند.
در اینجا یک مثال ماتریس 3×3 تعریف شده با استفاده از یک لیست از لیستها آورده شده است، که هر لیست تو در تو نشاندهنده یک ردیف از ماتریس است:
matrix = [[1][2],, ]
print(matrix)
ماتریسی مانند این میتواند به خوبی نشاندهنده یک مجموعه داده کوچک از سه نمونه باشد که هر کدام توسط سه ویژگی توصیف شدهاند.
در اینجا روش جایگزین برای تعریف یک ماتریس با استفاده از NumPy آورده شده است:
import numpy as np
matrix_np = np.array([[1][2],, ])
print(matrix_np)
عملیاتهای اساسی با ماتریسها
علاوه بر تعریف ماتریسها برای نگهداری دادهها، عملیاتهای ماتریسی در ML برای انجام تبدیلها، بهینهسازیها و حل معادلات خطی ضروری هستند. فرآیندهای اساسی در پس آموزش یک شبکه عصبی، برای مثال، متکی بر این نوع عملیاتهای ماتریسی همراه با حساب دیفرانسیل و انتگرال در مقیاس بزرگ هستند.
بیایید عملیاتهای ماتریسی اساسی را با شروع از جمع و تفریق مشخص کنیم:
A = np.array([[1][2],])
B = np.array([,])
sum_matrix = A + B
sub_matrix = A - B
print("Sum:\n", sum_matrix)
print("Difference:\n", sub_matrix)
ضرب ماتریسی به ویژه در فرآیندهای ML مکرر است، هم برای اعمال تبدیلهای داده مانند مقیاسبندی ویژگیها و هم در معماریهای پیشرفته شبکههای عصبی مانند شبکههای عصبی کانولوشنال (CNN)، جایی که ضرب ماتریسی برای انجام فیلترها روی دادههای تصویر اعمال میشود، در نتیجه به تشخیص الگوهایی مانند لبهها، رنگها و غیره در دادههای بصری کمک میکند. ضرب ماتریسی در پایتون به صورت زیر انجام میشود:
C = np.dot(A, B)
print("Matrix Multiplication:\n", C)
اما یک راه سادهتر وجود دارد، با استفاده از عملگر '@':
C = A @ B
print("Matrix Multiplication made simple:\n", C)
ترانهاده یک ماتریس یکی دیگر از عملیاتهای مکرر در ML برای تغییر شکل کارآمد دادهها یا محاسبه ماتریسهای کوواریانس در PCA، یک روش شناخته شده برای کاهش ابعاد دادهها است.
transpose_A = A.T
print("Transpose of A:\n", transpose_A)
ماتریسهای خاص و نقش آنها در یادگیری ماشین با پایتون
زمان شناسایی برخی از ماتریسهای مهم به دلیل ویژگیهای خاص آنها است که استفاده از آنها در رویکردهای ML بسیار رایج است.
اول، ما ماتریس همانی را داریم که در چندین الگوریتم ML برای نرمالسازی و تبدیل دادهها استفاده میشود. این ماتریس شامل صفرها در تمام عناصر خود به جز قطر اصلی است که از یکها تشکیل شده است.
identity_matrix = np.eye(3)
print("Identity Matrix:\n", identity_matrix)
به همان اندازه مهم که ماتریس همانی است، اگر نگوییم بیشتر، وارون یک ماتریس است، که در فرآیندهای بهینهسازی که فرآیند آموزش بیشتر مدلهای ML را هدایت میکنند، کلیدی است. وارون یک ماتریس را میتوان به راحتی در پایتون با موارد زیر محاسبه کرد:
A_inv = np.linalg.inv(A)
print("Inverse of A:\n", A_inv)
بعد، دترمینان یک ماتریس مقداری است که با یک ماتریس مرتبط است و برای بررسی اینکه آیا یک ماتریس منفرد است استفاده میشود، در این صورت هیچ وارونی ندارد. دترمینان باید برای وارونپذیر بودن ماتریس غیر صفر باشد.
det_A = np.linalg.det(A)
print("Determinant of A:", det_A)
مثال: ماتریسها در رگرسیون خطی
برای نهایی کردن این راهنمای مقدماتی، بیایید ببینیم چگونه برخی از ایدههای آموخته شده را در یک گردش کار ML، به ویژه در رگرسیون خطی، اعمال کنیم. این مثال بسیار ساده یک مسئله رگرسیون خطی را با استفاده از معادله نرمال حل میکند که چندین عملیات ماتریسی را که قبلاً دیدهایم، یعنی ضرب و وارون ماتریس، ترکیب میکند: W = (X^T X)^{-1} X^T Y.
X = np.array([[1][1],[1][2],[1]])
Y = np.array([[2], [2.5], [3.5]])
W = np.linalg.inv(X.T @ X) @ X.T @ Y
print("Computed Weights:\n", W)
خلاصه و نتیجهگیری
ماتریسها کاربردهای مختلفی در یادگیری ماشین دارند، از جمله نمایش دادهها، برازش مدلهایی مانند رگرسیون خطی، آموزش شبکههای عصبی با ذخیره و اعمال عملیات در وزنهای اتصال بین نورونها و در تکنیکهای کاهش ابعاد مانند تحلیل مؤلفههای اصلی (PCA).
از آنجایی که ماتریسها یک جزء اصلی از یادگیری ماشین هستند، به خوبی توسط کتابخانههای پایتون مانند NumPy پشتیبانی میشوند. این مقاله یک پایه اولیه و درک از ماتریسها برای یادگیری ماشین در پایتون ارائه داد. درک این اصول برای تسلط بر رویکردها و تکنیکهای پیشرفتهتر یادگیری ماشین کلیدی است.