Tạo dữ liệu phân loại bằng make_classification trong scikit-learn

Hàm make_classification nằm trong module sklearn.datasets của thư viện scikit-learn, được sử dụng để tạo ra các bộ dữ liệu mẫu phục vụ cho bài toán phân loại. Dữ liệu sinh ra là giả lập, phù hợp để kiểm thử mô hình học máy, so sánh hiệu suất giữa các thuật toán hoặc minh họa các khái niệm trong học có giám sát.

Tham số chính

Dưới đây là các tham số quan trọng giúp cấu hình đặc điểm của tập dữ liệu:

  • n_samples: Số lượng mẫu (quan sát) cần tạo.
  • n_features: Tổng số đặc trưng (biến đầu vào).
  • n_informative: Số đặc trưng mang thông tin hữu ích cho việc phân loại.
  • n_redundant: Số đặc trưng dư thừa, được tạo từ các đặc trưng thông tin qua biến đổi tuyến tính.
  • n_repeated: Số đặc trưng bị lặp lại ngẫu nhiên từ các đặc trưng hiện có.
  • n_classes: Số lượng lớp mục tiêu.
  • n_clusters_per_class: Số cụm dữ liệu trên mỗi lớp, ảnh hưởng đến độ phức tạp phân tách.
  • weights: Xác suất xuất hiện của từng lớp, hỗ trợ tạo dữ liệu mất cân bằng.
  • flip_y: Tỷ lệ nhiễu nhãn – xác suất gán sai nhãn cho một mẫu.
  • class_sep: Độ tách biệt giữa các lớp; giá trị lớn hơn nghĩa là các lớp dễ phân biệt hơn.
  • hypercube: Nếu True, các cụm trung tâm được đặt trong một siêu khối.
  • shift: Dịch chuyển toàn bộ dữ liệu theo vector đã định.
  • scale: Hệ số co giãn các đặc trưng.
  • shuffle: Trộn ngẫu nhiên thứ tự các mẫu và đặc trưng.
  • random_state: Hạt giống kiểm soát sinh số ngẫu nhiên, đảm bảo kết quả tái tạo được.

Kết quả trả về

Hàm trả về một bộ gồm hai phần tử:

  • X: Ma trận đặc trưng kích thước (n_samples, n_features).
  • y: Vector nhãn tương ứng với mỗi mẫu, kích thước (n_samples,).

Ví dụ 1: Tạo bộ dữ liệu cơ bản

from sklearn.datasets import make_classification

# Sinh dữ liệu phân loại nhị phân
X, y = make_classification(
    n_samples=800,
    n_features=15,
    n_informative=5,
    n_redundant=2,
    n_repeated=0,
    n_classes=2,
    class_sep=1.2,
    random_state=123
)

print("Kích thước X:", X.shape)
print("Kích thước y:", y.shape)

Đầu ra:

Kích thước X: (800, 15)
Kích thước y: (800,)

Bộ dữ liệu này bao gồm 800 mẫu với 15 đặc trưng, trong đó 5 đặc trưng mang thông tin phân loại, 2 đặc trưng phụ thuộc tuyến tính vào nhóm này, không có đặc trưng lặp, và hai lớp được tách biệt rõ rệt ở mức độ vừa phải.

Ví dụ 2: Trực quan hóa dữ liệu 2D

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

# Tạo dữ liệu 2 chiều để dễ trực quan
X, y = make_classification(
    n_samples=400,
    n_features=2,
    n_informative=2,
    n_redundant=0,
    n_classes=2,
    n_clusters_per_class=1,
    class_sep=1.5,
    flip_y=0.02,
    random_state=45
)

plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='RdYlBu', edgecolor='k', alpha=0.7)
plt.title("Dữ liệu phân loại 2D sinh bởi make_classification")
plt.xlabel("Đặc trưng 1")
plt.ylabel("Đặc trưng 2")
plt.colorbar(label="Nhãn lớp")
plt.grid(True, alpha=0.3)
plt.show()

Biểu đồ hiển thị hai lớp dữ liệu được phân thành các cụm riêng biệt. Sự chồng lấn nhẹ xảy ra do tham số flip_y và mức độ tách biệt được điều chỉnh bằng class_sep.

Thẻ: scikit-learn make_classification Machine Learning data generation classification

Đăng vào ngày 26 tháng 5 lúc 09:42