Chuyển đến nội dung chính

Tìm hiểu Hồi quy Logistic trong Python

Tìm hiểu về hồi quy logistic, các đặc tính cơ bản của nó, và xây dựng một mô hình học máy cho bài toán thực tế trong Python bằng scikit-learn.
Đã cập nhật 5 thg 10, 2026  · 10 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Các kỹ thuật phân loại là một phần thiết yếu của các ứng dụng học máy và khai phá dữ liệu. Xấp xỉ 70% bài toán khoa học dữ liệu là bài toán phân loại. Có rất nhiều bài toán phân loại, nhưng hồi quy logistic là phương pháp phổ biến và hữu ích để giải quyết bài toán phân loại nhị phân. Một loại phân loại khác là phân loại đa thức (Multinomial), xử lý các trường hợp có nhiều lớp trong biến mục tiêu. Ví dụ, bộ dữ liệu IRIS là ví dụ rất nổi tiếng về phân loại đa lớp. Các ví dụ khác là phân loại danh mục bài viết/blog/tài liệu.

Hồi quy logistic có thể được dùng cho nhiều bài toán phân loại, chẳng hạn phát hiện thư rác. Một số ví dụ khác gồm: dự đoán tiểu đường, liệu một khách hàng sẽ mua một sản phẩm cụ thể; khách hàng có rời bỏ hay không, người dùng có nhấp vào một liên kết quảng cáo nhất định hay không, và còn nhiều nữa.

Hồi quy Logistic là một trong những thuật toán Học máy đơn giản và được dùng phổ biến nhất cho phân loại hai lớp. Nó dễ triển khai và có thể dùng làm đường cơ sở cho bất kỳ bài toán phân loại nhị phân nào. Các khái niệm nền tảng của nó cũng hữu ích trong học sâu. Hồi quy logistic mô tả và ước lượng mối quan hệ giữa một biến phụ thuộc nhị phân và các biến độc lập.

Để tự chạy dễ dàng toàn bộ mã ví dụ trong hướng dẫn này, bạn có thể tạo một sổ tay DataLab miễn phí với Python được cài sẵn và chứa mọi mẫu mã. Để luyện tập thêm về hồi quy logistic, hãy xem các bài tập trong khóa học Mô hình hóa Rủi ro Tín dụng bằng R, với rất nhiều ví dụ thực tế. 

Hồi quy Logistic là gì?

Hồi quy logistic là một phương pháp thống kê để dự đoán các lớp nhị phân. Kết quả hoặc biến mục tiêu có tính chất lưỡng phân. Lưỡng phân nghĩa là chỉ có hai lớp khả dĩ. Ví dụ, có thể dùng cho bài toán phát hiện ung thư. Nó tính xác suất xảy ra của một sự kiện.

Đây là một trường hợp đặc biệt của hồi quy tuyến tính, trong đó biến mục tiêu có tính phân loại. Nó sử dụng log tỉ số khả dĩ (log-odds) làm biến phụ thuộc. Hồi quy Logistic dự đoán xác suất xảy ra của một sự kiện nhị phân bằng cách sử dụng hàm logit. 

Phương trình Hồi quy Tuyến tính:

linear regression equation

Trong đó y là biến phụ thuộc và x1, x2 ... và Xn là các biến giải thích.

Hàm Sigmoid:

sigmoid function equation

Áp dụng hàm Sigmoid lên hồi quy tuyến tính:

sigmoid function and linear regression equation

Các tính chất của Hồi quy Logistic:

  • Biến phụ thuộc trong hồi quy logistic tuân theo Phân phối Bernoulli.
  • Ước lượng được thực hiện bằng phương pháp hợp lý cực đại (maximum likelihood).
  • Không có R Square; độ phù hợp mô hình được tính qua Concordance, thống kê KS.

Hồi quy Tuyến tính so với Hồi quy Logistic

