Linear và Logistic Regression
Linear và Logistic Regression: Hai Thuật Toán Nền Tảng Trong Machine Learning
Machine Learning (ML) ngày càng trở nên phổ biến trong thời đại số hóa hiện nay. Từ các ứng dụng dự đoán giá nhà, phân loại email đến chẩn đoán y tế, ML đang thay đổi cách chúng ta tương tác với dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu về hai thuật toán cơ bản nhất trong ML: Linear Regression và Logistic Regression.

Linear Regression
Khái niệm
Linear Regression (Hồi quy tuyến tính) là một trong những thuật toán đơn giản nhất và được sử dụng rộng rãi trong ML. Mục tiêu của Linear Regression là tìm mối quan hệ tuyến tính giữa biến đầu vào (feature) và biến đầu ra (target).
Mô hình toán học của Linear Regression như sau:
$y = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n + \epsilon$
Trong đó:
$y$ là biến phụ thuộc (target)
$x_1, x_2, ..., x_n$ là các biến độc lập (features)
$\beta_0, \beta_1, ..., \beta_n$ là các tham số (parameters) cần tìm
$\epsilon$ là sai số (error term)
Cách thức hoạt động
Linear Regression hoạt động bằng cách tìm đường thẳng (trong không gian hai chiều) hoặc siêu phẳng (trong không gian nhiều chiều) sao cho khoảng cách từ các điểm dữ liệu đến đường thẳng/siêu phẳng là nhỏ nhất.
Phương pháp phổ biến nhất để tìm các tham số tối ưu là sử dụng phương pháp Gradient Descent (Hạ Gradient) để tối thiểu hóa hàm mất mát Mean Squared Error (MSE):
$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$
Trong đó:
$y_i$ là giá trị thực tế
$\hat{y}_i$ là giá trị dự đoán
$n$ là số lượng mẫu dữ liệu
Ứng dụng thực tế
Linear Regression được ứng dụng trong nhiều lĩnh vực khác nhau:
Dự đoán giá nhà: Dựa vào các đặc điểm như diện tích, vị trí, số phòng...
Phân tích tài chính: Dự đoán xu hướng giá cổ phiếu, đánh giá rủi ro...
Nghiên cứu y tế: Phân tích mối quan hệ giữa liều lượng thuốc và hiệu quả điều trị...
Marketing: Dự đoán doanh số bán hàng dựa trên chi phí quảng cáo...
Ưu và nhược điểm
Ưu điểm:
Đơn giản, dễ hiểu và triển khai
Hiệu quả tính toán cao
Cung cấp thông tin về mức độ ảnh hưởng của từng feature
Hoạt động tốt khi mối quan hệ giữa các biến gần như tuyến tính
Nhược điểm:
Giả định mối quan hệ tuyến tính
Nhạy cảm với dữ liệu ngoại lai (outliers)
Dễ gặp vấn đề đa cộng tuyến (multicollinearity)
Không phù hợp với dữ liệu phân loại
Logistic Regression
Khái niệm
Mặc dù có tên gọi là "regression", Logistic Regression thực chất là một thuật toán phân loại (classification). Nó được sử dụng để dự đoán xác suất một mẫu dữ liệu thuộc về một lớp cụ thể.
Công thức toán học của Logistic Regression:
$P(y=1|x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1x_1 + ... + \beta_nx_n)}}$
Hay nói cách khác:
$P(y=1|x) = \sigma(w^Tx + b)$
Trong đó $\sigma$ là hàm sigmoid:
$\sigma(z) = \frac{1}{1 + e^{-z}}$
Cách thức hoạt động
Logistic Regression áp dụng hàm sigmoid để chuyển đổi kết quả của một hàm tuyến tính thành một giá trị trong khoảng [0, 1], đại diện cho xác suất. Nếu xác suất > 0.5, mẫu được phân loại vào lớp dương (positive), ngược lại, nó thuộc về lớp âm (negative).
Để tìm các tham số tối ưu, Logistic Regression sử dụng hàm mất mát Cross-Entropy:
$J(\theta) = -\frac{1}{n}\sum_{i=1}^{n}[y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)]$
Sau đó, thuật toán Gradient Descent được sử dụng để tối thiểu hóa hàm mất mát này.
Ứng dụng thực tế
Logistic Regression được ứng dụng rộng rãi trong nhiều lĩnh vực:
Y tế: Dự đoán nguy cơ mắc bệnh dựa trên các dấu hiệu lâm sàng
Tài chính: Đánh giá rủi ro tín dụng, phát hiện gian lận...
Marketing: Dự đoán liệu khách hàng có mua sản phẩm hay không
Nhận dạng hình ảnh: Phân loại đối tượng trong ảnh (ở mức đơn giản)
Ưu và nhược điểm
Ưu điểm:
Đơn giản, dễ hiểu và triển khai
Hiệu quả với dữ liệu có ít features
Ít bị ảnh hưởng bởi overfitting khi so sánh với các thuật toán phức tạp
Cung cấp xác suất thay vì chỉ là nhãn phân loại
Nhược điểm:
Giả định mối quan hệ tuyến tính giữa các features và log-odds
Không hiệu quả với dữ liệu phi tuyến tính phức tạp
Yêu cầu xử lý đặc biệt đối với dữ liệu không cân bằng
Khó khăn trong việc xử lý mối quan hệ phi tuyến tính giữa các features
So sánh Linear Regression và Logistic Regression
Loại bài toán
Regression (dự đoán giá trị liên tục)
Classification (phân loại)
Biến đầu ra
Liên tục
Rời rạc (thường là nhị phân)
Hàm dự đoán
$y = w^Tx + b$
$P(y=1|x) = \sigma(w^Tx + b)$
Hàm mất mát
Mean Squared Error
Cross-Entropy
Phạm vi giá trị dự đoán
$(-\infty, +\infty)$
$[0, 1]$
Đường biên quyết định
Không áp dụng
Tuyến tính
Triển khai thực tế với Python
Linear Regression với Scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# Tạo dữ liệu mẫu
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# Chia dữ liệu thành tập huấn luyện và tập kiểm tra
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Huấn luyện mô hình
model = LinearRegression()
model.fit(X_train, y_train)
# Dự đoán
y_pred = model.predict(X_test)
# Đánh giá mô hình
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Hệ số chặn (intercept): {model.intercept_}")
print(f"Hệ số góc (coefficient): {model.coef_}")
print(f"MSE: {mse}")
print(f"R²: {r2}")
# Visualize kết quả
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red', linewidth=2)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.show()Logistic Regression với Scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.datasets import make_classification
# Tạo dữ liệu mẫu
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0,
n_informative=2, random_state=1, n_clusters_per_class=1)
# Chia dữ liệu thành tập huấn luyện và tập kiểm tra
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Huấn luyện mô hình
model = LogisticRegression(random_state=42, max_iter=1000)
model.fit(X_train, y_train)
# Dự đoán
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)[:, 1]
# Đánh giá mô hình
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)
print(f"Accuracy: {accuracy}")
print(f"Confusion Matrix:\n{conf_matrix}")
print(f"Classification Report:\n{report}")
# Visualize kết quả
plt.figure(figsize=(10, 6))
# Vẽ boundary decision
xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 100),
np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 100))
Z = model.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.3, cmap='RdBu')
plt.scatter(X_test[y_test==0, 0], X_test[y_test==0, 1], c='blue', label='Class 0')
plt.scatter(X_test[y_test==1, 0], X_test[y_test==1, 1], c='red', label='Class 1')
plt.title('Logistic Regression Decision Boundary')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()Kết luận
Linear Regression và Logistic Regression là hai thuật toán cơ bản nhưng vô cùng quan trọng trong Machine Learning. Mặc dù đơn giản, chúng vẫn được sử dụng rộng rãi trong nhiều ứng dụng thực tế. Hiểu rõ cách thức hoạt động của hai thuật toán này sẽ giúp bạn xây dựng nền tảng vững chắc để tiến xa hơn trong hành trình khám phá Machine Learning.
Trong các bài viết tiếp theo, chúng ta sẽ khám phá các thuật toán phức tạp hơn như Decision Trees, Random Forests, và Neural Networks. Hãy theo dõi blog của chúng tôi để không bỏ lỡ những kiến thức hữu ích!
Last updated