লিনিয়ার অ্যালজেব্রা

ডেটা সাইন্স , মেশিন লার্নিং কিংবা ডীপ লার্নিং , সব জায়গাতেই লিনিয়ার অ্যালজেব্রার গুরুত্ব অপরিসীম। সহজ কথায় বলতে গেলে এগুলোর ভিত্তিমূলের সাথেই রয়েছে লিনিয়ার অ্যালজেব্রার সম্পর্ক। ডেটা সাইন্স বা মেশিন লার্নিং এর মূল রসদ হচ্ছে ডেটা। ডেটাসেটকে নিয়ে বিভিন্ন কলাকৌশলের মাধ্যমেই আমরা বিভিন্ন ডেটা সাইন্স সমস্যার সমাধান করে থাকে। পাইথনে আমরা সেই ডেটাসেট ধারন করি ডেটা ফ্রেমে। বাস্তবিক অর্থে ডেটা ফ্রেম হচ্ছে এক প্রকার ম্যাট্রিক্স ( কখনো ভেক্টরও হতে পারে ) । আর লিনিয়ার অ্যালজেব্রা কাজ কারবারই হচ্ছে এই ভেক্টর এবং ম্যাট্রিক্স নিয়ে । সুতরাং ডেটার গঠন এবং বিভন্ন মেশিন লার্নিং মডেলের পেছনের কাঠামো ভাল করে বুঝতে হলে লিনিয়ার অ্যালজেব্রা সম্পর্কে ভালো ধারনা থাকতে হবে। লিনিয়ার অ্যালজেব্রা পরিধি বেশ বড় হলেও আমরা এই অধ্যায়ে এর ফান্ডামেন্টাল বিষয়গুলো সম্পর্কে জানার চেষ্টা করবো।

স্কেলার , ভেক্টর এবং ম্যাট্রিক্স

লিনিয়ার অ্যালজেব্রার মূল আলোচ্য বিষয় হচ্ছে স্কেলার, ভেক্টর এবং ম্যাট্রিক্সকে নিয়ে।

  • স্কেলার - সহজ কথায় স্কেলার হচ্ছে স্কেলার হচ্ছে শুধুমাত্র একটি সংখ্যা।

  • ভেক্টর - ভেক্টর হচ্ছে ওয়ান ডাইমেনশনাল অ্যারে। অর্থাৎ ভেক্টরে শুধুমাত্র একটি রো অথবা একটি কলাম থাকতে পারে ।

  • ম্যাট্রিক্স - ম্যাট্রিক্স হচ্ছে টু ডাইমেনশনাল অ্যারে। ম্যাট্রিক্সে রো এবং কলাম উভয়ই থাকে। উদাহরণ হিসাবে বলা যেতে পারে X23 মানে হচ্ছে ২য় রো এর ৩য় কলামে অবস্থিত সংখ্যাটি অর্থাৎ উপরের উদাহরণ অনুযায়ী যার মান হচ্ছে 7

পাইথনে ভেক্টর এবং ম্যাট্রিক্স গঠন,

import numpy as np
matrix = np.array([[1,2,3],[4,5,6]])
vector=np.array([7,9,6])

চলুন দেখে নেই এদের কেমন দেখায়,

matrix
vector

আপনি চাইলে matrix.shape অথবা vector.shape ব্যবহার করে এদের শেপ এবং ডাইমেনশন সম্পর্কে জানতে পারি।

ম্যাট্রিক্স - স্কেলার অপারেশন

কোন ম্যাট্রিক্স-এর সাথে কোন স্কেলারকে যোগ, বিয়োগ , গুন বা ভাগ করতে চাইলে , ম্যাট্রিক্স এর প্রতিটি মানের সাথে স্কেলারকে যোগ, বিয়োগ , গুন বা ভাগ করতে হয়।

ম্যাট্রিক্স-স্কেলার যোগ ,

matrix+3

একইভাবে অন্যান্য অপারেশন,

  • বিয়োগ- matrix-3

  • গুন-matrix*3

  • ভাগ- matrix/3

ম্যাট্রিক্স-ম্যাট্রিক্স সাধারন অপারেশন

ম্যাট্রিক্সের সাথে অন্য ম্যাট্রিক্সের সাধারন যোগ-বিয়োগ ইত্যাদি গানিতিক অপারেশনকে এলিমেন্টওয়াইজ অপারেশনও বলা হয়ে থাকে। এই পদ্ধতিতে একটি ম্যাট্রিক্সের অবস্থান অনুযায়ী অপর ম্যাট্রিক্সের একই অবস্থানে থাকা উপাদানের সাথে গানিতিক অপারেশন করা হয়।

a = np.array([
 [1,2],
 [3,4]
])
b = np.array([
 [1,2],
 [3,4]
])

print("a+b= \n",a + b)

ম্যাট্রিক্স-ম্যাট্রিক্স সাধারন গুনন

