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 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:

  1. Dự đoán giá nhà: Dựa vào các đặc điểm như diện tích, vị trí, số phòng...

  2. Phân tích tài chính: Dự đoán xu hướng giá cổ phiếu, đánh giá rủi ro...

  3. 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ị...

  4. 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:

  1. 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

  2. Tài chính: Đánh giá rủi ro tín dụng, phát hiện gian lận...

  3. Marketing: Dự đoán liệu khách hàng có mua sản phẩm hay không

  4. 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

Tiêu chí
Linear Regression
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