Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Bắt đầu tìm hiểu Perceptron bằng Python
Trong bài viết này, mình sẽ triển khai thuật toán Perceptron một tầng (single-layer) chỉ sử dụng các module tích hợp của Python và thư viện numpy. Đồng thời, mình sẽ cùng tìm hiểu khái niệm và toán học phía sau thuật toán này.
Perceptron là gì?
Perceptron là một mô hình học máy tuyến tính dùng để phân loại dữ liệu nhị phân. Nó được đề xuất bởi Frank Rosenblatt vào năm 1958. Đây là một trong những thuật toán nền tảng đặt nền móng cho các mô hình học máy hiện đại.
Cấu trúc của Perceptron:
Input Layer: Các đầu vào kèm trọng số .
Linear Combination: Tính (bias).
Bài viết này được đăng tại [free tuts .net]
Activation Function: Áp dụng hàm kích hoạt để quyết định đầu ra. Trong Perceptron đơn giản, hàm kích hoạt là hàm bước:
Công thức toán học
Học thông qua cập nhật trọng số (Perceptron Update Rule):
Trong đó:
- : Trọng số hiện tại.
- : Giá trị bias.
- : Nhãn thực tế (target).
- : Dự đoán từ mô hình.
- : Tốc độ học (learning rate).
- Dự đoán:
Với .
Triển khai Perceptron trong Python
Định nghĩa lớp Perceptron
import numpy as np class Perceptron: def __init__(self, learning_rate=0.01, n_iters=1000): """ Khởi tạo Perceptron. Args: learning_rate (float): Tốc độ học (η). n_iters (int): Số lần lặp để huấn luyện. """ self.lr = learning_rate self.n_iters = n_iters self.activation_func = self._unit_step_func # Hàm kích hoạt self.weights = None self.bias = None
Huấn luyện mô hình
Trong hàm fit
, chúng ta:
- Khởi tạo trọng số và bias bằng 0.
- Thực hiện cập nhật trọng số với Quy tắc Cập nhật Perceptron.
def fit(self, X, y): """ Huấn luyện Perceptron dựa trên dữ liệu X và y. Args: X (ndarray): Dữ liệu đầu vào (n_samples, n_features). y (ndarray): Nhãn thực tế (n_samples). """ n_samples, n_features = X.shape self.weights = np.zeros(n_features) # Khởi tạo trọng số bằng 0 self.bias = 0 # Đảm bảo y chỉ gồm giá trị {0, 1} y_ = np.array([1 if i > 0 else 0 for i in y]) for _ in range(self.n_iters: # Lặp qua số lần huấn luyện for idx, x_i in enumerate(X): linear_output = np.dot(x_i, self.weights) + self.bias # z = w·x + b y_predicted = self.activation_func(linear_output) # Hàm kích hoạt # Cập nhật trọng số theo quy tắc cập nhật Perceptron update = self.lr * (y_[idx] - y_predicted) self.weights += update * x_i self.bias += update