Dummy variable encoding là gì?
- ★
- ★
- ★
- ★
- ★
One-hot encoding tạo ra một biến nhị phân (binary variable) cho mỗi lớp (category). Vấn đề là biểu diễn này bao gồm sự dư thừa. Ví dụ: nếu chúng ta biết rằng [1, 0, 0] đại diện cho "màu xanh lam" và [0, 1, 0] đại diện cho "màu xanh lá cây", chúng ta không cần một biến nhị phân khác để đại diện cho "màu đỏ", thay vào đó chúng ta có thể sử dụng 0 giá trị cho cả "xanh lam" và "xanh lá cây", ví dụ: [0, 0]. Đây được gọi là dummy variable encoding và luôn đại diện cho C lớp với C-1 các biến nhị phân.
Ngoài việc ít dư thừa hơn một chút, one-hot encoding được yêu cầu bởi một số mô hình (model). Ví dụ: trong trường hợp mô hình hồi quy tuyến tính (linear regression), one hot encoding sẽ khiến ma trận (matrix) dữ liệu đầu vào trở thành ma trận đơn (singular matrix), có nghĩa là nó không thể có nghịch đảo và các hệ số (coefficient) của hồi quy tuyến tính không thể là được tính toán bằng cách sử dụng đại số tuyến tính. Đối với những loại mô hình này, phải sử dụng dummy variable encoding để thay thế.
Chúng ta có thể sử dụng lớp (class) OneHotEncoder để triển khai (implement) dummy variable encoding cũng như one hot encoding.
Đối số (argument) "drop" có thể được đặt để cho biết lớp nào sẽ được gán tất cả các giá trị 0, được gọi là "đường cơ sở" (baseline). Chúng ta có thể đặt giá trị này thành "first" để lớp đầu tiên được sử dụng. Khi các nhãn (label) được sắp xếp theo thứ tự bảng chữ cái, nhãn "blue" đầu tiên sẽ là nhãn đầu tiên và sẽ trở thành đường cơ sở.
Chúng ta có thể chứng minh điều này với các lớp màu sắc. Ví dụ đầy đủ được liệt kê dưới đây.
from numpy import asarray
from sklearn.preprocessing import OneHotEncoder
# define data
data = asarray([['red'], ['green'], ['blue']])
print(data)
# define one hot encoding
encoder = OneHotEncoder(drop='first', sparse=False)
# transform data
onehot = encoder.fit_transform(data)
print(onehot)
Chạy ví dụ trước tiên sẽ liệt kê ba hàng cho biến phân loại (categorical variable), sau đó dummy variable encoding, cho thấy rằng "green" được "mã hóa" (encode) là [1, 0], "red" được mã hóa là [0, 1] và "blue" được mã hóa là [0, 0] như chúng ta đã chỉ định.
Output:
[['red'] ['green'] ['blue']] [[0. 1.] [1. 0.] [0. 0.]]
Learning English Everyday