Skip to content

Trực quan hóa dữ liệu: Matplotlib và Seaborn

This content is not available in your language yet.

Sau bài này, bạn sẽ:

  • Thấu hiểu triết lý trực quan hóa dữ liệu trong phân tích khám phá (Exploratory Data Analysis - EDA) trước khi huấn luyện mô hình học máy.
  • Làm chủ kiến trúc hướng đối tượng của Matplotlib: phân biệt tường minh giữa khung hình tổng thể (Figure) và hệ trục tọa độ (Axes).
  • Nhận biết và lựa chọn chính xác các loại biểu đồ thiết yếu trong AI: biểu đồ đường (theo dõi hàm mất mát), biểu đồ phân tán (không gian đặc trưng), biểu đồ phân phối và biểu đồ nhiệt tương quan.
  • Đọc hiểu biểu đồ huấn luyện để chẩn đoán các trạng thái của mô hình AI: hội tụ, quá khớp (overfitting), hoặc dưới khớp (underfitting).

Trong câu chuyện nổi tiếng về Bộ tứ Anscombe (Anscombe’s quartet), có 4 tập dữ liệu khác nhau sở hữu cùng giá trị trung bình, cùng phương sai, cùng hệ số tương quan và cùng phương trình hồi quy tuyến tính. Tuy nhiên, ngay khi bạn vẽ chúng lên đồ thị:

  • Một tập dữ liệu là đường thẳng mượt mà với nhiễu ngẫu nhiên.
  • Một tập dữ liệu uốn lượn theo hình parabol cong rõ rệt.
  • Một tập dữ liệu bị kéo lệch hoàn toàn bởi một điểm ngoại lai duy nhất!

Nếu chỉ nhìn vào các con số thống kê tóm tắt, bạn sẽ bị dữ liệu “đánh lừa”. Trực quan hóa dữ liệu (Data Visualization) chính là chiếc kính hiển vi giúp bạn:

  1. Phát hiện sớm các dị thường, giá trị lỗi và ngoại lai trước khi đổ dữ liệu vào mạng nơ-ron.
  2. Theo dõi “nhịp tim” của mô hình học máy trong suốt quá trình huấn luyện thông qua các đường cong mất mát (loss curves).

Cấu Trúc Hướng Đối Tượng Của Matplotlib

Phần tiêu đề “Cấu Trúc Hướng Đối Tượng Của Matplotlib”

Matplotlib hỗ trợ hai phong cách viết code: phong cách trạng thái MATLAB (plt.plot(...)) và phong cách hướng đối tượng (Object-Oriented API). Trong các dự án AI chuyên nghiệp, phong cách hướng đối tượng luôn là chuẩn mực:

fig, ax = plt.subplots(figsize=(8, 5))
  • Figure (Khung tranh): Là vùng chứa tổng thể cấp cao nhất. Nó quản lý kích thước khung hình, màu nền, tiêu đề chung và tất cả các đồ thị con (subplots).
  • Axes (Hệ trục tọa độ): Là vùng đồ thị thực sự nằm bên trong Figure. Mỗi Axes sở hữu trục hoành (X-axis), trục tung (Y-axis), các đường chia độ (ticks), nhãn (labels), đường lưới (grid) và các nét vẽ dữ liệu. Một Figure có thể chứa nhiều Axes xếp cạnh nhau (ví dụ: một ô vẽ ảnh, một ô vẽ biểu đồ dự đoán).

Các Biểu Đồ Thiết Yếu Trong Machine Learning

Phần tiêu đề “Các Biểu Đồ Thiết Yếu Trong Machine Learning”

1. Biểu Đồ Đường (Line Plot): Theo Dõi Tiến Trình Huấn Luyện

Phần tiêu đề “1. Biểu Đồ Đường (Line Plot): Theo Dõi Tiến Trình Huấn Luyện”

Biểu đồ đường kết nối các điểm dữ liệu tuần tự theo thời gian hoặc theo chu kỳ huấn luyện (epoch).

  • Trục hoành: Số thứ tự epoch (hoặc số bước cập nhật gradient).
  • Trục tung: Giá trị hàm mất mát (loss) hoặc thước đo hiệu năng (accuracy, F1-score).
  • Ứng dụng: Giám sát tốc độ hội tụ và phát hiện điểm bắt đầu quá khớp giữa tập huấn luyện (train) và tập kiểm định (validation).

2. Biểu Đồ Phân Tán (Scatter Plot): Khám Phá Không Gian Đặc Trưng

Phần tiêu đề “2. Biểu Đồ Phân Tán (Scatter Plot): Khám Phá Không Gian Đặc Trưng”

Biểu đồ phân tán hiển thị từng mẫu dữ liệu dưới dạng một điểm trên mặt phẳng tọa độ hai chiều (x1,x2)(x_1, x_2):

  • Giúp quan sát tương quan phi tuyến giữa hai thuộc tính.
  • Phân biệt các cụm dữ liệu (clusters) trong học không giám sát.
  • Hiển thị ranh giới quyết định (decision boundary) phân tách giữa các lớp phân loại.