Hồi quy tuyến tính cho đầu ra liên tục, còn hồi quy logistic cho đầu ra rời rạc. Ví dụ về đầu ra liên tục là giá nhà và giá cổ phiếu. Ví dụ về đầu ra rời rạc là dự đoán bệnh nhân có ung thư hay không và dự đoán khách hàng có rời bỏ hay không. Hồi quy logistic được ước lượng bằng phương pháp hợp lý cực đại (MLE), trong khi hồi quy tuyến tính thường được ước lượng bằng bình phương tối thiểu thông thường (OLS), vốn cũng có thể coi là trường hợp đặc biệt của MLE khi sai số trong mô hình có phân phối chuẩn.

Linear regression vs logistic regression visualized

Hợp lý cực đại so với Phương pháp Bình phương Tối thiểu

MLE là phương pháp tối đa hóa "hàm hợp lý", trong khi OLS là phương pháp xấp xỉ tối thiểu hóa khoảng cách. Tối đa hóa hàm hợp lý xác định các tham số có khả năng nhất tạo ra dữ liệu quan sát được. Về mặt thống kê, MLE đặt trung bình và phương sai làm tham số trong việc xác định các giá trị tham số cụ thể cho một mô hình cho trước. Bộ tham số này có thể dùng để dự đoán dữ liệu cần thiết trong phân phối chuẩn.

Ước lượng Bình phương Tối thiểu thông thường được tính bằng cách khớp một đường hồi quy lên các điểm dữ liệu sao cho tổng bình phương độ lệch là nhỏ nhất (lỗi bình phương tối thiểu). Cả hai đều được dùng để ước lượng tham số của mô hình hồi quy tuyến tính. MLE giả định một hàm khối xác suất chung, trong khi OLS không đòi hỏi giả định ngẫu nhiên nào để tối thiểu hóa khoảng cách.

Hàm sigmoid

Hàm sigmoid, còn gọi là hàm logistic, cho một đường cong hình chữ S có thể nhận bất kỳ số thực nào và ánh xạ thành giá trị giữa 0 và 1. Nếu đường cong tiến tới dương vô cùng, y dự đoán sẽ thành 1, và nếu đường cong tiến tới âm vô cùng, y dự đoán sẽ thành 0. Nếu đầu ra của hàm sigmoid lớn hơn 0,5, ta có thể phân loại kết quả là 1 hoặc CÓ, và nếu nhỏ hơn 0,5, ta phân loại là 0 hoặc KHÔNG. Ví dụ, nếu đầu ra là 0,75, ta có thể nói theo xác suất rằng có 75% khả năng bệnh nhân mắc ung thư.

eq4

Sigmoid function graph in Python

Các loại Hồi quy Logistic

Các loại Hồi quy Logistic:

  • Hồi quy Logistic Nhị phân: Biến mục tiêu chỉ có hai kết quả khả dĩ như Spam hoặc Không Spam, Có Ung thư hoặc Không.
  • Hồi quy Logistic Đa thức: Biến mục tiêu có ba hoặc nhiều hạng mục danh nghĩa, chẳng hạn dự đoán loại Rượu.
  • Hồi quy Logistic Thứ bậc: Biến mục tiêu có ba hoặc nhiều hạng mục có thứ tự, như xếp hạng nhà hàng hoặc sản phẩm từ 1 đến 5.

Bắt đầu học Python miễn phí

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

BasicSkill Level
4 giờ
54.3K learners
Khóa học này tập trung vào kỹ thuật xử lý đặc trưng và học máy cho dữ liệu chuỗi thời gian.
See DetailsRight Arrow
Start Course

Xây dựng mô hình trong Scikit-learn

Hãy xây dựng mô hình dự đoán tiểu đường sử dụng bộ phân loại hồi quy logistic.

Trước tiên, hãy tải bộ dữ liệu Pima Indian Diabetes cần thiết bằng hàm đọc CSV của pandas. Bạn có thể tải dữ liệu từ liên kết sau: https://www.kaggle.com/uciml/pima-indians-diabetes-database hoặc chọn một bộ dữ liệu từ DataCamp: https://www.datacamp.com/datalab/datasets. Bộ dữ liệu sẵn sàng sử dụng cho phép bạn tùy chọn huấn luyện mô hình trên DataLab, Jupyter notebook miễn phí trên đám mây của DataCamp. 

