পাঠ ০৬ · ৩৫-এর মধ্যে · মডিউল ২
Home / AI Courses / Math for AI & ML / লিনিয়ার ইন্ডিপেন্ডেন্স, স্প্যান ও বেসিস

লিনিয়ার ইন্ডিপেন্ডেন্স, স্প্যান ও বেসিস

Linear independence, span & basis
১১ মিনিট পড়া মধ্যম · Intermediate NumPy কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • লিনিয়ার কম্বিনেশন ও স্প্যানের কঠোর সংজ্ঞা
  • একগুচ্ছ ভেক্টর লিনিয়ারলি ইন্ডিপেন্ডেন্ট কি না তা পরীক্ষা করার পদ্ধতি
  • বেসিস ও ডাইমেনশনের সংজ্ঞা, এবং স্ট্যান্ডার্ড বেসিসের সাথে সংযোগ (পাঠ ০৩)
  • কেন redundant ফিচার ML মডেলের জন্য সমস্যাযুক্ত — একটি বাস্তব উদাহরণ দিয়ে

১ · লিনিয়ার কম্বিনেশন

ভেক্টর $\mathbf{v}_1,\mathbf{v}_2,\dots,\mathbf{v}_k$ এবং স্কেলার $c_1,c_2,\dots,c_k$ দেওয়া থাকলে, এদের লিনিয়ার কম্বিনেশন হলো:

$$c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \dots + c_k\mathbf{v}_k$$

পাঠ ০৩-এ আমরা এটি ইতিমধ্যে দেখেছি — $\mathbf{x}=x_1\mathbf{e}_1+x_2\mathbf{e}_2+x_3\mathbf{e}_3$ আসলে $\mathbf{e}_1,\mathbf{e}_2,\mathbf{e}_3$-এর একটি লিনিয়ার কম্বিনেশন, যেখানে স্কেলারগুলো হলো $x_1,x_2,x_3$ নিজেই। স্কেলারগুলো ($c_i$) যেকোনো বাস্তব সংখ্যা হতে পারে — ধনাত্মক, ঋণাত্মক, বা শূন্য।

২ · স্প্যান (Span)

ভেক্টর $\mathbf{v}_1,\dots,\mathbf{v}_k$-এর স্প্যান হলো তাদের সব সম্ভাব্য লিনিয়ার কম্বিনেশনের সেট — অর্থাৎ $c_1,\dots,c_k$-এর সব সম্ভাব্য মান বসিয়ে যত ভেক্টর তৈরি করা যায়, তাদের সবগুলোর সংগ্রহ:

$$\text{span}(\mathbf{v}_1,\dots,\mathbf{v}_k) = \{c_1\mathbf{v}_1+\dots+c_k\mathbf{v}_k \mid c_1,\dots,c_k\in\mathbb{R}\}$$

উদাহরণ: $\mathbb{R}^2$-এ যদি $\mathbf{v}_1=(1,0)$ এবং $\mathbf{v}_2=(0,1)$ হয় (মানে $\mathbf{e}_1,\mathbf{e}_2$), তাহলে এদের স্প্যান হলো পুরো $\mathbb{R}^2$ — কারণ যেকোনো $(x_1,x_2)$-কে $x_1\mathbf{v}_1+x_2\mathbf{v}_2$ হিসেবে লেখা যায়। কিন্তু যদি $\mathbf{v}_1=(1,0)$ এবং $\mathbf{v}_2=(2,0)$ হয় (দুটোই একই দিকে, $x$-অক্ষ বরাবর), তাহলে এদের স্প্যান শুধু $x$-অক্ষের উপর থাকা সব বিন্দু — পুরো $\mathbb{R}^2$ নয়, শুধু একটি সরলরেখা। এখানেই পরের ধারণাটা দরকার হয়।

৩ · লিনিয়ার ইন্ডিপেন্ডেন্স

ভেক্টর $\mathbf{v}_1,\dots,\mathbf{v}_k$ লিনিয়ারলি ইন্ডিপেন্ডেন্ট হয় যদি একমাত্র এমন কম্বিনেশন যা শূন্য ভেক্টর দেয়, তা হলো ট্রিভিয়াল কম্বিনেশন — অর্থাৎ:

$$c_1\mathbf{v}_1+c_2\mathbf{v}_2+\dots+c_k\mathbf{v}_k = \mathbf{0} \quad\Longrightarrow\quad c_1=c_2=\dots=c_k=0$$

যদি এমন কোনো নন-ট্রিভিয়াল কম্বিনেশন (কমপক্ষে একটি $c_i\neq0$) থাকে যা শূন্য ভেক্টর দেয়, তাহলে ভেক্টরগুলো লিনিয়ারলি ডিপেন্ডেন্ট। ব্যবহারিকভাবে, লিনিয়ার ডিপেন্ডেন্সের মানে হলো — কমপক্ষে একটি ভেক্টর বাকিগুলোর লিনিয়ার কম্বিনেশন হিসেবে লেখা যায়, অর্থাৎ এটি "নতুন কোনো তথ্য" যোগ করছে না।