ম্যাট্রিক্স এর সাথে ম্যাট্রিক্সের সাধারন গুনন হচ্ছে এলিমেন্টওয়াইজ অপারেশন। এটাকে Hadamard product-ও বলা হয়ে থাকে।

a = np.array(
[[2,3],
 [2,3]])
b = np.array(
[[3,4],
 [5,6]])

print("a*b= \n",a * b)

একই পদ্ধতিতে ম্যাট্রিক্সের সাথে ভেক্টরের গুননও করা যায়।

ম্যাট্রিক্স-ম্যাট্রিক্স ডট গুনন

আমরা এতক্ষন ম্যাট্রিক্সের সাথে স্কেলার , ভেক্টর বা ম্যাট্রিক্সের সাধারন এলিমেন্টওয়াইজ অপারেশন দেখেছি। তবে এগুলো ছাড়াও ম্যাট্রিক্স এর সাথে ম্যাট্রিক্স এর গুননের আরেকটি পদ্ধতি আছে, সেটাকে বলা হয় ডট গুনন । এই পদ্ধতিতে একটি ম্যাট্রিক্স এর রো এর সাথে অপর ম্যাট্রিক্স এর কলামের গুন করা হয় , এবং গুনফলের সমষ্টি করা হয়। নিচের চিত্রে দুটি ম্যাট্রিক্সের ডট গুনন দেখানো হয়েছে।

m1 = np.array(
[[1,2,3],
 [4,5,6]])
m2 = np.array(
[[7,8],
 [9,10],
 [11,12]])

m1.dot(m2)

ট্রান্সপোস ম্যাট্রিক্স

ট্রান্সপোস ম্যাট্রিক্সকে অনেকটা আয়নার মত কাজ করে। এক্ষেত্রে রো গুলো ক্রমানুসারে কলামে পরিনত হয়।

A = np.array([[1,2,0],
              [3,5,9]])
A.T

নেগেটিভ ম্যাট্রিক্স

ম্যাট্রিক্সের প্রতিটি মানকে (-) দ্বারা গুন করা হয়।

C = np.array([[-5,-3,-1],
              [1,3,5]])
print (C)
print (-C)

আইডেন্টিটি ম্যাট্রিক্স

আইডেন্টিটি ম্যাট্রিক্স-এ বাম দিক থেকে কর্ণ বরাবর / কোনাকোনি বরাবর সবগুলো 1 মান হয় এবং অবশিষ্ট প্রতিটি মান 0 হয়। আইডেন্টিটি ম্যাট্রিক্স-এর শর্ত হচ্ছে ম্যাট্রিক্সটি অবশ্যই স্কয়ার ম্যাট্রিক্স হতে হবে অর্থাৎ রো এবং কলাম এর সংখ্যা সমান হতে হবে।

I = np.identity(3)
I

ইনভার্স ম্যাট্রিক্স

ইনভার্স ম্যাট্রিক্স এ প্রতিটি মানকে ইনভার্স করা হয়।

D = np.array([[6,2],
              [1,2]])

print(np.linalg.inv(D))

ডিটারমিনেন্ট

ডিটারমিনেন্ট হচ্ছে একটি বিশেষ ধরনের সংখ্যা যা স্কয়ার ম্যাট্রিক্স থেকে পাওয়া যায়। ডিটারমিনেন্ট নির্ণয়য়ের জন্য ম্যাট্রিক্সের কৌণিক গুনন এবং তাদের বিয়গের মাধ্যমে নির্ণয় করা হয়। নিচের ছবিতে ডিটারমিনেন্ট নির্ণয়ের পদ্ধতি বর্ণনা করা হয়েছে।

a = np.array([[67, 19, 21], [39, 13, 14], [81,24,26]])
d = np.linalg.det(a)

print("Determinant:",d)

আইজেন ভেক্টর এবং আইজেন ভ্যালু

আইজেন ভেক্টরের সবথেকে সহজ উদাহরণ হচ্ছে ট্রান্সফরমেশন হলেও এটি ডিরেকশন পরিবর্তন করে না। এই বইয়ের প্রিন্সিপাল কম্পোনেন্ট এনালাইসিস অধ্যায়ে আমরা দেখতে পাবো সাধারনত কোভ্যারিয়েন্স ম্যাট্রিক্স থেকে আইজেন ভ্যালু নির্ণয় করা হয় এবং প্রিন্সিপাল কম্পোনেন্ট এনালাইসিসপ্রিন্সিপাল কম্পোনেন্ট এনালাইসিসের ক্ষেত্রে এটি কিভাবে কাজ করে ।

কোন ম্যাট্রিক্সের আইজেন ভ্যালু নির্ণয়,

আইজেন ভ্যালু এবং আইজেন ভেক্টরের সম্পর্ক,

M = np.array([[1,2,3],[4,5,6],[2,9,5]])
eigvals, eigvecs = np.linalg.eig(M)

print ("Eigen Values \n",eigvals)
print ("Eigen Vector \n",eigvecs)

Last updated