Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Hiểu đơn giản về mô hình hồi quy logistic
Hướng Dẫn Đồ ÁnLập Trình AI

Hiểu đơn giản về mô hình hồi quy logistic

Chia sẻ
Chia sẻ

Hồi quy logistic (logistic regression) là một thuật toán cơ bản trong Machine Learning và thống kê, dùng để dự đoán xác suất xảy ra một trong hai kết quả như “đúng/sai”, “có disease/không disease”, “pass/fail”… nếu bạn đã học phân tích dữ liệu y tế hoặc xử lý biến số nhị phân, chắc chắn sẽ thấy mô hình này rất hữu ích. Khác với hồi quy tuyến tính (linear regression) được dùng để dự đoán giá trị liên tục, hồi quy logistic giúp ta phân lớp nhị phân và hiểu được “mức độ tin cậy” của phần dự đoán thông qua xác suất.

Bài viết này sẽ đưa bạn từ con số 0 về kiến thức toán học, giải thích trực quan về các khái niệm như hàm sigmoid, log-odds, xác suất, cách training bằng phương pháp Maximum Likelihood Estimation (MLE), đến cách cài đặt một mô hình logistic regression bằng Python với các ví dụ cụ thể, phần code, biểu đồ và phân tích lỗi để bạn dễ nắm bắt.

Hồi quy logistic là gì?

Hồi quy logistic là mô hình dùng để dự đoán xác suất của một biến mục tiêu nhị phân (binary), chuyển từ công thức tuyến tính thành xác suất nằm trong [0,1] nhờ hàm logistic (sigmoid):

Trong đó:

Hàm sigmoid giúp chúng ta có thể chuyển kết quả tuyến tính thành xác suất hợp lệ, phù hợp cho bài toán phân lớp như “mắc bệnh hay không”, “có mua hàng hay không”.

Ví dụ trong y tế: biến mục tiêu là “có bệnh (1) / không bệnh (0)”. Các biến đầu vào có thể là tuổi, huyết áp, chỉ số cholesterol… Mô hình logistic sẽ ước lượng xác suất một người mắc bệnh dựa trên các chỉ số này.

Tại sao không dùng linear regression?

Nếu dùng hồi quy tuyến tính để dự đoán xác suất, mô hình có thể cho ra kết quả <0 hoặc >1, là điều vô nghĩa vì xác suất phải nằm trong khoảng [0,1]. Do vậy, chỉ cần dùng hàm sigmoid để biến đầu ra thành xác suất, ta đã có một giải pháp phù hợp.

Ngoài ra, hồi quy logistic áp dụng phương pháp tối ưu Maximum Likelihood Estimation (MLE), cho phép tìm tập tham số β sao cho xác suất dự đoán đúng dữ liệu thật là lớn nhất thay vì phân tích sai số như hồi quy tuyến tính.

Cách thức hoạt động

  1. Tính z: tổng có trọng số của các biến đầu vào.
  2. Đưa qua hàm sigmoid để ra xác suất.
  3. Quy ngưỡng (ví dụ 0.5) để phân lớp: nếu >0.5 → dự đoán 1, ngược lại là 0.
  4. Tối ưu tham số bằng MLE — tìm bộ β tối đa hóa xác suất dự đoán đúng nhãn.

Một ví dụ cụ thể

Giả sử bạn muốn dự đoán khả năng 1 bệnh nhân bị bệnh tim (1) dựa trên tuổi và huyết áp. Mô hình xác suất:

Sau khi huấn luyện, bạn sẽ được giá trị β0,β1,β2 sao cho tổng likelihood là tối đa. Khi muốn dự đoán, chỉ cần thay số liệu mới vào công thức và dùng sigmoid để cho kết quả.

Cài đặt logistic regression bằng Python

Chuẩn bị

Trước khi bắt đầu xây dựng mô hình hồi quy logistic, chúng ta cần chuẩn bị môi trường lập trình và các thư viện cần thiết. Vì Logistic Regression là một trong những thuật toán cơ bản nhất, bạn có thể chạy trên bất kỳ máy tính nào mà không cần GPU. Python là lựa chọn lý tưởng nhờ sự hỗ trợ mạnh mẽ từ các thư viện như scikit-learn, numpymatplotlib.

Trong bài này, chúng ta sẽ sử dụng scikit-learn để xây dựng mô hình, numpy để xử lý dữ liệu số, và matplotlib để trực quan hóa dữ liệu. Ngoài ra, seaborn sẽ giúp tạo ra các biểu đồ đẹp và dễ hiểu hơn. Hãy đảm bảo rằng các thư viện này đã được cài đặt trong môi trường Python của bạn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

Tạo bộ dữ liệu mẫu

Để minh họa hồi quy logistic, chúng ta sẽ tạo một bộ dữ liệu giả lập. Bộ dữ liệu này sẽ bao gồm hai đặc trưng (features) và một nhãn nhị phân (target) có giá trị 0 hoặc 1. Điều này giúp mô hình học cách phân biệt giữa hai nhóm điểm dựa trên các đặc trưng đầu vào.

make_classification từ scikit-learn là một hàm tiện lợi để tạo các bộ dữ liệu phân loại nhân tạo. Với hai đặc trưng, chúng ta có thể trực quan hóa dữ liệu trên một mặt phẳng 2D để dễ hình dung cách hồi quy logistic phân lớp. Các tham số như flip_y được dùng để tạo một chút nhiễu trong dữ liệu, phản ánh sự không hoàn hảo của dữ liệu thực tế.

X, y = make_classification(n_samples=500, n_features=2, n_redundant=0,
                           n_clusters_per_class=1, flip_y=0.03, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Huấn luyện

Sau khi có dữ liệu, bước tiếp theo là huấn luyện mô hình hồi quy logistic. Trong hồi quy logistic, thuật toán tìm bộ tham số (weights) sao cho hàm sigmoid dự đoán xác suất của từng điểm dữ liệu thuộc về lớp 1 hoặc 0. Việc tối ưu các tham số này được thực hiện thông qua phương pháp Maximum Likelihood Estimation.

Chúng ta sẽ khởi tạo một đối tượng LogisticRegression từ scikit-learn và gọi phương thức fit() để huấn luyện mô hình trên dữ liệu huấn luyện. Đây là bước mô hình học cách xác định ranh giới phân lớp tối ưu trong không gian đặc trưng.

model = LogisticRegression()
model.fit(X_train, y_train)

Đánh giá

Đánh giá mô hình là bước quan trọng để hiểu hiệu suất của nó trên dữ liệu chưa từng thấy. Chúng ta sẽ dự đoán nhãn cho tập kiểm tra và so sánh với nhãn thực để tính độ chính xác. Ngoài ra, ma trận nhầm lẫn, báo cáo phân loại với precision, recall và F1-score sẽ cho cái nhìn sâu hơn về hiệu suất mô hình.

Đánh giá tốt không chỉ giúp bạn biết mô hình có hoạt động hay không mà còn chỉ ra các vấn đề tiềm ẩn như mất cân bằng dữ liệu hoặc overfitting.

y_pred = model.predict(X_test)

print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.title("Confusion Matrix")
plt.show()

Trực quan dữ liệu và phân lớp

Để hiểu cách hồi quy logistic phân tách các lớp, chúng ta có thể trực quan hóa ranh giới phân lớp mà mô hình tìm ra. Điều này rất hữu ích với dữ liệu 2D vì bạn có thể dễ dàng quan sát cách các điểm dữ liệu được phân loại vào từng nhóm.

Chúng ta sẽ tạo một lưới các điểm trong không gian 2D, dự đoán xác suất với mô hình, và vẽ đường phân cách giữa hai lớp. Các điểm dữ liệu kiểm tra cũng sẽ được hiển thị để bạn thấy rõ mô hình phân loại đúng và sai như thế nào.

xx, yy = np.meshgrid(
    np.linspace(X[:, 0].min(), X[:, 0].max(), 100),
    np.linspace(X[:, 1].min(), X[:, 1].max(), 100)
)

grid = np.c_[xx.ravel(), yy.ravel()]
probs = model.predict_proba(grid)[:, 1].reshape(xx.shape)

plt.contourf(xx, yy, probs, levels=[0, 0.5, 1], alpha=0.3, colors=['blue', 'red'])
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k')
plt.title("Decision Boundary")
plt.show()

Ưu và nhược điểm của Logistic Regression

Logistic Regression có ưu điểm là đơn giản, dễ hiểu và dễ triển khai, rất phù hợp cho người mới bắt đầu học Machine Learning. Mô hình này hoạt động hiệu quả khi mối quan hệ giữa các biến độc lập và kết quả là tuyến tính trong không gian log-odds. Ngoài ra, nó cung cấp xác suất dự đoán, giúp người dùng đánh giá mức độ tin cậy của kết quả và đưa ra quyết định phù hợp trong các ứng dụng như y tế hay tài chính.

Tuy nhiên, Logistic Regression cũng có hạn chế vì không thể xử lý tốt các mối quan hệ phi tuyến phức tạp. Mô hình dễ bị ảnh hưởng khi các biến độc lập có mối tương quan cao hoặc khi dữ liệu mất cân bằng giữa các lớp. Trong trường hợp dữ liệu nhiều chiều hoặc có cấu trúc phức tạp, các mô hình tiên tiến hơn như Random Forest hoặc mạng nơ-ron thường mang lại kết quả tốt hơn.

Kết luận

Hồi quy logistic là mô hình đơn giản, dễ hiểu và mạnh mẽ để giải quyết bài toán phân lớp nhị phân. Bạn đã được hướng dẫn chi tiết từ lý thuyết cơ bản (sigmoid + log-odds) đến cách triển khai thực tế bằng Python. Model này rất thích hợp cho các bài toán như dự đoán bệnh, phân loại spam, phỏng vấn yes/no…

Nếu cần model phức tạp hơn, bạn có thể tìm hiểu các thuật toán như tree-based, SVM, hoặc các mạng neural network. Logistic regression là bước khởi đầu tuyệt vời để bạn tiếp tục phát triển kỹ năng Machine Learning.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!