যেমন উপরের উদাহরণে $\mathbf{v}_1=(1,0)$ এবং $\mathbf{v}_2=(2,0)$: এখানে $2\mathbf{v}_1 - 1\mathbf{v}_2 = (2,0)-(2,0)=\mathbf{0}$ — এবং $c_1=2\neq0$, তাই এটি একটি নন-ট্রিভিয়াল কম্বিনেশন। সুতরাং $\mathbf{v}_1,\mathbf{v}_2$ লিনিয়ারলি ডিপেন্ডেন্ট — যা মেলে আমাদের আগের পর্যবেক্ষণের সাথে যে তাদের স্প্যান শুধু একটি সরলরেখা।

মনে রাখুন: লিনিয়ার ইন্ডিপেন্ডেন্স পরীক্ষা করার সময় সবসময় সমীকরণ $c_1\mathbf{v}_1+\dots+c_k\mathbf{v}_k=\mathbf{0}$ সমাধান করে দেখুন $c_i=0$ ছাড়া অন্য কোনো সমাধান আছে কি না। শুধু চোখে দেখে "ভিন্ন দেখতে লাগছে" বলে সিদ্ধান্ত নেওয়া বিপজ্জনক — যেমন $(1,0)$ ও $(2,0)$ দেখতে ভিন্ন হলেও গাণিতিকভাবে ডিপেন্ডেন্ট।

৪ · বেসিস ও ডাইমেনশন

একটি ভেক্টর স্পেসের (যেমন $\mathbb{R}^n$) বেসিস হলো এমন একটি ভেক্টর সেট যা দুটি শর্ত পূরণ করে:

  • এটি লিনিয়ারলি ইন্ডিপেন্ডেন্ট (কোনো ভেক্টর "বাড়তি"/redundant নয়), এবং
  • এটি পুরো স্পেস স্প্যান করে (প্রতিটি ভেক্টর এদের কম্বিনেশন হিসেবে লেখা যায়)।

একটি বেসিসে ঠিক কতটি ভেক্টর থাকবে তা নির্দিষ্ট — একেই বলা হয় সেই স্পেসের ডাইমেনশন (dimension)। $\mathbb{R}^n$-এর যেকোনো বেসিসে ঠিক $n$টি ভেক্টর থাকবে। পাঠ ০৩-এর স্ট্যান্ডার্ড বেসিস $\mathbf{e}_1,\dots,\mathbf{e}_n$ এই শর্ত দুটি পূরণ করে — এরা পরস্পর ইন্ডিপেন্ডেন্ট (আগেই পাঠ ০৪-এ দেখেছি এরা পরস্পর অর্থোগোনাল, যা ইন্ডিপেন্ডেন্সের চেয়ে শক্তিশালী শর্ত) এবং যেকোনো ভেক্টরকে $\sum_i x_i\mathbf{e}_i$ হিসেবে লেখা যায়। কিন্তু এটাই একমাত্র বেসিস নয় — $\mathbb{R}^2$-এর $(1,1)$ ও $(1,-1)$ ভেক্টরদুটোও একটি বৈধ বেসিস গঠন করে, কারণ এরাও ইন্ডিপেন্ডেন্ট এবং $\mathbb{R}^2$ স্প্যান করে।

৫ · কেন ML-এ গুরুত্বপূর্ণ — redundant ফিচার ও র‍্যাঙ্ক

একটি ডেটাসেটে প্রতিটি সারি (row) সাধারণত একটি ফিচার-ভেক্টর — যেমন "বাড়ির আয়তন (বর্গফুট), রুম সংখ্যা, বাড়ির আয়তন (বর্গমিটার)"। লক্ষ্য করুন শেষ ফিচারটি প্রথমটির শুধু একটি স্কেলার গুণ (বর্গমিটার = বর্গফুট $\times 0.0929$)। এই তিনটি ফিচার-কলাম লিনিয়ারলি ডিপেন্ডেন্ট — তৃতীয়টি প্রথমটির লিনিয়ার কম্বিনেশন মাত্র, কোনো নতুন তথ্য যোগ করছে না।