Nạp dữ liệu

Chúng ta sẽ đơn giản hóa các cột bằng cách cung cấp col_names cho hàm read_csv() của pandas.

#import pandas
import pandas as pd
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()

screenshot of Pima Indian Diabetes dataset

Chọn đặc trưng

Ở đây, bạn cần chia các cột đã cho thành hai loại biến: biến phụ thuộc (hoặc biến mục tiêu) và biến độc lập (hoặc biến đặc trưng).

#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable

Chia tách dữ liệu

Để hiểu hiệu năng mô hình, chia bộ dữ liệu thành tập huấn luyện và tập kiểm tra là một chiến lược tốt.

Hãy chia tách bộ dữ liệu bằng cách dùng hàm train_test_split(). Bạn cần truyền 3 tham số: features, target và kích thước test_set. Ngoài ra, bạn có thể dùng random_state để chọn các bản ghi ngẫu nhiên.

# split X and y into training and testing sets
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)

Ở đây, bộ dữ liệu được chia thành hai phần theo tỷ lệ 75:25. Nghĩa là 75% dữ liệu dùng để huấn luyện mô hình và 25% dùng để kiểm tra mô hình.

Phát triển mô hình và dự đoán

Trước hết, nhập mô-đun LogisticRegression và tạo một đối tượng bộ phân loại hồi quy logistic bằng hàm LogisticRegression() với random_state để tái lập.

Sau đó, khớp mô hình của bạn trên tập huấn luyện bằng fit() và dự đoán trên tập kiểm tra bằng predict(). 

# import the class
from sklearn.linear_model import LogisticRegression

# instantiate the model (using the default parameters)
logreg = LogisticRegression(random_state=16)

# fit the model with data
logreg.fit(X_train, y_train)

y_pred = logreg.predict(X_test)

Đánh giá mô hình bằng Ma trận Nhầm lẫn

Ma trận nhầm lẫn là một bảng dùng để đánh giá hiệu năng của mô hình phân loại. Bạn cũng có thể trực quan hóa hiệu năng của một thuật toán. Thành phần cơ bản của ma trận nhầm lẫn là số lượng dự đoán đúng và sai được tổng hợp theo từng lớp.

# import the metrics class
from sklearn import metrics

cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
array([[115,   8],
      [ 30,  39]])

Ở đây, bạn có thể thấy ma trận nhầm lẫn dưới dạng đối tượng mảng. Kích thước của ma trận này là 2*2 vì mô hình này là phân loại nhị phân. Bạn có hai lớp 0 và 1. Các giá trị trên đường chéo biểu thị dự đoán chính xác, trong khi các phần tử ngoài đường chéo là dự đoán không chính xác. Trong đầu ra, 115 và 39 là dự đoán đúng, còn 30 và 8 là dự đoán sai.

Trực quan hóa ma trận nhầm lẫn bằng heatmap

Hãy trực quan hóa kết quả của mô hình dưới dạng ma trận nhầm lẫn bằng matplotlib và seaborn.

Tại đây, bạn sẽ trực quan hóa ma trận nhầm lẫn bằng Heatmap.

# import required modules
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

class_names=[0,1] # name  of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
# create heatmap
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')

Text(0.5,257.44,'Predicted label');

confusion matrix for Pima Indian Diabetes dataset

Các chỉ số đánh giá từ ma trận nhầm lẫn

Hãy đánh giá mô hình bằng classification_report cho độ chính xác, độ chính xác dự đoán (precision) và khả năng thu hồi (recall).

from sklearn.metrics import classification_report
target_names = ['without diabetes', 'with diabetes']
print(classification_report(y_test, y_pred, target_names=target_names))
   precision    recall  f1-score   support

