Mô hình Logistic Regression
Giới thiệu
Tổng quan
Logistic Regression được gọi là phân lớp nhị phân - Binary Classification cụ thể mô hình này dùng để dự đoán output dựa vào các giá trị input đã cho. Hầu hết output của Losgistic Regression chỉ có 2 giá trị như: True/False, Yes/No, 0/1,... Một số ví dụ điển hình là phân loại mail có phải spam hay không, phân loại khách hàng có phải tiềm năng hay không.
Ví dụ
Có một ví dụ như sau:
Một nhóm 20 sinh viên dành thời gian trong khoảng từ 0 đến 6 giờ cho việc ôn thi. Thời gian ôn thi này ảnh hưởng đến xác suất sinh viên vượt qua kỳ thi như thế nào? Wikipedia
Thu được kết quả:
Hours | Pass | Hours | Pass |
---|---|---|---|
.5 | 0 | 2.75 | 1 |
.75 | 0 | 3 | 0 |
1 | 0 | 3.25 | 1 |
1.25 | 0 | 3.5 | 0 |
1.5 | 0 | 4 | 1 |
1.75 | 0 | 4.25 | 1 |
1.75 | 1 | 4.5 | 1 |
2 | 0 | 4.75 | 1 |
2.25 | 1 | 5 | 1 |
2.5 | 0 | 5.5 | 1 |
Nếu chỉ vừa tiếp cận với mô hình Linear Regression và áp dụng vào bài toán này, ta sẽ thấy đường thẳng hồi quy này khó có thể đạt kết quả tối ưu (xem hình dưới). Hơn nữa, mô hình Linear Regression cho kết quả là các giá trị liên tục, trong khi bài toán này có output là giá trị rời rạc (pass, !pass).
Do đó chúng ta cần một mô hình phù hợp hơn để giải quyết các bài toán tương tự: Logistic Regression.
Sự giống và khác nhau giữa Linear Regression và Logistic Regression
Giống nhau:
- Linear Regression và Logistic Regression đều là những mô hình máy học có giám sát.
- Đều sử dụng phương trình tuyến tính cho dự đoán.
Khác nhau:
Linear Regression | Logistic Regression |
---|---|
Sử dụng cho các bài toán hồi quy | Sử dụng cho các bài toán phân lớp |
Dự đoán giá trị của biến liên tục | Dự đoán giá trị của biến rời rạc |
Sử dụng hàm độ lỗi Mean Square Error | Sử dụng hàm độ lỗi Cross Entropy |
Mục đích là tìm đường thẳng phù hợp để dự đoán các giá trị | Mục đích là tìm ra đường cong (đường cong sigmoid) để phân biệt các biến |
Đầu ra là các giá trị liên tục | Đầu ra là các giá trị trong khoảng (0,1) |
Sigmoid function
Nhìn chung Logistic Regression khá giống với Linear Regression đều sử dụng hàm tuyến tính để biểu diễn dữ liệu. Tuy nhiên Logistic Regression sử dụng hàm sigmoid để chuẩn hoá output về khoảng - Thể hiện xác suất của đầu ra trên mỗi class. Hàm sigmoid này có công thức như sau:
Tính chất:
- Hàm liên tục, cho giá trị trong khoảng (0,1).
- Có đạo hàm trên mọi điểm.
Bài tập
- Import thư viện vào tạo dữ liệu
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import f1_score
from sklearn.model_selection import train_test_split
X = np.array([0.5, 0.75, 1, 1.25, 1.5, 1.75, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 4, 4.25, 4.5, 4.75, 5, 5.5])
y = np.array([0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1])
- Chia tập train test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
- Tạo hàm sigmoid
def sigmoid(x):
return 1/(1+np.exp(-x))
- Tạo hàm loss
def cross_entropy_loss(y_pred, y, epsilon=1e-12):
y_pred = np.clip(y_pred, epsilon, 1. - epsilon)
loss=-np.mean(y*np.log(y_pred))
return loss
- Khởi tạo tham số cho mô hình
lr = 0.01 #learning late
W = np.random.uniform(0,1) # colom 1
b = 0.1
n_epochs = 10000
- Chạy mô hình
for i in range(n_epochs):
z = np.dot(X_tr, W) + b
y_pred = sigmoid(z)
l = square_loss(y_pred, y_tr)
gradient_W = np.dot((y_pred-y_tr).T, X_tr)/X_tr.shape[0]
gradient_b = np.mean(y_pred-y_tr)
W = W — lr * gradient_W
b = b — lr* gradient_b
- Tạo hàm dự đoán
def predict(X, W, b):
z = np.dot(X, W) + b
z = sigmoid(z)
y_pred = [int(i > 0.5) for i in z]
return np.array(y_pred)
- Kết quả
Chúng tôi sử dụng độ đo f1 trên cả tập train và test cho kết quả như sau: | Test | Train | | ---- | ----- | | 0.67 | 0.84 |
Các bạn có thể xem mã nguồn hoàn chỉnh ở đây
Kết luận
Logistic Regression là một mô hình máy học dùng để giải quyết các bài toán phân lớp với ý tưởng và cách cài đặt thuật toán đơn giản, dễ tiếp cận cho người mới học. Mặc dù được xem là mô hình học nông và cơ bản, Logistic Regression vẫn được sử dụng rộng rãi để giải quyết một nhóm các bài toán phù hợp trong thực tiễn.
Tác giả:
- Trần Công Minh
- Châu Ngọc Huy
- Trần Quốc Thắng