Đến nội dung chính
Học máy

Logistic Regression: xác suất, ngưỡng quyết định và đánh giá

Từ điểm tuyến tính đến xác suất nhị phân; tách việc học xác suất khỏi lựa chọn ngưỡng và kiểm tra calibration.

Mức giải thích

Tên có chữ regression nhưng Logistic Regression thường dùng để phân loại. Bài viết đi từ một điểm số đến xác suất và quyết định, rồi dùng dữ liệu tự tạo để kiểm tra ảnh hưởng của ngưỡng mà không giả định mô hình đã đáng tin trong thực tế.

Mục tiêu học tập

  • Giải thích sigmoid và binary cross-entropy.
  • Tính confusion matrix khi thay ngưỡng.
  • Phân biệt khả năng xếp hạng, calibration và lợi ích vận hành.

Từ điểm tuyến tính đến xác suất

Tính z=wTx+bz=w^Tx+b, rồi p=σ(z)=1/(1+e−z)p=\sigma(z)=1/(1+e^{-z}). Với hai lớp, p biểu diễn ước lượng P(Y=1∣X=x)P(Y=1\mid X=x). Nhãn dự đoán được tạo bằng cách so p với một ngưỡng, thường bắt đầu ở 0.5 nhưng có thể cần ngưỡng khác.

Sigmoid không biến một điểm tùy ý thành xác suất đáng tin. Tham số phải được fit đúng và chất lượng xác suất cần kiểm tra trên dữ liệu ngoài mẫu.

Học bằng log loss

Với một mẫu, loss là −ylog⁡p−(1−y)log⁡(1−p)-y\log p-(1-y)\log(1-p). Trung bình loss trên train rồi tối ưu tham số; regularization hạn chế hệ số quá lớn. Chuẩn hóa và xử lý thiếu dữ liệu phải được fit chỉ từ train.

Mã bên dưới minh họa đánh giá các điểm đã có, không huấn luyện một bộ phân loại hoàn chỉnh. Tách hai công việc giúp tập trung vào ngưỡng và tránh hiểu nhầm dữ liệu đồ chơi là kết quả nghiên cứu.

Ngưỡng quyết định và chi phí sai

Precision đo phần dự đoán dương thật sự dương; recall đo phần mẫu dương được tìm thấy. Tính TP, FP, FN và TN theo cùng quy ước lớp một. Trường hợp không có dự đoán dương cần quy ước precision rõ ràng.

Chọn ngưỡng trên validation dựa vào ngân sách kiểm tra hoặc chi phí sai; báo kết quả cuối trên test cố định. Accuracy có thể che khuất việc bỏ sót lớp hiếm.

Calibration và giới hạn sử dụng

Dùng reliability diagram, Brier score hoặc log loss để xem chất lượng xác suất ngoài mẫu. Điểm ranking tốt không tự bảo đảm calibrated. Nếu fit bộ hiệu chỉnh, phải dùng dữ liệu tách khỏi dữ liệu fit mô hình hoặc một protocol cross-validation phù hợp.

Đánh giá theo thời gian và theo nhóm dữ liệu quan trọng. Dịch chuyển tỷ lệ lớp hoặc quy trình gán nhãn có thể làm ngưỡng từng hoạt động tốt trở nên không còn phù hợp.

Workflow & kiến trúc

Chỉ fit preprocessing và mô hình trên tập train. Tập test dùng phép biến đổi đã học và mô hình đã cố định để dự đoán, rồi đối chiếu với nhãn test.
01Quy ước lớp dương
02Tách dữ liệu
03Fit xác suất
04Chọn ngưỡng bằng validation
05Đánh giá quyết định và calibration
Workflow minh họa · Các bước cần được điều chỉnh theo bài toán thực tế.

Ứng dụng & giới hạn

  • Baseline phân loại dữ liệu bảng.
  • Thiết kế bước chuyển người kiểm tra khi chi phí bỏ sót và báo nhầm khác nhau.

Điểm mạnh

Mô hình gọn; ranh giới, xác suất và quy tắc quyết định có thể được kiểm tra riêng.

Giới hạn cần nhớ

Ranh giới tuyến tính và giả định dữ liệu có thể không phù hợp. Điểm sigmoid không mặc nhiên calibrated; ví dụ không huấn luyện hay đánh giá mô hình thực.

Thử trong một project nhỏ

LEARN BY DOING

Chạy mã rồi thử ngưỡng 0.3, 0.5 và 0.7. Ghi TP, FP, FN, TN cùng precision/recall. Chọn một quy tắc dựa trên chi phí giả định, và giải thích vì sao cần validation riêng trước khi dùng trên test.

PYTHON · VÍ DỤ MINH HỌA
import math

def sigmoid(z):
    if z >= 0:
        return 1.0 / (1.0 + math.exp(-z))
    ez = math.exp(z)
    return ez / (1.0 + ez)

# Hand-written logits and labels, not a fitted model or benchmark.
logits = [-2.0, -0.4, 0.2, 1.2, 2.0]
labels = [0, 0, 1, 0, 1]
probabilities = [sigmoid(z) for z in logits]
for threshold in (0.4, 0.7):
    predicted = [int(p >= threshold) for p in probabilities]
    tp = sum(y == 1 and h == 1 for y, h in zip(labels, predicted))
    fp = sum(y == 0 and h == 1 for y, h in zip(labels, predicted))
    fn = sum(y == 1 and h == 0 for y, h in zip(labels, predicted))
    tn = sum(y == 0 and h == 0 for y, h in zip(labels, predicted))
    assert tp + fp + fn + tn == len(labels)
    print({"threshold": threshold, "TP": tp, "FP": fp, "FN": fn, "TN": tn,
           "precision": tp / (tp + fp) if tp + fp else None,
           "recall": tp / (tp + fn) if tp + fn else None})

Python chuẩn; logits và nhãn được viết tay để minh họa tác động của ngưỡng. Không phải kết quả của mô hình được huấn luyện.

Nguồn tham khảo

  1. Google — Logistic regression
  2. scikit-learn — Probability calibration
  3. scikit-learn — Decision threshold tuning

KEEP EXPLORING

Đọc tiếp để nối các ý tưởng.