Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Hồi quy tuyến tính và hồi quy Logistic trong Python
Trong bài viết này, mình sẽ tái cấu trúc (refactor) mã nguồn từ hai bài trước để triển khai Hồi Quy Tuyến Tính (Linear Regression) và Hồi Quy Logistic (Logistic Regression) chỉ trong 60 dòng mã Python! Điều này được thực hiện bằng cách xây dựng lớp cơ sở BaseRegression, giúp tái sử dụng và tổ chức mã hiệu quả hơn.
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Mục tiêu tái cấu trúc
- Loại bỏ phần mã trùng lặp trong hai thuật toán.
- Sử dụng lớp cơ sở (
BaseRegression
) làm nền tảng để kế thừa. - Dễ dàng mở rộng hoặc sửa đổi các thuật toán khác dựa trên
BaseRegression
.
Triển khai chi tiết Linear Regression và Logistic Regression trong Python
Lớp cơ sở: BaseRegression
Lớp BaseRegression
chứa các thành phần dùng chung như:
- Các tham số: .
- Cơ chế huấn luyện (
fit
) sử dụng Gradient Descent. - Hàm dự đoán (
predict
), có thể tùy chỉnh cho từng lớp con.
import numpy as np class BaseRegression: def __init__(self, learning_rate=0.001, n_iters=1000): """ Khởi tạo lớp cơ sở với tốc độ học và số lần lặp. """ self.lr = learning_rate self.n_iters = n_iters self.weights = None self.bias = None def fit(self, X, y): """ Huấn luyện mô hình bằng Gradient Descent. """ n_samples, n_features = X.shape # Khởi tạo trọng số và bias self.weights = np.zeros(n_features) self.bias = 0 # Lặp Gradient Descent for _ in range(self.n_iters): y_predicted = self._approximation(X, self.weights, self.bias) # Tính gradient dw = (1 / n_samples) * np.dot(X.T, (y_predicted - y)) db = (1 / n_samples) * np.sum(y_predicted - y) # Cập nhật trọng số và bias self.weights -= self.lr * dw self.bias -= self.lr * db def predict(self, X): """ Hàm dự đoán, được triển khai trong từng lớp con. """ return self._predict(X, self.weights, self.bias) # Các phương thức trừu tượng cần triển khai def _predict(self, X, w, b): raise NotImplementedError("Hàm dự đoán cần được triển khai trong lớp con.") def _approximation(self, X, w, b): raise NotImplementedError("Hàm xấp xỉ cần được triển khai trong lớp con.")