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

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng