MinAI - Về trang chủ
Lý thuyết
4/154-5 giờ
Đang tải...

Nền tảng Toán học cho Machine Learning

Đại số tuyến tính, Thống kê và NumPy

0

🎯 Mục tiêu bài học

TB5 min

Sau bài học này, học viên sẽ:

✅ Hiểu tại sao toán học là nền tảng của Machine Learning

✅ Nắm vững Đại số tuyến tính: Vector, Ma trận, Eigenvalue/Eigenvector

✅ Thành thạo Giải tích: Đạo hàm, Gradient, Gradient Descent

✅ Hiểu Xác suất & Thống kê: Gaussian, Bayes, Covariance

✅ Thực hành NumPy với visualization

✅ Làm được quiz kiểm tra kiến thức

Thời gian: 4-5 giờ | Độ khó: Intermediate

1

📖 Bảng Thuật Ngữ Quan Trọng

TB5 min
Thuật ngữTiếng ViệtGiải thích đơn giản
VectorVéc-tơMảng 1 chiều chứa các số, biểu diễn features
MatrixMa trậnMảng 2 chiều (hàng x cột) chứa dữ liệu
GradientĐạo hàm véc-tơHướng thay đổi nhanh nhất của hàm số
Gradient DescentHạ gradientThuật toán tối ưu bằng cách đi theo hướng gradient giảm
EigenvalueTrị riêngGiá trị cho biết mức độ "kéo giãn" của phép biến đổi
CovarianceHiệp phương saiĐo mức độ 2 biến thay đổi cùng nhau
GaussianPhân phối chuẩnPhân phối hình chuông, phổ biến nhất trong thống kê
Loss FunctionHàm mất mátHàm đo sai số giữa dự đoán và thực tế

Checkpoint

Bạn đã làm quen với các thuật ngữ? Hãy ghi nhớ chúng!

2

📐 Tại sao Toán học quan trọng?

TB5 min

Machine Learning = Toán học + Data + Code

Machine Learning về bản chất là tối ưu hóa:

  1. Đại số tuyến tính → Biểu diễn data dạng vector/ma trận
  2. Giải tích → Tìm cực trị (minimize loss function)
  3. Xác suất & Thống kê → Đánh giá độ chắc chắn
  4. NumPy → Tính toán nhanh với arrays

0.2 Ví dụ minh họa

Bài toán MLToán học cần dùngVí dụ cụ thể
Linear RegressionĐại số tuyến tính + Giải tíchTìm đường thẳng y = wx + b tối ưu bằng Gradient Descent
Neural NetworkMa trận + Đạo hàm chuỗiForward pass: nhân ma trận, Backprop: chain rule
K-Means ClusteringKhoảng cách EuclideanTính khoảng cách giữa các điểm
Naive BayesXác suất có điều kiệnÁp dụng công thức Bayes
PCAEigenvalue/EigenvectorTìm trục chính giảm chiều data

Lộ trình học Toán cho ML:

  1. Bước 1: Hiểu tại sao cần toán → ML = Tối ưu hóa toán học
  2. Bước 2: Đại số tuyến tính → Vector, Ma trận, Eigenvalue
  3. Bước 3: Giải tích → Đạo hàm, Gradient Descent
  4. Bước 4: Thống kê → Mean, Variance, Correlation
  5. Bước 5: Xác suất → Gaussian, Bayes
  6. Bước 6: NumPy thực hành → Code hóa lý thuyết
  7. Kết quả: Tự tin áp dụng ML → Hiểu sâu, debug tốt

Checkpoint

Bạn đã hiểu tại sao toán học quan trọng cho ML chưa?

3

📐 Đại số tuyến tính (Linear Algebra)

TB5 min

💡 Tại sao cần Đại số tuyến tính trong ML?

  • Data representation: 1 ảnh 28×28 pixels = vector 784 chiều
  • Model parameters: Neural network với 1000 neurons = ma trận weights
  • Batch processing: Train với 100 samples cùng lúc = ma trận operations
  • Efficiency: NumPy vectorization nhanh hơn Python loops 100x

1.1 Vector và Ma trận

Vector là mảng 1 chiều:

x=[x1x2xn]\mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}

Ma trận là mảng 2 chiều:

A=[a11a12a1na21a22a2nam1am2amn]\mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix}

💡 Ví dụ thực tế:

Python
1# Vector: 1 sample với 3 features
2student = [85, 90, 78] # [Math, Physics, Chemistry]
3
4# Matrix: 4 students với 3 features
5class_scores = [
6 [85, 90, 78], # Student 1
7 [92, 88, 95], # Student 2
8 [78, 85, 82], # Student 3
9 [88, 92, 90] # Student 4
10]

1.2 Các phép toán cơ bản

Phép toánCông thứcĐiều kiệnVí dụ
Cộng ma trậnC=A+BC = A + BCùng kích thướcMa trận 2x2 + Ma trận 2x2
Nhân scalarB=kAB = kA-2 nhân với mỗi phần tử
Nhân ma trậnC=A×BC = A \times BA: m×nm \times n, B: n×pn \times p(2x3) x (3x2) = (2x2)
TransposeB=ATB = A^TĐổi hàng thành cộtMa trận 2x3 → 3x2
Dot productab=aibia \cdot b = \sum a_i b_iCùng độ dài[1,2,3] · [4,5,6] = 32

1.3 Thực hành NumPy

Mô tả: Thực hành các phép toán vector và ma trận với NumPy để nắm vững concept.

Python
1import numpy as np
2
3# Tạo vector
4x = np.array([1, 2, 3])
5print(f"Vector: {x}")
6print(f"Shape: {x.shape}")
7
8# Tạo ma trận
9A = np.array([[1, 2, 3],
10 [4, 5, 6]])
11print(f"Ma trận:\n{A}")
12print(f"Shape: {A.shape}")
13
14# Các phép toán
15B = np.array([[7, 8, 9],
16 [10, 11, 12]])
17
18# Cộng
19print(f"A + B:\n{A + B}")
20
21# Nhân scalar
22print(f"2 * A:\n{2 * A}")
23
24# Dot product
25a = np.array([1, 2, 3])
26b = np.array([4, 5, 6])
27print(f"a dot b: {np.dot(a, b)}") # 1*4 + 2*5 + 3*6 = 32
28
29# Nhân ma trận
30C = np.array([[1, 2],
31 [3, 4],
32 [5, 6]])
33print(f"A @ C:\n{A @ C}") # (2x3) @ (3x2) = (2x2)
34
35# Transpose
36print(f"A transpose:\n{A.T}")

Giải thích chi tiết:

  1. np.array([1,2,3]): Tạo vector 1D (shape = (3,))
  2. np.array([[...]]): Tạo ma trận 2D (shape = (rows, cols))
  3. A + B: Element-wise addition - cộng từng phần tử tương ứng
  4. 2 * A: Broadcasting - nhân mỗi phần tử với 2
  5. np.dot(a, b): Tích vô hướng = aibi\sum a_i b_i = 1×4 + 2×5 + 3×6 = 32
  6. A @ C: Nhân ma trận (operator @ = np.matmul())
    • Quy tắc: (m×n)×(n×p)=(m×p)(m \times n) \times (n \times p) = (m \times p)
    • Số cột A (3) phải bằng số hàng C (3)
  7. A.T: Transpose - đổi hàng thành cột

💡 Mẹo: Luôn kiểm tra shape trước khi nhân ma trận để tránh lỗi dimension mismatch!


1.4 Eigenvalue và Eigenvector

Định nghĩa:

Cho ma trận vuông AA, nếu tồn tại vector v0\mathbf{v} \neq 0 và scalar λ\lambda sao cho:

Av=λvA\mathbf{v} = \lambda\mathbf{v}

Thì:

  • λ\lambda gọi là Eigenvalue (giá trị riêng)
  • v\mathbf{v} gọi là Eigenvector (vector riêng)

Ý nghĩa:

  • Eigenvector: Hướng không đổi khi nhân ma trận (chỉ bị co/giãn)
  • Eigenvalue: Hệ số co/giãn theo hướng đó
  • Ứng dụng: PCA (giảm chiều), Google PageRank, phân tích dao động

Tại sao quan trọng trong ML?

Ứng dụngCách dùng Eigenvalue/Eigenvector
PCA (Principal Component Analysis)Tìm eigenvectors của ma trận covariance để giảm chiều data
Spectral ClusteringDùng eigenvectors của ma trận similarity để phân cụm
Stability AnalysisEigenvalue lớn nhất quyết định tính ổn định của hệ thống

1.5 Thực hành Eigenvalue/Eigenvector

Mô tả: Tính eigenvalue và eigenvector của ma trận, verify kết quả bằng công thức Av=λvA\mathbf{v} = \lambda\mathbf{v}.

Python
1import numpy as np
2
3# Ma trận 2x2
4A = np.array([[4, 2],
5 [1, 3]])
6
7print("Ma trận A:")
8print(A)
9
10# Tính eigenvalues và eigenvectors
11eigenvalues, eigenvectors = np.linalg.eig(A)
12
13print(f"\nEigenvalues: {eigenvalues}")
14print(f"\nEigenvectors:\n{eigenvectors}")
15
16# Verify: A*v = lambda*v
17for i in range(len(eigenvalues)):
18 v = eigenvectors[:, i]
19 lambda_val = eigenvalues[i]
20
21 Av = A @ v
22 lambda_v = lambda_val * v
23
24 print(f"\nEigenvector {i+1}: {v}")
25 print(f"A @ v = {Av}")
26 print(f"λ × v = {lambda_v}")
27 print(f"Equal? {np.allclose(Av, lambda_v)}")

Giải thích chi tiết:

  • np.linalg.eig(A): Tính eigenvalues và eigenvectors của ma trận vuông A

    • Return: (eigenvalues, eigenvectors) - tuple 2 phần tử
    • eigenvalues: array 1D chứa các eigenvalue
    • eigenvectors: ma trận 2D, mỗi cột là 1 eigenvector
  • eigenvectors[:, i]: Lấy cột thứ i (eigenvector thứ i)

  • Verify công thức Av=λvA\mathbf{v} = \lambda\mathbf{v}:

    • Vế trái: A @ v - nhân ma trận với eigenvector
    • Vế phải: lambda_val * v - nhân eigenvalue với eigenvector
    • Nếu đúng: 2 vế bằng nhau (check bằng np.allclose())

Kết quả mong đợi:

  • Ma trận 2×2 có 2 eigenvalues và 2 eigenvectors
  • Công thức Av=λvA\mathbf{v} = \lambda\mathbf{v} được verify thành công
  • Eigenvectors chỉ ra các hướng đặc trưng của ma trận A

1.6 Matrix Inverse và Determinant

Determinant (Định thức):

det(A)=A\det(A) = |A|

Ý nghĩa:

  • Determinant = 0 → Ma trận singular (không khả nghịch)
  • Determinant ≠ 0 → Ma trận invertible (khả nghịch)
  • Determinant đo "thể tích" biến đổi khi nhân ma trận

Matrix Inverse (Ma trận nghịch đảo):

A×A1=A1×A=IA \times A^{-1} = A^{-1} \times A = I

Ý nghĩa:

  • A1A^{-1} là ma trận "hoàn tác" phép biến đổi của A
  • Chỉ tồn tại khi det(A)0\det(A) \neq 0
  • Ứng dụng: Giải hệ phương trình Ax=bA\mathbf{x} = \mathbf{b}x=A1b\mathbf{x} = A^{-1}\mathbf{b}

Mô tả: Tính determinant và inverse của ma trận, verify tính chất A×A1=IA \times A^{-1} = I.

Python
1import numpy as np
2
3# Ma trận 3x3
4A = np.array([[1, 2, 3],
5 [0, 1, 4],
6 [5, 6, 0]])
7
8print("Ma trận A:")
9print(A)
10
11# Tính determinant
12det_A = np.linalg.det(A)
13print(f"\nDeterminant của A: {det_A:.2f}")
14
15# Kiểm tra khả nghịch
16if det_A != 0:
17 print("Ma trận khả nghịch (invertible)")
18
19 # Tính inverse
20 A_inv = np.linalg.inv(A)
21 print(f"\nMa trận nghịch đảo A⁻¹:")
22 print(A_inv)
23
24 # Verify: A @ A_inv = I (identity matrix)
25 I = A @ A_inv
26 print(f"\nA @ A⁻¹:")
27 print(I)
28 print(f"\nĐây có phải ma trận đơn vị? {np.allclose(I, np.eye(3))}")
29else:
30 print("Ma trận singular (không khả nghịch)")

Giải thích chi tiết:

  • np.linalg.det(A): Tính định thức của ma trận A

    • Ma trận 2×2: det(A)=adbc\det(A) = ad - bc với A=[abcd]A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}
    • Ma trận lớn hơn: dùng thuật toán LU decomposition
  • np.linalg.inv(A): Tính ma trận nghịch đảo

    • Chỉ hoạt động khi det(A) ≠ 0
    • Nếu det(A) = 0: raise LinAlgError (singular matrix)
  • Ma trận đơn vị II: đường chéo = 1, phần còn lại = 0

    • np.eye(n): tạo ma trận đơn vị kích thước n×n
  • Verify tính chất A×A1=IA \times A^{-1} = I:

    • Nếu đúng: kết quả là ma trận đơn vị
    • Dùng np.allclose() để so sánh (tránh floating-point errors)

Kết quả mong đợi:

  • Determinant khác 0 → ma trận khả nghịch
  • A×A1A \times A^{-1} cho ma trận đơn vị với 1 trên đường chéo, 0 ở ngoài

Checkpoint

Bạn đã nắm vững vector, ma trận và các phép toán cơ bản chưa?

4

📊 Thống kê cơ bản (Statistics)

TB5 min

2.1 Các độ đo tập trung (Measures of Central Tendency)

Độ đoCông thứcÝ nghĩa
Mean (Trung bình)xˉ=1ni=1nxi\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_iGiá trị trung bình cộng - tổng chia cho số phần tử
Median (Trung vị)Giá trị giữaKhông bị ảnh hưởng bởi outliers (giá trị ngoại lai)
Mode (Đỉnh)Giá trị xuất hiện nhiều nhấtPhù hợp cho dữ liệu phân loại (categorical data)

2.2 Các độ đo phân tán (Measures of Dispersion)

Variance (Phương sai):

σ2=1ni=1n(xixˉ)2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^2

Ý nghĩa: Phương sai đo lường mức độ phân tán của dữ liệu quanh giá trị trung bình. Phương sai lớn = dữ liệu phân tán rộng, nhỏ = dữ liệu tập trung.

Standard Deviation (Độ lệch chuẩn):

σ=σ2\sigma = \sqrt{\sigma^2}

Ý nghĩa: Độ lệch chuẩn là căn bậc 2 của phương sai, cùng đơn vị với dữ liệu gốc (dễ hiểu và diễn giải hơn). Ví dụ: Nếu data là chiều cao (cm), độ lệch chuẩn cũng là cm.

💡 Phân biệt:

  • Phương sai: Đơn vị bình phương (ví dụ: cm²) - khó diễn giải
  • Độ lệch chuẩn: Cùng đơn vị với data (ví dụ: cm) - dễ hiểu hơn

2.3 Ví dụ tính toán step-by-step

Dữ liệu: [2, 4, 4, 4, 5, 5, 7, 9]

Tính Mean (Trung bình): xˉ=2+4+4+4+5+5+7+98=408=5\bar{x} = \frac{2+4+4+4+5+5+7+9}{8} = \frac{40}{8} = 5

Tính Variance (Phương sai): σ2=(25)2+(45)2+...+(95)28=9+1+1+1+0+0+4+168=4\sigma^2 = \frac{(2-5)^2 + (4-5)^2 + ... + (9-5)^2}{8} = \frac{9+1+1+1+0+0+4+16}{8} = 4

Tính Standard Deviation (Độ lệch chuẩn): σ=4=2\sigma = \sqrt{4} = 2

Giải thích:

  • Mean = 5: Giá trị trung bình của dataset
  • Variance = 4: Dữ liệu phân tán với phương sai 4
  • Std = 2: Trung bình các giá trị lệch khoảng 2 đơn vị so với mean

2.4 Thực hành với NumPy

Mô tả: Tính các chỉ số thống kê mô tả (descriptive statistics) cho dataset.

Python
1import numpy as np
2
3data = np.array([2, 4, 4, 4, 5, 5, 7, 9])
4
5print(f"Mean: {np.mean(data)}")
6print(f"Median: {np.median(data)}")
7print(f"Variance: {np.var(data)}")
8print(f"Std: {np.std(data)}")
9print(f"Min: {np.min(data)}")
10print(f"Max: {np.max(data)}")
11print(f"Percentile 25: {np.percentile(data, 25)}")
12print(f"Percentile 75: {np.percentile(data, 75)}")

Giải thích:

  • np.mean(): Trung bình cộng = xin\frac{\sum x_i}{n} = 5.0
  • np.median(): Giá trị giữa khi sắp xếp tăng dần (không bị outliers ảnh hưởng) = 4.5
  • np.var(): Phương sai = mức độ phân tán data = 4.0
  • np.std(): Độ lệch chuẩn = variance\sqrt{variance} (cùng đơn vị với data) = 2.0
  • np.percentile(data, 25): Quartile 1 (Q1) - 25% data nhỏ hơn giá trị này = 4.0
  • np.percentile(data, 75): Quartile 3 (Q3) - 75% data nhỏ hơn giá trị này = 5.5

💡 Ứng dụng: Feature engineering, outlier detection, data normalization

Checkpoint

Bạn đã hiểu rõ mean, variance, standard deviation và cách sử dụng chưa?

5

📈 Giải tích (Calculus) cho Machine Learning

TB5 min

3.1 Đạo hàm (Derivatives)

Định nghĩa:

Đạo hàm của hàm f(x)f(x) tại điểm xx là:

f(x)=limh0f(x+h)f(x)hf'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}

Ý nghĩa:

  • Đạo hàm = tốc độ thay đổi của hàm số
  • Ứng dụng ML: Tính gradient để tối ưu loss function

Các quy tắc đạo hàm cơ bản:

Hàm sốĐạo hàmVí dụ
f(x)=cf(x) = c (hằng số)f(x)=0f'(x) = 0f(x)=5f(x)=0f(x) = 5 \Rightarrow f'(x) = 0
f(x)=xnf(x) = x^nf(x)=nxn1f'(x) = nx^{n-1}f(x)=x2f(x)=2xf(x) = x^2 \Rightarrow f'(x) = 2x
f(x)=exf(x) = e^xf(x)=exf'(x) = e^xĐạo hàm của exe^x là chính nó
f(x)=ln(x)f(x) = \ln(x)f(x)=1xf'(x) = \frac{1}{x}Log tự nhiên
f(x)=sin(x)f(x) = \sin(x)f(x)=cos(x)f'(x) = \cos(x)Hàm lượng giác

Chain Rule (Quy tắc chuỗi):

ddx[f(g(x))]=f(g(x))g(x)\frac{d}{dx}[f(g(x))] = f'(g(x)) \cdot g'(x)

Ứng dụng: Backpropagation trong Neural Networks

3.2 Gradient (Vector đạo hàm)

Định nghĩa:

Với hàm nhiều biến f(x1,x2,...,xn)f(x_1, x_2, ..., x_n), gradient là vector các đạo hàm riêng:

f=[fx1fx2fxn]\nabla f = \begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \vdots \\ \frac{\partial f}{\partial x_n} \end{bmatrix}

Ý nghĩa:

  • Gradient chỉ hướng tăng nhanh nhất của hàm số
  • Negative gradient chỉ hướng giảm nhanh nhất
  • Ứng dụng: Gradient Descent tối ưu model

Ví dụ: Hàm f(x,y)=x2+y2f(x, y) = x^2 + y^2

f=[fxfy]=[2x2y]\nabla f = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix} = \begin{bmatrix} 2x \\ 2y \end{bmatrix}

Tại điểm (1,2)(1, 2): gradient = [24]\begin{bmatrix} 2 \\ 4 \end{bmatrix} → hàm tăng nhanh nhất theo hướng này.

3.3 Gradient Descent

Ý tưởng:

Tìm minimum của hàm f(x)f(x) bằng cách di chuyển ngược hướng gradient:

xnew=xoldαf(xold)x_{new} = x_{old} - \alpha \nabla f(x_{old})

Trong đó:

  • α\alpha: Learning rate (tốc độ học) - quyết định bước nhảy
  • f\nabla f: Gradient tại điểm hiện tại
  • Lặp đến khi hội tụ (gradient ≈ 0)

Tại sao hiệu quả?

  • Gradient chỉ hướng tăng nhanh nhất
  • Di chuyển ngược gradient (negative) → đi về minimum

⚠️ Lưu ý quan trọng về Learning Rate:

Learning RateVấn đềGiải pháp
Quá lớn (α > 0.5)Overshooting, không hội tụGiảm α xuống 0.01-0.1
Quá nhỏ (α < 0.001)Hội tụ chậm, cần nhiều iterationsTăng α hoặc dùng adaptive learning rate
Phù hợp (α = 0.01-0.1)Hội tụ ổn định

Ví dụ minh họa: Tìm minimum của f(x)=x2f(x) = x^2

Bước 1: Tính đạo hàm: f(x)=2xf'(x) = 2x

Bước 2: Update rule: xnew=xoldα2xoldx_{new} = x_{old} - \alpha \cdot 2x_{old}

Bước 3: Lặp:

  • Start: x=10x = 10, learning rate α=0.1\alpha = 0.1
  • Iteration 1: x=100.1×20=8x = 10 - 0.1 \times 20 = 8
  • Iteration 2: x=80.1×16=6.4x = 8 - 0.1 \times 16 = 6.4
  • Iteration 3: x=6.40.1×12.8=5.12x = 6.4 - 0.1 \times 12.8 = 5.12
  • ...
  • Convergence: x0x \to 0 (minimum của x2x^2)

3.4 Thực hành Gradient Descent

Mô tả: Implement Gradient Descent từ scratch để tìm minimum của f(x)=(x3)2f(x) = (x-3)^2.

Python
1import numpy as np
2import matplotlib.pyplot as plt
3
4# Hàm số: f(x) = (x-3)^2
5def f(x):
6 return (x - 3)**2
7
8# Đạo hàm: f'(x) = 2(x-3)
9def df(x):
10 return 2 * (x - 3)
11
12# Gradient Descent
13x = 10 # Điểm bắt đầu
14learning_rate = 0.1
15iterations = 20
16
17history = [x] # Lưu lại quá trình
18
19for i in range(iterations):
20 gradient = df(x)
21 x = x - learning_rate * gradient
22 history.append(x)
23 print(f"Iteration {i+1}: x = {x:.4f}, f(x) = {f(x):.4f}, gradient = {gradient:.4f}")
24
25print(f"\nMinimum tìm được tại x = {x:.4f}")
26print(f"Giá trị minimum: f({x:.4f}) = {f(x):.4f}")
27
28# Visualize
29plt.figure(figsize=(12, 4))
30
31# Plot 1: Function curve
32plt.subplot(1, 2, 1)
33x_range = np.linspace(0, 10, 100)
34plt.plot(x_range, f(x_range), 'b-', label='f(x) = (x-3)²')
35plt.scatter(history, [f(h) for h in history], c='red', s=30, zorder=5)
36plt.plot(history, [f(h) for h in history], 'r--', alpha=0.5)
37plt.xlabel('x')
38plt.ylabel('f(x)')
39plt.title('Gradient Descent Path')
40plt.legend()
41plt.grid(True)
42
43# Plot 2: Convergence
44plt.subplot(1, 2, 2)
45plt.plot([f(h) for h in history], 'ro-')
46plt.xlabel('Iteration')
47plt.ylabel('f(x)')
48plt.title('Loss Convergence')
49plt.grid(True)
50
51plt.tight_layout()
52plt.show()

Giải thích chi tiết:

Thuật toán:

  1. Khởi tạo: x=10x = 10 (điểm bắt đầu tùy ý)
  2. Tính gradient: f(x)=2(x3)f'(x) = 2(x-3) tại điểm hiện tại
  3. Update: xnew=xαf(x)x_{new} = x - \alpha \cdot f'(x) với α=0.1\alpha = 0.1
  4. Lặp: Repeat cho đến khi hội tụ

Code breakdown:

  • df(x): Đạo hàm của hàm số - chỉ hướng tăng
  • x - learning_rate * gradient: Di chuyển ngược gradient để giảm
  • learning_rate = 0.1: Bước nhảy mỗi iteration
    • Quá lớn: overshooting (vượt qua minimum)
    • Quá nhỏ: hội tụ chậm
  • history: Lưu tất cả giá trị x qua các iterations để visualize

Visualization:

  • Plot 1: Đường cong hàm số + path của Gradient Descent (điểm đỏ)
  • Plot 2: Loss giảm dần theo iterations (convergence curve)

Kết quả mong đợi:

  • Sau 20 iterations: x3.0x \approx 3.0 (minimum thực tế của (x3)2(x-3)^2)
  • Loss giảm từ (103)2=49(10-3)^2 = 49 về gần 0

💡 Tại sao quan trọng?

  • Machine Learning: Tối ưu weights để minimize loss function
  • Deep Learning: Backpropagation = Chain Rule + Gradient Descent
  • Real-world: SGD, Adam, RMSprop đều dựa trên Gradient Descent

Checkpoint

Bạn đã hiểu Gradient Descent hoạt động như thế nào chưa?

6

🔗 Covariance và Correlation

TB5 min

3.1 Covariance (Hiệp phương sai)

Cov(X,Y)=1ni=1n(xixˉ)(yiyˉ)Cov(X, Y) = \frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})

Ý nghĩa: Covariance đo lường mối quan hệ tuyến tính giữa 2 biến số:

  • Cov>0Cov > 0: Tương quan thuận (X tăng → Y tăng)
  • Cov<0Cov < 0: Tương quan nghịch (X tăng → Y giảm)
  • Cov=0Cov = 0: Không tương quan tuyến tính

💡 Lưu ý: Covariance phụ thuộc vào scale của data (khó so sánh giữa các biến khác nhau).

3.2 Correlation (Hệ số tương quan Pearson)

r=Cov(X,Y)σXσYr = \frac{Cov(X, Y)}{\sigma_X \sigma_Y}

Ý nghĩa: Correlation là chuẩn hóa Covariance về khoảng [-1, 1], không phụ thuộc scale.

Giá trị rÝ nghĩa
r = 1Tương quan thuận hoàn hảo (X và Y tăng cùng nhịp)
r = -1Tương quan nghịch hoàn hảo (X tăng, Y giảm)
r = 0Không tương quan tuyến tính
0.7 < r < 1Tương quan mạnh
0.3 < r < 0.7Tương quan vừa
r < 0.3Tương quan yếu

💡 Phân biệt:

  • Covariance: Đo hướng quan hệ (dương/âm), phụ thuộc scale
  • Correlation: Chuẩn hóa về [-1, 1], dễ diễn giải và so sánh hơn

3.3 Thực hành

Mô tả: Đo lường mối quan hệ giữa 2 biến X và Y.

Python
1import numpy as np
2
3X = np.array([1, 2, 3, 4, 5])
4Y = np.array([2, 4, 5, 4, 5])
5
6# Covariance
7cov_matrix = np.cov(X, Y)
8print(f"Covariance Matrix:\n{cov_matrix}")
9
10# Correlation
11corr_matrix = np.corrcoef(X, Y)
12print(f"Correlation Matrix:\n{corr_matrix}")
13print(f"Correlation coefficient: {corr_matrix[0, 1]:.4f}")

Giải thích:

  • np.cov(X, Y): Trả về ma trận covariance 2x2: [[Var(X), Cov(X,Y)], [Cov(Y,X), Var(Y)]]
  • cov_matrix[0, 1]: Covariance giữa X và Y (phần tử off-diagonal)
  • np.corrcoef(X, Y): Correlation matrix (chuẩn hóa covariance về [-1, 1])
  • corr_matrix[0, 1]: Pearson correlation coefficient

Kết quả mong đợi:

  • Covariance > 0 vì X và Y có xu hướng tăng cùng nhau
  • Correlation gần 1 cho thấy mối quan hệ thuận mạnh
7

🎲 Phân phối Xác suất (Probability Distributions)

TB5 min

4.1 Normal Distribution (Phân phối chuẩn / Gaussian)

f(x)=1σ2πe(xμ)22σ2f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}

Trong đó:

  • μ\mu: Mean (trung bình) - vị trí trung tâm
  • σ\sigma: Standard deviation (độ lệch chuẩn) - độ rộng phân phối

Đặc điểm:

  • Hình chuông (bell curve), đối xứng quanh μ\mu
  • 68% data nằm trong [μσ,μ+σ][\mu - \sigma, \mu + \sigma]
  • 95% data nằm trong [μ2σ,μ+2σ][\mu - 2\sigma, \mu + 2\sigma]
  • 99.7% data nằm trong [μ3σ,μ+3σ][\mu - 3\sigma, \mu + 3\sigma] (quy tắc 68-95-99.7)

Normal Distribution

Hình: Normal Distribution với các giá trị sigma khác nhau

💡 Ứng dụng trong ML:

  • Gaussian Naive Bayes classifier
  • Weight initialization trong Neural Networks
  • Noise modeling (giả định nhiễu là Gaussian)

4.2 Bayes' Theorem (Định lý Bayes)

Công thức:

P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}

Trong đó:

  • P(AB)P(A|B): Posterior - xác suất A xảy ra khi biết B đã xảy ra
  • P(BA)P(B|A): Likelihood - xác suất B xảy ra khi biết A đã xảy ra
  • P(A)P(A): Prior - xác suất ban đầu của A
  • P(B)P(B): Evidence - xác suất B xảy ra (normalization constant)

Ý nghĩa: Bayes' Theorem cho phép cập nhật xác suất khi có thông tin mới (từ Prior → Posterior).

Ví dụ thực tế: Medical Test

Bài toán:

  • Bệnh X xuất hiện ở 1% dân số: P(Disease)=0.01P(Disease) = 0.01
  • Test có độ chính xác 95%: P(PositiveDisease)=0.95P(Positive | Disease) = 0.95
  • False positive rate 5%: P(PositiveNoDisease)=0.05P(Positive | No Disease) = 0.05

Câu hỏi: Nếu test dương tính, xác suất thực sự bị bệnh là bao nhiêu?

Giải:

P(DiseasePositive)=P(PositiveDisease)P(Disease)P(Positive)P(Disease | Positive) = \frac{P(Positive | Disease) \cdot P(Disease)}{P(Positive)}

Tính P(Positive)P(Positive) (Law of Total Probability):

P(Positive)=P(PositiveDisease)P(Disease)+P(PositiveNoDisease)P(NoDisease)P(Positive) = P(Positive | Disease) \cdot P(Disease) + P(Positive | No Disease) \cdot P(No Disease)

P(Positive)=0.95×0.01+0.05×0.99=0.0095+0.0495=0.059P(Positive) = 0.95 \times 0.01 + 0.05 \times 0.99 = 0.0095 + 0.0495 = 0.059

Thay vào Bayes:

P(DiseasePositive)=0.95×0.010.059=0.00950.0590.161=16.1%P(Disease | Positive) = \frac{0.95 \times 0.01}{0.059} = \frac{0.0095}{0.059} \approx 0.161 = 16.1\%

Kết luận: Mặc dù test dương tính, xác suất thực sự bị bệnh chỉ 16.1% (không phải 95%!). Lý do: bệnh hiếm (prior thấp), nên false positives chiếm đa số.

💡 Bài học:

  • Prior quan trọng - bệnh hiếm thì posterior cũng thấp dù test chính xác
  • Đừng nhầm P(AB)P(A|B) với P(BA)P(B|A) (prosecutor's fallacy)

Key Takeaways - Bayes' Theorem:

  1. Prior matters: Base rate ảnh hưởng lớn đến kết quả
  2. Update beliefs: Bayes cho phép cập nhật xác suất khi có info mới
  3. Real-world applications:
    • Medical diagnosis (test dương tính ≠ bệnh)
    • Spam filtering (từ "free" ≠ spam 100%)
    • A/B testing (kết quả tốt ≠ version thắng chắc chắn)

4.3 Thực hành Bayes' Theorem

Mô tả: Simulate medical test với 10,000 người để verify công thức Bayes.

Python
1import numpy as np
2import matplotlib.pyplot as plt
3
4# Parameters
5n_people = 10000
6disease_rate = 0.01
7true_positive = 0.95 # P(Positive | Disease)
8false_positive = 0.05 # P(Positive | No Disease)
9
10# Simulate population
11has_disease = np.random.rand(n_people) < disease_rate
12
13# Test results
14test_result = np.zeros(n_people, dtype=bool)
15for i in range(n_people):
16 if has_disease[i]:
17 test_result[i] = np.random.rand() < true_positive
18 else:
19 test_result[i] = np.random.rand() < false_positive
20
21# Calculate P(Disease | Positive)
22positive_tests = test_result
23positive_and_diseased = positive_tests & has_disease
24
25p_disease_given_positive = positive_and_diseased.sum() / positive_tests.sum()
26
27print(f"Tổng số người: {n_people}")
28print(f"Số người bị bệnh: {has_disease.sum()} ({has_disease.mean()*100:.1f}%)")
29print(f"Số test dương tính: {positive_tests.sum()}")
30print(f"Số test dương tính VÀ bị bệnh: {positive_and_diseased.sum()}")
31print(f"\nP(Disease | Positive) = {p_disease_given_positive:.4f} ({p_disease_given_positive*100:.1f}%)")
32
33# Theoretical value
34p_positive = true_positive * disease_rate + false_positive * (1 - disease_rate)
35p_disease_given_positive_theory = (true_positive * disease_rate) / p_positive
36print(f"Theoretical P(Disease | Positive) = {p_disease_given_positive_theory:.4f} ({p_disease_given_positive_theory*100:.1f}%)")
37
38# Visualization
39fig, axes = plt.subplots(1, 2, figsize=(12, 4))
40
41# Plot 1: Confusion Matrix
42categories = ['True Negative', 'False Positive', 'False Negative', 'True Positive']
43counts = [
44 (~has_disease & ~test_result).sum(),
45 (~has_disease & test_result).sum(),
46 (has_disease & ~test_result).sum(),
47 (has_disease & test_result).sum()
48]
49colors = ['green', 'orange', 'red', 'blue']
50axes[0].bar(categories, counts, color=colors, alpha=0.7)
51axes[0].set_ylabel('Count')
52axes[0].set_title('Confusion Matrix')
53axes[0].tick_params(axis='x', rotation=45)
54
55# Plot 2: Conditional Probabilities
56probs = {
57 'Prior\nP(Disease)': disease_rate,
58 'Likelihood\nP(Pos|Disease)': true_positive,
59 'Posterior\nP(Disease|Pos)': p_disease_given_positive
60}
61axes[1].bar(probs.keys(), probs.values(), color=['blue', 'green', 'red'], alpha=0.7)
62axes[1].set_ylabel('Probability')
63axes[1].set_title("Bayes' Theorem: Prior → Posterior")
64axes[1].set_ylim(0, 1)
65
66plt.tight_layout()
67plt.show()

Giải thích chi tiết:

Simulation:

  1. Generate population: 10,000 người, 1% bị bệnh (100 người)
  2. Test sick people: 95% test dương tính (TP), 5% test âm tính (FN)
  3. Test healthy people: 5% test dương tính (FP), 95% test âm tính (TN)
  4. Calculate posterior: Trong tất cả test dương tính, bao nhiêu % thực sự bị bệnh?

Code breakdown:

  • has_disease: Boolean array - True nếu bị bệnh
  • test_result: Boolean array - True nếu test dương tính
  • positive_and_diseased: Bitwise AND - True khi cả 2 điều kiện đúng
  • positive_and_diseased.sum() / positive_tests.sum(): P(DiseasePositive)P(Disease | Positive)

Visualization:

  • Plot 1: Confusion matrix - phân loại 4 trường hợp
    • TP (True Positive): Bệnh + Test dương tính ✅
    • TN (True Negative): Không bệnh + Test âm tính ✅
    • FP (False Positive): Không bệnh + Test dương tính ❌
    • FN (False Negative): Bệnh + Test âm tính ❌
  • Plot 2: So sánh Prior (1%) → Posterior (16.1%)

Kết quả mong đợi:

  • Simulated posterior ≈ 16.1% (khớp với theoretical value)
  • Visualization cho thấy FP (false positive) nhiều hơn TP do bệnh hiếm

💡 Ứng dụng trong ML:

  • Naive Bayes Classifier: Phân loại văn bản, spam detection
  • Bayesian Optimization: Hyperparameter tuning
  • A/B Testing: Cập nhật belief khi có data mới

4.4 Thực hành Normal Distribution

Mô tả: Sinh data từ phân phối Gaussian và visualize để hiểu đặc điểm.

Python
1import numpy as np
2import matplotlib.pyplot as plt
3from scipy import stats
4
5# Tạo data từ normal distribution
6mu, sigma = 0, 1
7data = np.random.normal(mu, sigma, 1000)
8
9# Visualize
10plt.figure(figsize=(10, 4))
11plt.hist(data, bins=30, density=True, alpha=0.7)
12x = np.linspace(-4, 4, 100)
13plt.plot(x, stats.norm.pdf(x, mu, sigma), 'r-', lw=2)
14plt.title('Normal Distribution')
15plt.xlabel('Value')
16plt.ylabel('Density')
17plt.show()

Giải thích:

  • np.random.normal(mu, sigma, 1000): Sinh 1000 samples từ N(μ,σ2)N(\mu, \sigma^2)
  • bins=30: Chia histogram thành 30 bins
  • density=True: Normalize histogram thành density (tổng diện tích = 1)
  • stats.norm.pdf(x, mu, sigma): Tính giá trị hàm mật độ (PDF) tại mỗi x
  • Đường cong đỏ: Hàm mật độ lý thuyết của Normal Distribution

Kết quả mong đợi: Histogram khớp với đường cong lý thuyết (hình chuông)

Checkpoint

Bạn đã hiểu về Normal Distribution và cách sử dụng chưa?

8

⚖️ Feature Scaling (Chuẩn hóa Đặc trưng)

TB5 min

5.1 Tại sao cần Scaling?

Vấn đềGiải pháp
Features có scale khác nhau (ví dụ: tuổi 0-100, lương 0-100M)Standardization
Gradient descent hội tụ chậmFeature scaling
Distance-based models bị bias (KNN, K-Means)Normalization

💡 Ví dụ: Nếu feature "tuổi" (20-60) và "lương" (5M-50M), lương sẽ chi phối model vì giá trị lớn hơn nhiều.

5.2 Các phương pháp Scaling

Standardization (Z-score Normalization):

z=xμσz = \frac{x - \mu}{\sigma}

Ý nghĩa: Biến đổi data về phân phối chuẩn với mean = 0, std = 1. Giữ được hình dạng phân phối, không bị outliers ảnh hưởng nhiều.

Min-Max Normalization:

xnorm=xxminxmaxxminx_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}}

Ý nghĩa: Co giãn data về khoảng [0, 1]. Giữ nguyên khoảng cách tương đối, nhưng rất nhạy với outliers.

💡 Khi nào dùng gì:

  • StandardScaler: Neural Networks, Logistic Regression, SVM
  • MinMaxScaler: Image data (0-255 → 0-1), KNN, algorithms nhạy với range
  • RobustScaler: Data có nhiều outliers (dùng median và IQR)

5.3 Thực hành

Mô tả: So sánh StandardScaler và MinMaxScaler trên data có scale khác biệt lớn.

Python
1from sklearn.preprocessing import StandardScaler, MinMaxScaler
2import numpy as np
3
4# Data: feature 1 (1-4), feature 2 (200-800)
5X = np.array([[1, 200],
6 [2, 400],
7 [3, 600],
8 [4, 800]])
9
10print("Original data:")
11print(X)
12
13# StandardScaler
14scaler_std = StandardScaler()
15X_std = scaler_std.fit_transform(X)
16print(f"\nStandardized (mean=0, std=1):")
17print(X_std)
18print(f"Mean: {X_std.mean(axis=0)}")
19print(f"Std: {X_std.std(axis=0)}")
20
21# MinMaxScaler
22scaler_mm = MinMaxScaler()
23X_mm = scaler_mm.fit_transform(X)
24print(f"\nMin-Max Normalized (range [0,1]):")
25print(X_mm)
26print(f"Min: {X_mm.min(axis=0)}")
27print(f"Max: {X_mm.max(axis=0)}")

Giải thích chi tiết:

StandardScaler:

  • fit(): Tính mean μ\mu và std σ\sigma từ training data
  • transform(): Áp dụng công thức z=xμσz = \frac{x - \mu}{\sigma} cho mỗi feature
  • Kết quả: Mỗi feature có mean=0, std=1
  • Ưu điểm: Giữ hình dạng phân phối, ít bị outliers ảnh hưởng

MinMaxScaler:

  • fit(): Tìm xminx_{min}xmaxx_{max} từ training data
  • transform(): Áp dụng xnorm=xxminxmaxxminx_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}}
  • Kết quả: Mỗi feature trong khoảng [0, 1]
  • Nhược điểm: Rất nhạy với outliers (outlier làm biến dạng toàn bộ data)

Kết quả mong đợi:

  • StandardScaler: Mỗi cột có mean ≈ 0, std ≈ 1
  • MinMaxScaler: Mỗi cột trong [0, 1], giá trị nhỏ nhất = 0, lớn nhất = 1

📝 Quiz: Kiểm tra kiến thức

Câu 1: Đạo hàm của f(x)=x3+2xf(x) = x^3 + 2x là gì?

Đáp án: f(x)=3x2+2f'(x) = 3x^2 + 2

Giải thích: Áp dụng quy tắc ddx(xn)=nxn1\frac{d}{dx}(x^n) = nx^{n-1}:

  • ddx(x3)=3x2\frac{d}{dx}(x^3) = 3x^2
  • ddx(2x)=2\frac{d}{dx}(2x) = 2
Câu 2: Ma trận nào sau đây là ma trận đơn vị (identity matrix)?

A) [1000]\begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix}

B) [1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}

C) [0110]\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}

Đáp án: B - Đường chéo = 1, phần còn lại = 0

Câu 3: Nếu Correlation coefficient r = -0.9, điều này có nghĩa gì?

Đáp án: Tương quan nghịch mạnh - khi X tăng, Y giảm

Giải thích:

  • r=1r = 1: Tương quan thuận hoàn hảo
  • r=1r = -1: Tương quan nghịch hoàn hảo
  • r>0.7|r| > 0.7: Tương quan mạnh
  • r=0.9r = -0.9: Gần -1 → tương quan nghịch rất mạnh
Câu 4: Trong Gradient Descent, learning rate α quá lớn sẽ gây ra vấn đề gì?

Đáp án: Overshooting - vượt qua minimum, không hội tụ

Giải thích:

  • α quá lớn → bước nhảy quá xa → vượt qua điểm tối ưu
  • α quá nhỏ → hội tụ chậm, nhiều iterations
  • Cần chọn α phù hợp (ví dụ: 0.01 - 0.1)
Câu 5: Determinant của ma trận A=[2143]A = \begin{bmatrix} 2 & 1 \\ 4 & 3 \end{bmatrix} là bao nhiêu?

Đáp án: det(A)=2×31×4=64=2\det(A) = 2 \times 3 - 1 \times 4 = 6 - 4 = 2

Giải thích: Công thức ma trận 2×2: det[abcd]=adbc\det \begin{bmatrix} a & b \\ c & d \end{bmatrix} = ad - bc

Câu 6: Variance của data [2, 4, 4, 4, 5, 5, 7, 9] là bao nhiêu?

Đáp án: 4

Giải thích:

  • Mean: xˉ=2+4+4+4+5+5+7+98=5\bar{x} = \frac{2+4+4+4+5+5+7+9}{8} = 5
  • Variance: σ2=(25)2+...+(95)28=328=4\sigma^2 = \frac{(2-5)^2 + ... + (9-5)^2}{8} = \frac{32}{8} = 4
Câu 7: Theo quy tắc 68-95-99.7 của Normal Distribution, bao nhiêu % data nằm trong khoảng [μ2σ,μ+2σ][\mu - 2\sigma, \mu + 2\sigma]?

Đáp án: 95%

Giải thích:

  • 68% trong [μσ,μ+σ][\mu - \sigma, \mu + \sigma]
  • 95% trong [μ2σ,μ+2σ][\mu - 2\sigma, \mu + 2\sigma]
  • 99.7% trong [μ3σ,μ+3σ][\mu - 3\sigma, \mu + 3\sigma]
Câu 8: Trong Bayes' Theorem, Prior là gì?

Đáp án: Xác suất ban đầu (trước khi có evidence)

Giải thích: P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}

  • Prior P(A)P(A): Xác suất ban đầu của A
  • Likelihood P(BA)P(B|A): Xác suất B khi biết A
  • Posterior P(AB)P(A|B): Xác suất A khi biết B (sau khi cập nhật)
Câu 9: StandardScaler biến đổi data về phân phối gì?

Đáp án: Mean = 0, Standard Deviation = 1

Giải thích: z=xμσz = \frac{x - \mu}{\sigma} → Standardization về N(0,1)N(0, 1)

Câu 10: Eigenvector của ma trận A thỏa mãn phương trình nào?

Đáp án: Av=λvA\mathbf{v} = \lambda\mathbf{v}

Giải thích:

  • v\mathbf{v}: Eigenvector (hướng không đổi khi nhân ma trận)
  • λ\lambda: Eigenvalue (hệ số co/giãn)
  • Ứng dụng: PCA, Spectral Clustering

Ưu và nhược điểm các phương pháp Scaling

Phương phápƯu điểmNhược điểm
StandardScalerKhông bị ảnh hưởng bởi outliers nhiềuGiá trị không giới hạn (có thể âm hoặc rất lớn)
MinMaxScalerGiá trị trong [0,1], dễ hiểuRất nhạy với outliers
RobustScalerKhông bị ảnh hưởng bởi outliers (Íng dụng median và IQR)Ít phổ biến, tính toán chậm hơn

📚 Tổng kết (Summary)

✅ Những gì đã học

1. Đại số tuyến tính:

  • Vector & Ma trận: Biểu diễn data
  • Phép toán: Cộng, nhân, transpose, dot product
  • Eigenvalue/Eigenvector: PCA, dimensionality reduction
  • Determinant & Inverse: Giải hệ phương trình, kiểm tra khả nghịch

2. Giải tích:

  • Derivatives: Tốc độ thay đổi, quy tắc chuỗi
  • Gradient: Vector đạo hàm riêng
  • Gradient Descent: Thuật toán tối ưu quan trọng nhất ML

3. Thống kê:

  • Central tendency: Mean, Median, Mode
  • Dispersion: Variance, Standard Deviation
  • Covariance & Correlation: Mối quan hệ giữa biến

4. Xác suất:

  • Normal Distribution: Phân phối chuẩn, quy tắc 68-95-99.7
  • Bayes' Theorem: Cập nhật xác suất với evidence mới

5. Feature Scaling:

  • StandardScaler: Mean=0, Std=1
  • MinMaxScaler: Range [0,1]

🎯 Ứng dụng trong ML

ConceptỨng dụng ML
Matrix operationsNeural network forward/backward pass
Eigenvalue/EigenvectorPCA (giảm chiều data)
Gradient DescentTraining tất cả ML models
Normal DistributionGaussian Naive Bayes, weight initialization
Bayes' TheoremProbabilistic models, spam filter
Feature ScalingImprove convergence, distance-based models

💡 Next Steps

  1. Làm quiz phía trên để kiểm tra hiểu biết
  2. Code lại tất cả examples trong NumPy/Python
  3. Đọc lesson tiếp theo: Linear Regression (áp dụng toán học vào thực tế)

🏋️ Bài tập tự luyện

Bài tập 1: Tính mean, variance, std của data: [10, 20, 30, 40, 50]

Hướng dẫn:

Python
1import numpy as np
2data = np.array([10, 20, 30, 40, 50])
3print(f"Mean: {np.mean(data)}")
4print(f"Variance: {np.var(data)}")
5print(f"Std: {np.std(data)}")

Kết quả:

  • Mean = 30
  • Variance = 200
  • Std = 14.14
Bài tập 2: Tính correlation giữa X = [1,2,3,4,5] và Y = [5,4,3,2,1]

Hướng dẫn:

Python
1import numpy as np
2X = np.array([1, 2, 3, 4, 5])
3Y = np.array([5, 4, 3, 2, 1])
4corr = np.corrcoef(X, Y)[0, 1]
5print(f"Correlation: {corr}")

Kết quả: r = -1 (tương quan nghịch hoàn hảo)

Bài tập 3: Implement Gradient Descent để tìm minimum của f(x) = x² + 4x + 4

Hint:

  • Đạo hàm: f'(x) = 2x + 4
  • Update: x = x - α × (2x + 4)
  • Minimum lý thuyết: x = -2, f(-2) = 0

Code template:

Python
1def f(x):
2 return x**2 + 4*x + 4
3
4def df(x):
5 return 2*x + 4
6
7x = 10 # Start
8alpha = 0.1
9for i in range(20):
10 x = x - alpha * df(x)
11 print(f"Iteration {i+1}: x = {x:.4f}, f(x) = {f(x):.4f}")
Bài tập 4: Áp dụng StandardScaler và MinMaxScaler cho dataset

Dataset: Ages = [20, 25, 30, 35, 40]

Hướng dẫn:

Python
1from sklearn.preprocessing import StandardScaler, MinMaxScaler
2import numpy as np
3
4ages = np.array([20, 25, 30, 35, 40]).reshape(-1, 1)
5
6# StandardScaler
7scaler_std = StandardScaler()
8ages_std = scaler_std.fit_transform(ages)
9print(f"Standardized: {ages_std.flatten()}")
10
11# MinMaxScaler
12scaler_mm = MinMaxScaler()
13ages_mm = scaler_mm.fit_transform(ages)
14print(f"Min-Max: {ages_mm.flatten()}")
Bài tập 5: Verify Bayes' Theorem với simulation

Scenario:

  • Disease rate: 0.1% (hiếm hơn ví dụ trên)
  • Test accuracy: 99%
  • False positive: 2%

Question: Nếu test dương tính, xác suất bị bệnh?

Hint: Modify code ví dụ Bayes, thay đổi parameters

Checkpoint

Bạn đã hoàn thành các bài tập thực hành chưa?

9

📝 Tổng Kết

TB5 min

Key Takeaways:

  • 📐 Đại số tuyến tính: Vector, Ma trận, Eigenvalue — nền tảng biểu diễn dữ liệu
  • 📈 Giải tích: Đạo hàm, Gradient Descent — tối ưu hóa model
  • 📊 Thống kê: Mean, Variance, Correlation — hiểu dữ liệu
  • 🎲 Xác suất: Gaussian, Bayes — suy luận trong bất định
  • 💻 NumPy: Code hóa tất cả lý thuyết trên

Tài liệu tham khảo

NguồnLink
NumPy Documentationnumpy.org
Khan Academy - Statisticskhanacademy.org
3Blue1Brown - Linear Algebra3blue1brown.com

Câu hỏi tự kiểm tra

  1. Gradient Descent hoạt động như thế nào và learning rate ảnh hưởng gì đến quá trình hội tụ?
  2. Eigenvalue và Eigenvector có ý nghĩa gì trong Machine Learning (ví dụ: PCA)?
  3. Hãy giải thích Định lý Bayes và cho một ví dụ thực tế về ứng dụng của nó.
  4. Tại sao cần Feature Scaling (StandardScaler, MinMaxScaler) trước khi train model?

🎉 Tuyệt vời! Bạn đã hoàn thành bài học Nền tảng Toán học cho Machine Learning!

Tiếp theo: Cùng học cách Xử lý Dữ liệu với Pandas — bước quan trọng nhất trong ML pipeline!

Checkpoint

Bạn đã nắm vững nền tảng toán học? Sẵn sàng sang bài xử lý dữ liệu!