3. Histogram và Ước Lượng Mật Độ Kernel (KDE): Kiểm Tra Phân Phối

Phần tiêu đề “3. Histogram và Ước Lượng Mật Độ Kernel (KDE): Kiểm Tra Phân Phối”
  • Histogram: Chia khoảng giá trị thành các thùng (bins) và đếm số lượng mẫu rơi vào mỗi thùng.
  • KDE (Kernel Density Estimation): Làm mượt histogram thành một đường cong mật độ xác suất liên tục.
  • Ứng dụng: Kiểm tra xem phân phối của dữ liệu có tuân theo phân phối chuẩn (Gaussian distribution) hay bị lệch (skewed). Nhiều thuật toán AI (như Linear Regression, PCA) hoạt động tốt nhất khi các đặc trưng đầu vào có phân phối hình chuông đối xứng.

4. Biểu Đồ Hộp (Box Plot): Phát Hiện Ngoại Lai (Outliers)

Phần tiêu đề “4. Biểu Đồ Hộp (Box Plot): Phát Hiện Ngoại Lai (Outliers)”

Biểu đồ hộp tóm tắt dữ liệu qua 5 chỉ số thống kê then chốt:

  • Trung vị (Q2Q_2): Đường vạch ở giữa hộp.
  • Hộp tứ phân vị: Chứa 50% dữ liệu ở giữa, từ Q1Q_1 (phân vị 25%) đến Q3Q_3 (phân vị 75%). Khoảng cách này gọi là IQR=Q3−Q1\text{IQR} = Q_3 - Q_1.
  • Râu (Whiskers): Kéo dài tới giá trị lớn nhất và nhỏ nhất trong khoảng [Q1−1.5×IQR,Q3+1.5×IQR][Q_1 - 1.5 \times \text{IQR}, Q_3 + 1.5 \times \text{IQR}].
  • Các điểm chấm rời rạc nằm ngoài râu chính là các điểm ngoại lai (outliers) cần được kiểm tra kỹ lưỡng.

5. Bản Đồ Nhiệt Tương Quan (Correlation Heatmap)

Phần tiêu đề “5. Bản Đồ Nhiệt Tương Quan (Correlation Heatmap)”

Thư viện Seaborn xây dựng dựa trên Matplotlib và cung cấp hàm sns.heatmap() chuyên dụng:

  • Tính ma trận tương quan giữa tất cả các cặp đặc trưng: corr = df.corr().
  • Biểu diễn bằng các ô màu: màu nóng biểu thị tương quan dương mạnh, màu lạnh biểu thị tương quan âm mạnh.
  • Giúp phát hiện hiện tượng đa cộng tuyến (multicollinearity) để loại bỏ các đặc trưng dư thừa.

Kiến trúc phân cấp Figure và Axes trong Matplotlib:

┌──────────────────────────────────────────────────────────────┐
│ Figure (Khung tranh tổng thể bao bọc) │
│ │
│ ┌────────────────────────────┐ ┌─────────────────────────┐ │
│ │ Axes 1 (Đồ thị Train Loss) │ │ Axes 2 (Đồ thị Val Loss)│ │
│ │ ▲ Loss │ │ ▲ Loss │ │
│ │ │ ╲ │ │ │ ╲ ╱ │ │
│ │ │ ╲ │ │ │ ╲──╱ │ │
│ │ └────────► Epoch │ │ └────────► Epoch │ │
│ └────────────────────────────┘ └─────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

Chẩn đoán hiện tượng quá khớp (Overfitting) qua biểu đồ đường:

Loss
▲
│ Train Loss tiếp tục giảm sâu ──► Mô hình học vẹt tập train
│╲
│ ╲ Điểm dừng sớm (Early Stopping)
│ ╲ ▼
│ ╲───────────┬───────────────
│ ╲ │ ╱
│ ╲─────────┴──╱ ◄─── Val Loss quay đầu tăng (Quá khớp!)
└──────────────────────────────► Epoch

Các ô dưới đây chạy độc lập. Bạn có thể nhấn nút Chạy để xem ngay kết quả đồ thị sinh ra.

Ô thứ nhất vẽ biểu đồ đường theo dõi tiến trình mất mát huấn luyện (Train Loss) và mất mát kiểm định (Val Loss) theo từng epoch với phong cách hướng đối tượng chuẩn mực của Matplotlib:

Biểu đồ đường theo dõi tiến trình mất mát (Loss Curves)