এই ধরনের redundant বা পরস্পর-সম্পর্কিত (highly correlated) ফিচার থাকলে ডেটা ম্যাট্রিক্সের কার্যকর র‍্যাঙ্ক (effective rank) কমে যায় — অর্থাৎ কলামগুলো যতটা স্বাধীন তথ্য বহন করতে পারত, তার চেয়ে কম বহন করছে। এর ব্যবহারিক প্রভাব: রিগ্রেশন মডেলে এটি $\mathbf{X}^T\mathbf{X}$-কে সিঙ্গুলার বা প্রায়-সিঙ্গুলার করে তুলতে পারে (পাঠ ০৯-এ ইনভার্স ও র‍্যাঙ্ক দেখার সময় এর প্রভাব সম্পূর্ণ বুঝব), এবং মডেলের সহগ (coefficient) অস্থির হয়ে ওঠে। এই কারণে ফিচার ইঞ্জিনিয়ারিং-এ পরস্পর-সম্পর্কিত ফিচার শনাক্ত করে বাদ দেওয়া একটি গুরুত্বপূর্ণ ধাপ।

মূল কথা · Key takeaway

লিনিয়ার ইন্ডিপেন্ডেন্স মানে "প্রতিটি ভেক্টর সত্যিকারের নতুন তথ্য যোগ করছে"। ML-এ redundant ফিচার এই ধর্ম ভঙ্গ করে — এবং পরের কয়েকটি পাঠে (বিশেষত র‍্যাঙ্ক ও ইনভার্স নিয়ে পাঠ ০৯) আমরা দেখব এর ফলে গাণিতিকভাবে ঠিক কী সমস্যা তৈরি হয়।

৬ · কোড দিয়ে দেখুন — NumPy দিয়ে ইন্ডিপেন্ডেন্স ও র‍্যাঙ্ক পরীক্ষা

একগুচ্ছ ভেক্টরকে একটি ম্যাট্রিক্সের সারি হিসেবে রেখে, np.linalg.matrix_rank দিয়ে তাদের মধ্যে কতগুলো সত্যিকারের ইন্ডিপেন্ডেন্ট আছে তা পরীক্ষা করা যায়।

Python · NumPy
import numpy as np

# তিনটি ইন্ডিপেন্ডেন্ট ভেক্টর (স্ট্যান্ডার্ড বেসিসের কাছাকাছি)
V_independent = np.array([
    [1.0, 0.0, 0.0],
    [0.0, 1.0, 0.0],
    [0.0, 0.0, 1.0],
])
print("rank (independent):", np.linalg.matrix_rank(V_independent))  # 3

# একটি redundant ফিচারসহ ম্যাট্রিক্স:
# কলাম ৩ = কলাম ১ এর ঠিক ২ গুণ (একদম নির্ভরশীল)
V_dependent = np.array([
    [1.0, 0.0, 2.0],
    [0.0, 1.0, 0.0],
    [2.0, 3.0, 4.0],
])
print("rank (with redundant column):", np.linalg.matrix_rank(V_dependent))  # 2, ৩ নয়

# হাতে-কলমে যাচাই: c1*v1 + c2*v2 = 0 এর ট্রিভিয়াল ছাড়া সমাধান আছে কি?
v1 = np.array([1.0, 0.0])
v2 = np.array([2.0, 0.0])   # v2 = 2 * v1 -> ডিপেন্ডেন্ট
# c1=2, c2=-1 দিয়ে: 2*v1 - 1*v2 = [0, 0]
print("2*v1 - 1*v2 =", 2*v1 - 1*v2)

    
মূল কথা · Key takeaway

np.linalg.matrix_rank(V) সরাসরি বলে দেয় $V$-এর সারিগুলোর (বা কলামগুলোর) মধ্যে কতগুলো সত্যিকারের লিনিয়ারলি ইন্ডিপেন্ডেন্ট। র‍্যাঙ্ক যদি মোট সারি/কলাম সংখ্যার চেয়ে কম হয়, তার মানে redundancy আছে — এই ধারণাটাই পাঠ ০৯-এ সম্পূর্ণ ম্যাট্রিক্স র‍্যাঙ্কের সংজ্ঞায় বিস্তৃত হবে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ $\mathbb{R}^2$-এ কি ৩টি ভেক্টর লিনিয়ারলি ইন্ডিপেন্ডেন্ট হতে পারে?

না, কখনোই নয়। $\mathbb{R}^2$-এর ডাইমেনশন $2$, এবং একটি মৌলিক ফলাফল হলো — কোনো $n$-মাত্রার স্পেসে $n$-এর চেয়ে বেশি ভেক্টর নিলে সেগুলো অবশ্যই লিনিয়ারলি ডিপেন্ডেন্ট হবে। স্বজ্ঞাগতভাবে: ২টি ইন্ডিপেন্ডেন্ট ভেক্টরই পুরো ২D প্লেন স্প্যান করার জন্য যথেষ্ট (যেমন $\mathbf{e}_1,\mathbf{e}_2$); তৃতীয় যেকোনো ভেক্টর অবশ্যই এই দুটোর কোনো লিনিয়ার কম্বিনেশন হিসেবে লেখা যাবে, তাই সেটা নতুন কোনো "স্বাধীন দিক" যোগ করতে পারে না।

