Train-test split là gì?
- ★
- ★
- ★
- ★
- ★
Train-test split là một kỹ thuật để đánh giá hiệu suất (performance) của một thuật toán học máy (machine learning algorithm).Nó có thể được sử dụng cho các bài toán phân loại (classification) hoặc hồi quy (regression) và có thể được sử dụng cho bất kỳ thuật toán học có giám sát nào (supervised learning algorithm).
Train-test split liên quan đến việc lấy một tập dữ liệu (dataset) và chia nó thành hai tập con (subset). Tập con đầu tiên được sử dụng để huấn luyện (train) mô hình (model) và được gọi là tập dữ liệu huấn luyện (training dataset). Tập con thứ hai không được sử dụng để huấn luyện mô hình, thay vào đó nó được cung cấp cho mô hình, sau đó các dự đoán (prediction) được thực hiện và so sánh với các giá trị mong đợi (expected value). Tập dữ liệu thứ hai này được gọi là tập dữ liệu thử nghiệm (test dataset).
- Tập dữ liệu huấn luyện: Được sử dụng để huấn luyện mô hình học máy.
- Tập dữ liệu thử nghiệm: Được sử dụng để đánh giá mô hình học máy phù hợp.
Mục tiêu là ước tính hiệu suất của mô hình học máy trên dữ liệu mới tức là dữ liệu không được sử dụng để huấn luyện mô hình.
Thư viện học máy (machine learning library) scikit-learning cung cấp hàm train_test_split() để thực hiện train-test split. Hàm này lấy một tập dữ liệu đã tải làm đầu vào và trả về tập dữ liệu được tách thành hai tập con.
...
# split into train test sets
train, test = train_test_split(dataset, ...)
Lý tưởng nhất là bạn có thể chia tập dữ liệu ban đầu của mình thành các cột đầu vào (X) và đầu ra (y), sau đó gọi hàm và truyền cả hai mảng (array) và chia chúng một cách thích hợp thành các tập con huấn luyện và thử nghiệm.
...
# split into train test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, ...)
Kích thước của phân tách (split) có thể được chỉ định thông qua đối số (argument) "test_size" lấy một số hàng (integer) hoặc một tỷ lệ phần trăm (float) của kích thước tập dữ liệu từ 0 đến 1. Tỷ lệ phần trăm là phổ biến nhất với các giá trị được sử dụng chẳng hạn như 0,33 trong đó 33 phần trăm tập dữ liệu sẽ được phân bổ cho tập thử nghiệm và 67 phần trăm sẽ được phân bổ cho tập huấn luyện.
...
# split into train test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Chúng ta có thể minh họa điều này bằng cách sử dụng tập dữ liệu phân loại tổng hợp (synthetic dataset) với 1.000 mẫu dữ liệu (example). Code ví dụ đầy đủ được liệt kê dưới đây.
# split a dataset into train and test sets
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
# create dataset
X, y = make_blobs(n_samples=1000)
# split into train test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
Việc chạy code trên sẽ chia tập dữ liệu thành các tập huấn luyện và thử nghiệm, sau đó in ra kích thước của tập dữ liệu mới.
Chúng ta có thể thấy rằng 670 mẫu dữ liệu (67 phần trăm) đã được phân bổ cho tập huấn luyện và 330 mẫu dữ liệu (33 phần trăm) đã được phân bổ cho tập thử nghiệm, như chúng ta đã chỉ định.
(670, 2) (330, 2) (670,) (330,)
Learning English Everyday