import matplotlib.pyplot as plt
# Dữ liệu mô phỏng quá trình huấn luyện qua 8 epoch
epochs = list(range(1, 9))
train_loss = [0.82, 0.55, 0.38, 0.27, 0.19, 0.14, 0.11, 0.08]
val_loss = [0.85, 0.58, 0.42, 0.33, 0.31, 0.30, 0.32, 0.35]
# Tạo khung hình (Figure) và hệ trục tọa độ (Axes)
fig, ax = plt.subplots(figsize=(6, 4))
# Vẽ đường mất mát huấn luyện (Train) và kiểm định (Val)
ax.plot(epochs, train_loss, marker="o", color="#2563eb", label="Train Loss")
ax.plot(epochs, val_loss, marker="s", color="#dc2626", linestyle="--", label="Val Loss")
# Cấu hình tiêu đề, nhãn trục tọa độ và đường lưới
ax.set_title("Training and Validation Loss per Epoch", fontsize=11)
ax.set_xlabel("Epoch", fontsize=10)
ax.set_ylabel("Loss", fontsize=10)
ax.grid(True, linestyle=":", alpha=0.6)
ax.legend(frameon=True)
plt.tight_layout()
plt.show()

The first run downloads Python, about 10 MB.

Đồ thị cho thấy rõ nét hiện tượng phân kỳ: từ epoch 6 trở đi, trong khi Train Loss tiếp tục đi xuống thì Val Loss lại quay đầu đi lên. Đây là tín hiệu trực quan báo hiệu thời điểm nên dừng huấn luyện (Early Stopping).

Ô thứ hai tạo biểu đồ phân tán không gian hai đặc trưng, phân biệt rõ ràng hai cụm dữ liệu phân loại và đánh dấu tâm phân phối của mỗi cụm:

Biểu đồ phân tán không gian đặc trưng (Feature Space Scatter Plot)

import matplotlib.pyplot as plt
import numpy as np
# Cố định hạt giống ngẫu nhiên để kết quả luôn tái lập
np.random.seed(42)
# Tạo dữ liệu 2 cụm đặc trưng mô phỏng bài toán phân loại
c1_x = np.random.normal(loc=2.0, scale=0.6, size=30)
c1_y = np.random.normal(loc=2.0, scale=0.6, size=30)
c2_x = np.random.normal(loc=4.5, scale=0.7, size=30)
c2_y = np.random.normal(loc=4.5, scale=0.7, size=30)
# Khởi tạo biểu đồ phân tán phân biệt 2 cụm dữ liệu
fig, ax = plt.subplots(figsize=(6, 4))
ax.scatter(c1_x, c1_y, color="#2563eb", alpha=0.8, edgecolors="none", label="Class 0 (Normal)")
ax.scatter(c2_x, c2_y, color="#dc2626", alpha=0.8, edgecolors="none", label="Class 1 (Anomaly)")
# Đánh dấu tâm phân phối của mỗi cụm
ax.scatter([2.0, 4.5], [2.0, 4.5], color="black", marker="x", s=80, linewidths=2, label="Cluster Center")
ax.set_title("Feature Space Scatter Plot", fontsize=11)
ax.set_xlabel("Feature X1", fontsize=10)
ax.set_ylabel("Feature X2", fontsize=10)
ax.grid(True, linestyle=":", alpha=0.5)
ax.legend(frameon=True)
plt.tight_layout()
plt.show()

The first run downloads Python, about 10 MB.

Biểu đồ phân tán giúp trực quan hóa cấu trúc hình học của dữ liệu: hai cụm tách biệt rõ rệt trong không gian đặc trưng, cho phép các mô hình phân loại tuyến tính dễ dàng tìm được mặt phẳng phân cách tối ưu.

Question 1 of 4 Trong kiến trúc hướng đối tượng của Matplotlib, đối tượng Figure và Axes có mối quan hệ cấu trúc như thế nào?
Question 2 of 4 Khi thực hiện phân tích khám phá dữ liệu (EDA), loại biểu đồ nào là công cụ chuẩn mực và trực quan nhất để phát hiện các giá trị ngoại lai (outliers) dựa trên khoảng tứ phân vị (IQR)?
Question 3 of 4 Quan sát biểu đồ quá trình huấn luyện: đường Train Loss liên tục giảm đều đặn về gần 0, trong khi đường Validation Loss giảm tới epoch 6 rồi bắt đầu đảo chiều tăng dần. Biểu đồ này cảnh báo hiện tượng gì?
Question 4 of 4 Trên ma trận nhiệt tương quan (Correlation Heatmap), nếu hai đặc trưng đầu vào có hệ số tương quan Pearson lên tới 0.980.98, vấn đề gì có thể xảy ra và cách xử lý phù hợp là gì?

Ý chính:

  • EDA là bước bắt buộc trước khi áp dụng bất kỳ mô hình học máy nào; trực quan hóa giúp khám phá các mẫu hình mà thống kê tóm tắt bỏ sót.
  • Chuẩn hóa viết mã Matplotlib với API hướng đối tượng: Figure là khung tranh bao quát, Axes là hệ trục chứa biểu đồ cụ thể.
  • Biểu đồ đường giúp theo dõi hàm mất mát và phát hiện sớm các hiện tượng quá khớp hay dưới khớp.
  • Biểu đồ hộp (Box plot) và biểu đồ phân tán (Scatter plot) là công cụ đắc lực để sàng lọc ngoại lai và thấu hiểu không gian đặc trưng.

Đọc thêm:

Content licensed under CC BY-NC-SA 4.0. Code under the MIT license.About