without diabetes       0.79      0.93      0.86       123
  with diabetes       0.83      0.57      0.67        69

        accuracy                           0.80       192
      macro avg       0.81      0.75      0.77       192
    weighted avg       0.81      0.80      0.79       192

Bạn đạt tỷ lệ phân loại là 80%, được xem là độ chính xác tốt.

Precision: Precision nói về mức độ chính xác, tức mô hình của bạn chính xác đến đâu. Nói cách khác, khi mô hình đưa ra dự đoán, nó đúng với tần suất như thế nào. Trong trường hợp của bạn, khi mô hình hồi quy logistic dự đoán bệnh nhân sẽ mắc tiểu đường, điều đó đúng 73% thời gian.

Recall: Nếu trong tập kiểm tra có những bệnh nhân mắc tiểu đường, mô hình hồi quy logistic của bạn có thể nhận diện được 57% số đó.

Đường cong ROC

Đường cong Đặc trưng Vận hành Máy thu (ROC) là đồ thị giữa tỷ lệ dương tính thật và tỷ lệ dương tính giả. Nó cho thấy sự đánh đổi giữa độ nhạy và độ đặc hiệu.

y_pred_proba = logreg.predict_proba(X_test)[::,1]
fpr, tpr, _ = metrics.roc_curve(y_test,  y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()

ROC for Pima Indian Diabetes dataset

Điểm AUC cho trường hợp này là 0,88. AUC bằng 1 biểu thị bộ phân loại hoàn hảo, còn 0,5 biểu thị bộ phân loại vô giá trị.

Mã nguồn có trên DataLab: Understanding Logistic Regression in Python.

Ưu điểm

Nhờ tính hiệu quả và đơn giản, nó không đòi hỏi sức mạnh tính toán cao, dễ triển khai, dễ diễn giải và được các nhà phân tích dữ liệu, nhà khoa học dữ liệu sử dụng rộng rãi. Ngoài ra, nó không yêu cầu chuẩn hóa thang đo đặc trưng. Hồi quy logistic cung cấp điểm xác suất cho các quan sát.

Nhược điểm

Hồi quy logistic không xử lý tốt số lượng lớn đặc trưng/biến phân loại. Nó dễ bị quá khớp. Đồng thời, nó không thể giải quyết các vấn đề phi tuyến, vì vậy cần biến đổi các đặc trưng phi tuyến. Hồi quy logistic sẽ hoạt động không tốt nếu các biến độc lập không tương quan với biến mục tiêu và rất giống nhau hoặc tương quan mạnh với nhau.

Kết luận

Trong hướng dẫn này, bạn đã tìm hiểu nhiều chi tiết về hồi quy logistic. Bạn đã học hồi quy logistic là gì, cách xây dựng các mô hình tương ứng, cách trực quan hóa kết quả và một số nền tảng lý thuyết. Bạn cũng đã đề cập đến một số khái niệm cơ bản như hàm sigmoid, hợp lý cực đại, ma trận nhầm lẫn, đường cong ROC.

Hy vọng giờ đây bạn có thể áp dụng kỹ thuật Hồi quy Logistic để phân tích các bộ dữ liệu của riêng mình. Cảm ơn bạn đã đọc hướng dẫn!

Nếu bạn muốn học thêm về Hồi quy Logistic, hãy tham gia khóa Machine Learning với scikit-learn của DataCamp. Bạn cũng có thể bắt đầu hành trình trở thành kỹ sư học máy bằng cách đăng ký lộ trình nghề nghiệp Machine Learning Scientist with Python.

Chủ đề
Python
Phân tích dữ liệu
Machine Learning

Các khóa học Hồi quy bằng Python

Khóa học

Giới thiệu về Hồi quy với statsmodels trong Python

4 giờ
63.6K
Dự đoán giá nhà ở và tỷ lệ nhấp chuột vào quảng cáo thông qua việc triển khai, phân tích và giải thích phân tích hồi quy bằng thư viện statsmodels trong Python.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm