Ordinal encoding là gì?

Noun AI
integer encoding label encoding

Trong học máy (machine learning), ordinal encoding là một loại của encoding trong đó mỗi giá trị lớp (category) duy nhất được gán một giá trị số nguyên. Ví dụ: "đỏ" là 1, "xanh lá cây" là 2 và "xanh lam" là 3.

Thông thường, các giá trị số nguyên bắt đầu từ 0 được sử dụng. Đối với một số biến (variable), ordinal encoding có thể là đủ. Các giá trị số nguyên có mối quan hệ có thứ tự tự nhiên giữa nhau và các thuật toán học máy (machine learning algorithm) có thể hiểu và khai thác mối quan hệ này.

Đối với các biến phân loại (categorical variable), nó áp đặt một mối quan hệ thứ tự mà không có mối quan hệ như vậy có thể tồn tại. Điều này có thể gây ra vấn đề và one-hot encoding có thể được sử dụng thay thế.

Ordinal encodingcó sẵn trong thư viện học máy (machine learning library) scikit-learning thông qua lớp (class) OrdinalEncoder. Theo mặc định, nó sẽ gán các số nguyên cho các nhãn (label) theo thứ tự được quan sát trong dữ liệu. Nếu một thứ tự cụ thể được mong muốn, nó có thể được chỉ định thông qua đối số (argument) "categories" dưới dạng danh sách (list) với thứ tự xếp hạng của tất cả các nhãn được mong đợi.

Chúng ta có thể chứng minh việc sử dụng lớp này bằng cách chuyển đổi các lớp màu "đỏ", "xanh lá cây" và "xanh lam" thành các số nguyên. Đầu tiên các lớp được sắp xếp sau đó áp dụng số. Đối với chuỗi (string), điều này có nghĩa là các nhãn được sắp xếp theo thứ tự bảng chữ cái và màu xanh lam = 0, xanh lá cây = 1 và đỏ = 2.

Ví dụ đầy đủ được liệt kê dưới đây.


# example of a ordinal encoding
from numpy import asarray
from sklearn.preprocessing import OrdinalEncoder
# define data
data = asarray([['red'], ['green'], ['blue']])
print(data)
# define ordinal encoding
encoder = OrdinalEncoder()
# transform data
result = encoder.fit_transform(data)
print(result)

Việc chạy ví dụ trước tiên sẽ báo cáo 3 (row) hàng dữ liệu, sau đó là ordinal encoding. Chúng ta có thể thấy rằng các con số được gán cho các nhãn như chúng ta mong đợi.

Output:


[['red']
 ['green']
 ['blue']]
[[2.]
 [1.]
 [0.]]

Lớp OrdinalEncoder này dành cho các biến đầu vào được tổ chức thành các hàng và cột (column), ví dụ: một ma trận (matrix). Nếu một biến mục tiêu phân loại (categorical target variable) cần được mã hóa (encode) cho bài toán mô hình dự đoán phân loại, thì lớp LabelEncoder có thể được sử dụng. Nó làm điều tương tự như OrdinalEncoder, mặc dù nó mong đợi một đầu vào một chiều (one-dimensional input) cho biến mục tiêu duy nhất (target variable).

Learning English Everyday