Published on

🧠 Khám phá AI #5: Phân loại trong Học có giám sát

Authors

🧠 Khám phá AI #5: Phân loại trong Học có giám sát

Phân loại là một nhánh chính của học có giám sát tập trung vào việc dự đoán các danh mục hoặc nhãn lớp. Cho dù bạn đang xây dựng bộ phát hiện thư rác hay bộ phân loại bệnh, phân loại có ở khắp mọi nơi.

Trong bài viết này, chúng ta sẽ khám phá cách phân loại hoạt động, các thuật toán phổ biến, hàm mất mát, thước đo đánh giá, và một ví dụ mã thực tế.


🧠 Phân loại là gì?

Phân loại là một tác vụ học có giám sát trong đó mục tiêu là gán đầu vào cho một trong số nhiều danh mục rời rạc.

Ngược lại với hồi quy (dự đoán giá trị liên tục), phân loại xuất ra các nhãn như thư rác / không phải thư rác, mèo / chó, hoặc tích cực / tiêu cực.


📦 Ví dụ thực tế: Phát hiện thư rác Email

  • Đầu vào (X): Nội dung văn bản email, người gửi, dòng chủ đề
  • Đầu ra (Y): Nhãn (Thư rác hoặc Không phải thư rác)
  • Mô hình học từ hàng nghìn email có nhãn để xác định các mẫu thư rác.

🧪 Các loại phân loại

LoạiMô tảVí dụ
Phân loại nhị phânHai lớp có thểPhát hiện thư rác, khối u: lành tính/ác tính
Phân loại đa lớpNhiều hơn hai lớpNhận diện chữ số (0–9), loại động vật
Phân loại đa nhãnGán nhiều nhãn cho một thể hiệnGắn thẻ bài viết với nhiều chủ đề

🔑 Các thuật toán phổ biến

Thuật toánMô tảTốt nhất cho
Hồi quy LogisticBộ phân loại tuyến tính cho nhị phân/đa lớpVăn bản, dữ liệu dạng bảng
Cây quyết địnhPhân chia dựa trên cây theo đặc trưngMô hình có thể giải thích
Rừng ngẫu nhiênTập hợp các câyTác vụ đa lớp mạnh mẽ
Naive BayesMô hình xác suấtLọc thư rác, phân tích cảm xúc
k-NNPhân loại dựa trên láng giềng gần nhấtTập dữ liệu nhỏ
SVMTìm lề tối ưu giữa các lớpDữ liệu nhiều chiều
Mạng nơ-ronMô hình sâu cho dữ liệu phức tạpHình ảnh, âm thanh, văn bản

📉 Hàm mất mát

🔹 Mất mát Cross-Entropy (Log Loss)

Cho phân loại nhị phân:

Loss=[ylog(y^)+(1y)log(1y^)]\text{Loss} = -[y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})]

Cho đa lớp:

Loss=i=1Cyilog(y^i)\text{Loss} = -\sum_{i=1}^{C} y_i \log(\hat{y}_i)

Điều này phạt các dự đoán tự tin nhưng không chính xác nặng hơn.


📊 Thước đo đánh giá

Thước đoTrường hợp sử dụngGhi chú
Độ chính xácTính đúng tổng thểTốt cho tập dữ liệu cân bằng
Độ chính xácTrong số dự đoán tích cực, có bao nhiêu đúngQuan trọng để giảm false positive
Độ nhớTrong số tích cực thực tế, có bao nhiêu được tìm thấyQuan trọng để bắt tất cả tích cực
Điểm F1Trung bình điều hòa của độ chính xác và độ nhớTốt nhất khi các lớp không cân bằng
Ma trận nhầm lẫnCái nhìn chi tiết về TP, FP, FN, TNTuyệt vời cho chẩn đoán đa lớp

🧪 Ví dụ mã: Phân loại loài hoa Iris

Chúng ta sẽ sử dụng tập dữ liệu Iris cổ điển để phân loại loài hoa bằng LogisticRegression.

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix

# 🌸 Tải tập dữ liệu Iris
data = load_iris()
X = data.data
y = data.target
class_names = data.target_names

# 🔀 Chia train-test
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 🧠 Huấn luyện bộ phân loại
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 📈 Đưa ra dự đoán
y_pred = model.predict(X_test)

# 📊 Đánh giá
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

# 🖼️ Lưu biểu đồ ma trận nhầm lẫn
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))
sns.heatmap(
    cm,
    annot=True,
    fmt="d",
    cmap="Blues",
    xticklabels=class_names,
    yticklabels=class_names,
)
plt.xlabel("Dự đoán")
plt.ylabel("Thực tế")
plt.title("Ma trận nhầm lẫn - Phân loại Iris")
plt.tight_layout()
plt.savefig("iris_confusion_matrix.png")

📊 Ma trận nhầm lẫn dưới đây (đạt được sau khi chạy mã) cho thấy mô hình đã phân loại chính xác tất cả các mẫu kiểm tra trên cả ba lớp (setosa, versicolor, virginica). Điều này cho thấy hiệu suất xuất sắc trên tập dữ liệu Iris, không có phân loại sai nào.

Ma trận nhầm lẫn

Ví dụ này cho thấy việc huấn luyện một bộ phân loại đa lớp và đo độ chính xác, độ nhớ, và điểm F1 đơn giản như thế nào.


✅ Khi nào sử dụng phân loại

  • Khi đầu ra của bạn là một nhãn lớp
  • Khi bạn đang giải quyết các vấn đề như chẩn đoán, phát hiện gian lận, gắn thẻ, hoặc nhận diện
  • Khi độ chính xác, độ chính xác, hoặc độ nhớ có ý nghĩa hơn lỗi số thô

🔚 Tóm tắt

Phân loại là điều cần thiết để dạy máy móc cách nhận diện và gắn nhãn thế giới. Với các mô hình và thước đo đánh giá phù hợp, nó cung cấp sức mạnh cho vô số ứng dụng - từ sàng lọc y tế đến xử lý ngôn ngữ.


🔜 Tiếp theo

Trong bài viết tiếp theo, chúng ta sẽ khám phá Học không giám sát - nơi các mô hình học từ dữ liệu không có nhãn để tìm các cấu trúc ẩn.

Hãy tò mò và tiếp tục khám phá 👇

🙏 Lời cảm ơn

Cảm ơn ChatGPT đã cải thiện bài viết này với các gợi ý, định dạng và biểu tượng cảm xúc.