(Logistic Regression – Binary Classification Model)
1. Mục tiêu bài học
Hồi quy tuyến tính chỉ phù hợp cho bài toán dự đoán giá trị liên tục. Với bài toán phân loại, như:
- Dự đoán khách hàng có mua hàng không (0 hoặc 1)
- Dự đoán email là spam hay không spam
- Dự đoán bệnh nhân mắc bệnh hay không
Ta cần một mô hình đầu ra nhị phân (binary), không phải giá trị thực. Hồi quy logistic là mô hình đơn giản và phổ biến nhất cho các bài toán này.
2. Ý tưởng mô hình
Khác với hồi quy tuyến tính cho ra đầu ra y_hat
bất kỳ trong khoảng (-∞, +∞)
, Logistic Regression giới hạn đầu ra trong khoảng (0, 1) bằng cách dùng hàm sigmoid:
sigmoid(z) = 1 / (1 + exp(-z))
Với:
z = w1 * x1 + w2 * x2 + ... + wd * xd + b
Kết quả y_hat = sigmoid(z)
sẽ là xác suất mẫu thuộc lớp 1.
3. Diễn giải xác suất và quyết định nhị phân
y_hat
là xác suất đầu vào thuộc lớp 1- Ngưỡng quyết định (threshold): mặc định là 0.5
→ Nếuy_hat >= 0.5
→ Dự đoán lớp 1
→ Nếuy_hat < 0.5
→ Dự đoán lớp 0
4. Hàm mất mát (Loss Function)
Logistic Regression không dùng MSE vì hàm sigmoid và MSE kết hợp có thể gây gradient vanishing. Thay vào đó, dùng Binary Cross-Entropy Loss:
Loss = -[y * log(y_hat) + (1 - y) * log(1 - y_hat)]
Tổng thể trên tập dữ liệu:
L(w, b) = (1/n) * Σ -[y_i * log(y_hat_i) + (1 - y_i) * log(1 - y_hat_i)]
Mục tiêu là tối thiểu hóa hàm mất mát này bằng thuật toán tối ưu như Gradient Descent.
5. So sánh Logistic vs Linear Regression
Đặc điểm | Linear Regression | Logistic Regression |
---|---|---|
Bài toán | Dự đoán giá trị liên tục | Phân loại nhị phân |
Hàm đầu ra | y_hat = w*x + b | y_hat = sigmoid(w*x + b) |
Khoảng giá trị output | (-∞, +∞) | (0, 1) |
Hàm mất mát | Mean Squared Error (MSE) | Binary Cross-Entropy |
6. Triển khai bằng Python (Scikit-Learn)
6.1. Huấn luyện mô hình
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X = df[['age', 'income']] # ví dụ đặc trưng
y = df['will_buy'] # biến nhị phân: 0 hoặc 1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
6.2. Lấy xác suất
probs = model.predict_proba(X_test)
# probs[:, 1] là xác suất thuộc lớp 1
7. Đánh giá mô hình phân loại
Không chỉ dùng accuracy
, bạn nên dùng thêm các chỉ số sau:
- Precision: Tỷ lệ dự đoán đúng trong số dự đoán là 1
- Recall: Tỷ lệ bắt đúng trong số thực sự là 1
- F1-Score: Trung bình điều hòa của Precision và Recall
- ROC AUC: Diện tích dưới đường cong ROC, đánh giá phân biệt tốt/không
from sklearn.metrics import classification_report, roc_auc_score
print(classification_report(y_test, y_pred))
print("ROC AUC:", roc_auc_score(y_test, probs[:,1]))
8. Ưu điểm và hạn chế
Ưu điểm | Hạn chế |
---|---|
Dễ huấn luyện, chạy nhanh | Không xử lý tốt quan hệ phi tuyến |
Xác suất đầu ra có thể giải thích được | Dễ overfit với dữ liệu nhiễu |
Cơ sở cho các mô hình nâng cao (softmax, neural net) | Không hoạt động tốt nếu dữ liệu không tuyến tính phân tách được |
9. Bài tập thực hành
- Chọn tập dữ liệu phân loại nhị phân (ví dụ: Titanic, breast cancer)
- Huấn luyện logistic regression
- Tính accuracy, precision, recall, F1, AUC
- Trực quan hoá phân phối xác suất
predict_proba
và biểu đồ ROC
10. Tổng kết
Logistic Regression là mô hình đơn giản, hiệu quả và giải thích được trong các bài toán phân loại nhị phân. Dù đơn giản, nó được dùng làm baseline cho mọi bài toán classification, và là nền tảng cho nhiều mô hình nâng cao hơn như:
- Softmax Regression (đa lớp)
- Neural Networks (deep learning)
- CRF, MaxEnt trong NLP
Sign up