প্র ০২ যদি দুটি ফিচার পুরোপুরি সমানুপাতিক হয় (একটি অন্যটির স্কেলার গুণ), স্প্যান ও র‍্যাঙ্কের উপর এর প্রভাব কী?

দুটি ফিচার-ভেক্টর $\mathbf{v}_1$ ও $c\mathbf{v}_1$ (কোনো স্কেলার $c\neq0$-এর জন্য) হলে তাদের স্প্যান শুধু একটি সরলরেখা — যদিও দুটো "আলাদা" কলাম মনে হচ্ছে, তারা একসাথে যতটুকু জায়গা কভার করে তা একটি একক ভেক্টরও কভার করত। ফলে ডেটা ম্যাট্রিক্সের র‍্যাঙ্ক এক কমে যায় (এই দুই কলাম মিলে ১টি "কার্যকর" মাত্রা দেয়, ২টি নয়)। এটাই "লিনিয়ার ডিপেন্ডেন্সি র‍্যাঙ্ক কমায়" কথাটার সবচেয়ে সরল রূপ।

প্র ০৩ স্ট্যান্ডার্ড বেসিস কি $\mathbb{R}^n$-এর একমাত্র সম্ভাব্য বেসিস?

না। যেকোনো $n$টি লিনিয়ারলি ইন্ডিপেন্ডেন্ট ভেক্টর যা $\mathbb{R}^n$ স্প্যান করে, তা একটি বৈধ বেসিস। যেমন $\mathbb{R}^2$-এ $(1,1)$ ও $(1,-1)$ ভেক্টরদুটোও একটি বেসিস গঠন করে — এরা ইন্ডিপেন্ডেন্ট (একটি অন্যটির স্কেলার গুণ নয়) এবং একসাথে পুরো প্লেন স্প্যান করে। স্ট্যান্ডার্ড বেসিস শুধু সবচেয়ে "সহজ" ও প্রচলিত পছন্দ, কারণ এর কো-অর্ডিনেট সরাসরি ভেক্টরের উপাদান হয়ে যায় — কিন্তু গাণিতিকভাবে এটি বিশেষ কিছু নয়।

অনুশীলন

  1. পরীক্ষা করুন: $\mathbf{v}_1=(1,2)$ এবং $\mathbf{v}_2=(2,4)$ কি লিনিয়ারলি ইন্ডিপেন্ডেন্ট? সমীকরণ $c_1\mathbf{v}_1+c_2\mathbf{v}_2=\mathbf{0}$ সমাধান করে দেখান।

    $\mathbf{v}_2 = 2\mathbf{v}_1$, তাই $2\mathbf{v}_1 - 1\mathbf{v}_2 = (2,4)-(2,4)=\mathbf{0}$ — এখানে $c_1=2, c_2=-1$, যা ট্রিভিয়াল নয় ($c_1\neq0$)। সুতরাং এরা লিনিয়ারলি ডিপেন্ডেন্ট, ইন্ডিপেন্ডেন্ট নয়।

  2. বর্ণনা করুন: $\mathbb{R}^3$-এ দুটি ইন্ডিপেন্ডেন্ট ভেক্টর $\mathbf{v}_1=(1,0,0)$ এবং $\mathbf{v}_2=(0,1,0)$-এর স্প্যান কী রকম দেখতে জ্যামিতিকভাবে?

    এদের স্প্যান হলো $xy$-প্লেন — অর্থাৎ $z=0$ শর্তযুক্ত সব বিন্দুর সেট, $\{(a,b,0)\mid a,b\in\mathbb{R}\}$। এটি পুরো $\mathbb{R}^3$ নয় (একটি ২-মাত্রার সাবস্পেস মাত্র), কারণ মাত্র ২টি ইন্ডিপেন্ডেন্ট ভেক্টর দিয়ে ৩-মাত্রার স্পেস স্প্যান করা সম্ভব নয়।

  3. কোড দিয়ে যাচাই করুন: একটি $3\times3$ ম্যাট্রিক্স তৈরি করুন যার একটি সারি অন্য দুটি সারির যোগফলের সমান, তারপর np.linalg.matrix_rank দিয়ে দেখুন র‍্যাঙ্ক $3$-এর কম আসে কি না।

    যেমন সারি ৩ = সারি ১ + সারি ২ হলে, সেই সারিটি বাকি দুটির লিনিয়ার কম্বিনেশন (তাই redundant), এবং np.linalg.matrix_rank ফলাফল দেবে $2$, $3$ নয় — নিশ্চিত করে যে সারিগুলো লিনিয়ারলি ইন্ডিপেন্ডেন্ট নয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
ভেক্টর নর্ম ও দূরত্ব