সমাধান — অধ্যায় ০.৫ · Linear Algebra Essentials¶
অধ্যায়
part-0-foundations/00-05-linear-algebra.md-এর section ৭-এর সব অনুশীলনীর পূর্ণ সমাধান। প্রতিটি সংখ্যাগত ফল NumPy দিয়ে যাচাই করা হয়েছে।
Conceptual (ধারণাভিত্তিক)¶
৭.১ ★ — dataset দুই দৃষ্টিতে¶
একটি dataset-এ প্রতিটি row একটি observation (যেমন একজন ব্যক্তি) আর প্রতিটি column একটি variable (যেমন উচ্চতা)। পুরো ছকটিকে একসাথে দেখলে সেটি একটি matrix \(X\) (shape \(n\times d\)); কিন্তু যদি প্রতিটি row-কে আলাদা করে দেখি, তবে প্রতিটি observation \(\mathbb{R}^d\)-এর একটি vector, আর dataset হলো \(n\)টি এমন vector-এর সংগ্রহ। দুই দৃষ্টিই সঠিক — কোনটি ব্যবহার করব তা নির্ভর করে আমরা পুরো data-র উপর একসাথে operation করছি (matrix), নাকি একটি একটি observation নিয়ে ভাবছি (vector)।
৭.২ ★★ — \(\det(A)=0\) হলে inverse নেই কেন¶
determinant হলো \(A\) transformation-এর অধীনে area/volume-এর scale factor। \(\det(A)=0\) মানে \(A\) পুরো space-কে একটি নিম্নমাত্রায় চেপ্টে দেয় (২D সমতল → একটি রেখা বা বিন্দু), ফলে ক্ষেত্রফল \(0\) হয়ে যায়। এই চেপ্টে যাওয়ায় তথ্য হারায়: একাধিক ভিন্ন input vector একই output-এ গিয়ে পড়ে। inverse-এর কাজ হলো output থেকে অনন্যভাবে input ফিরিয়ে আনা — কিন্তু যখন অনেক input একই output দেয়, তখন "ফিরিয়ে আনা" অসম্ভব। তাই \(\det(A)=0\) হলে \(A^{-1}\) থাকে না (matrix-টি singular)।
৭.৩ ★★ — orthogonality = uncorrelated¶
দুটি variable-এর data column \(\mathbf{x}, \mathbf{y}\) থেকে যদি তাদের mean বিয়োগ করে centered করি (\(\mathbf{x}_c, \mathbf{y}_c\)), তবে তাদের covariance $$ \operatorname{cov}(x,y) = \frac{1}{n-1}\sum_i (x_i-\bar x)(y_i-\bar y) = \frac{1}{n-1}\,\mathbf{x}_c\cdot\mathbf{y}_c . $$ অর্থাৎ covariance আসলে centered column-দের dot product (একটি ধ্রুবক গুণফল সহ)। তাই $$ \mathbf{x}_c \perp \mathbf{y}_c \iff \mathbf{x}_c\cdot\mathbf{y}_c = 0 \iff \operatorname{cov}(x,y)=0 \iff x,y \text{ uncorrelated}. $$ geometry-র "লম্বত্ব" আর statistics-এর "সম্পর্কহীনতা" তাই একই গাণিতিক শর্ত।
Computational (গণনাভিত্তিক)¶
৭.৪ ★ — dot product, norm, কোণ¶
\(\mathbf{u}=\begin{bmatrix}2\\-1\\2\end{bmatrix}\), \(\mathbf{v}=\begin{bmatrix}1\\2\\2\end{bmatrix}\)।
৭.৫ ★★ — \(AB\) vs \(BA\) এবং \(\det(AB)=\det(A)\det(B)\)¶
\(A=\begin{bmatrix}3&0\\0&2\end{bmatrix}\), \(B=\begin{bmatrix}1&1\\0&1\end{bmatrix}\)।
$$ AB = \begin{bmatrix}3\cdot1+0\cdot0 & 3\cdot1+0\cdot1\ 0\cdot1+2\cdot0 & 0\cdot1+2\cdot1\end{bmatrix} = \begin{bmatrix}3 & 3\ 0 & 2\end{bmatrix}, \qquad BA = \begin{bmatrix}1\cdot3+1\cdot0 & 1\cdot0+1\cdot2\ 0\cdot3+1\cdot0 & 0\cdot0+1\cdot2\end{bmatrix} = \begin{bmatrix}3 & 2\ 0 & 2\end{bmatrix}. $$ \(AB \neq BA\) (উপরের-ডান entry ভিন্ন: \(3\) বনাম \(2\))।
determinant: \(\det(A) = 3\cdot2 - 0 = 6\), \(\det(B) = 1\cdot1 - 1\cdot0 = 1\), \(\det(AB) = 3\cdot2 - 3\cdot0 = 6\)। যাচাই: \(\det(A)\det(B) = 6\times1 = 6 = \det(AB)\) ✓। (এটি general সত্য: \(\det(AB)=\det(A)\det(B)\)।)
৭.৬ ★★ — \(\det\) ও inverse হাতে¶
\(M=\begin{bmatrix}1&2\\3&4\end{bmatrix}\)।
Proof-based (প্রমাণভিত্তিক)¶
৭.৭ ★★ — \(A+A^\top\) সর্বদা symmetric¶
symmetric-এর সংজ্ঞা: \(S\) symmetric যদি \(S^\top = S\)। ধরা যাক \(S = A + A^\top\)। transpose-এর নিয়ম প্রয়োগ করি: $$ S^\top = (A + A^\top)^\top = A^\top + (A^\top)^\top = A^\top + A = A + A^\top = S . $$ এখানে ব্যবহার করলাম \((B+C)^\top = B^\top + C^\top\) এবং \((A^\top)^\top = A\), আর addition commutative। যেহেতু \(S^\top = S\), তাই \(A+A^\top\) symmetric। \(\blacksquare\)
(পার্শ্ব-মন্তব্য: এই কারণেই যেকোনো square matrix-কে একটি symmetric অংশ \(\tfrac12(A+A^\top)\) ও একটি anti-symmetric অংশ \(\tfrac12(A-A^\top)\)-এ ভাঙা যায়।)
৭.৮ ★★★ — \(A^2\)-এর eigenvalue \(\lambda^2\)¶
ধরা যাক \(A\mathbf{v} = \lambda\mathbf{v}\), \(\mathbf{v}\neq\mathbf{0}\)। তাহলে $$ A^2\mathbf{v} = A(A\mathbf{v}) = A(\lambda\mathbf{v}) = \lambda\,(A\mathbf{v}) = \lambda\,(\lambda\mathbf{v}) = \lambda^2\mathbf{v}. $$ (দ্বিতীয় ধাপে \(A\mathbf{v}=\lambda\mathbf{v}\) বসালাম; তৃতীয় ধাপে linearity দিয়ে scalar \(\lambda\) বাইরে আনলাম; চতুর্থ ধাপে আবার \(A\mathbf{v}=\lambda\mathbf{v}\)।) যেহেতু \(\mathbf{v}\neq\mathbf{0}\), এটি দেখায় \(\mathbf{v}\) হলো \(A^2\)-এর eigenvector, eigenvalue \(\lambda^2\) সহ।
সাধারণীকরণ: একই যুক্তি \(k\) বার প্রয়োগ করে যেকোনো ধনাত্মক পূর্ণসংখ্যা \(k\)-এর জন্য $$ A^k\mathbf{v} = \lambda^k\mathbf{v}, $$ অর্থাৎ \(A^k\)-এর eigenvalue \(\lambda^k\) (eigenvector একই থাকে)। (NumPy যাচাই: \(A=\begin{bmatrix}2&1\\1&2\end{bmatrix}\)-এ \(\lambda\in\{1,3\}\) হলে \(A^2\)-এর eigenvalue \(\{1,9\}\) — মিলে যায়।)
Coding (Python)¶
৭.৯ ★★ — is_orthogonal¶
import numpy as np
def is_orthogonal(u, v, tol=1e-9):
"""dot product ব্যবহার করে u ⟂ v কিনা যাচাই করে।"""
u = np.asarray(u, dtype=float)
v = np.asarray(v, dtype=float)
return bool(abs(np.dot(u, v)) < tol)
# বিকল্প: return bool(np.isclose(np.dot(u, v), 0.0, atol=tol))
print(is_orthogonal([1, 2], [2, -1])) # True (1*2 + 2*(-1) = 0)
print(is_orthogonal([1, 2], [3, 1])) # False (1*3 + 2*1 = 5)
ব্যাখ্যা: \(\mathbf{u}\perp\mathbf{v}\iff\mathbf{u}\cdot\mathbf{v}=0\)। floating-point-এ ঠিক \(0\) বিরল, তাই একটি ছোট সহনশীলতা tol দিয়ে তুলনা করি। \([1,2]\cdot[2,-1]=0\) ⇒ True; \([1,2]\cdot[3,1]=5\) ⇒ False।
৭.১০ ★★★ — covariance-এর principal axis plot¶
import matplotlib
matplotlib.use("Agg") # বা স্বাভাবিক backend, Jupyter-এ inline
import numpy as np
import matplotlib.pyplot as plt
# 1) correlated 50x2 dataset
rng = np.random.default_rng(0)
base = rng.normal(size=(50, 2)) # uncorrelated আদি data
T = np.array([[1.5, 0.0],
[0.9, 0.5]]) # mixing matrix → correlation আনে
X = base @ T.T
X = X - X.mean(axis=0) # center
# 2) covariance + eigen-decomposition
C = np.cov(X, rowvar=False) # 2x2 symmetric
vals, vecs = np.linalg.eigh(C) # ascending eigenvalues
order = np.argsort(vals)[::-1] # descending: PC1 first
vals, vecs = vals[order], vecs[:, order]
print("covariance =\n", np.round(C, 3))
print("eigenvalues (variances):", np.round(vals, 3))
print("top eigenvector:", np.round(vecs[:, 0], 3))
# 3) plot data + principal axes (length ∝ sqrt(eigenvalue))
fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(X[:, 0], X[:, 1], s=18, alpha=0.5, color="#1f77b4", label="data")
colors = ["#d62728", "#2ca02c"]
for i in range(2):
vv = vecs[:, i] * np.sqrt(vals[i]) * 2.0
ax.quiver(0, 0, vv[0], vv[1], angles="xy", scale_units="xy", scale=1,
color=colors[i], width=0.013,
label=f"PC{i+1} (var={vals[i]:.2f})")
ax.set_aspect("equal"); ax.grid(True, alpha=0.3)
ax.axhline(0, color="gray", lw=0.6); ax.axvline(0, color="gray", lw=0.6)
ax.set_xlabel("X1"); ax.set_ylabel("X2")
ax.set_title("Principal axes from the covariance matrix")
ax.legend(loc="upper left", fontsize=9)
plt.tight_layout()
plt.savefig("ex-7-10-pca.png", dpi=150) # নিজের ফোল্ডারে সংরক্ষণ
প্রত্যাশিত output (seed = 0):
covariance =
[[1.973 1.304]
[1.304 1.103]]
eigenvalues (variances): [2.913 0.163]
top eigenvector: [0.811 0.585]
সব সংখ্যাগত ফল এক নজরে (যাচাইকৃত)¶
| প্রশ্ন | মূল ফল |
|---|---|
| ৭.৪ | \(\mathbf{u}\cdot\mathbf{v}=4\), \(\|\mathbf{u}\|=\|\mathbf{v}\|=3\), \(\cos\theta=4/9\), \(\theta\approx63.6^\circ\) |
| ৭.৫ | \(AB=\begin{bmatrix}3&3\\0&2\end{bmatrix}\neq BA=\begin{bmatrix}3&2\\0&2\end{bmatrix}\); \(\det(AB)=6=6\cdot1\) |
| ৭.৬ | \(\det M=-2\), \(M^{-1}=\begin{bmatrix}-2&1\\1.5&-0.5\end{bmatrix}\) |
| ৭.৮ | \(A^k\mathbf{v}=\lambda^k\mathbf{v}\); \(\{1,3\}\to A^2:\{1,9\}\) |
| ৭.৯ | True, False |
| ৭.১০ | eigenvalues \(\approx(2.91, 0.16)\), top eigvec \(\approx(0.81, 0.59)\) |