Đôi khi trong tập dữ liệu, chúng ta gặp các cột chứa các số không có thứ tự ưu tiên cụ thể. Dữ liệu trong cột thường biểu thị một danh mục hoặc giá trị của danh mục và cả khi dữ liệu trong cột được mã hóa nhãn. Điều này gây nhầm lẫn cho mô hình ML, để tránh điều này, dữ liệu trong cột phải được mã hóa One Hot.

1. Một mã hóa nóng(One Hot)

Nó đề cập đến việc chia nhỏ cột chứa dữ liệu phân loại số thành nhiều cột tùy thuộc vào số lượng danh mục có trong cột đó. Mỗi cột chứa “0” hoặc “1” tương ứng với cột mà nó đã được đặt.

Ví dụ :

Xem xét dữ liệu mà trái cây và giá trị phân loại tương ứng của chúng được đưa ra.

FRUITCATEGORICAL VALUE OF FRUITPRICE
apple15
mango210
apple115
orange320

Đầu ra sau một lần mã hóa nóng(One Hot) dữ liệu được đưa ra như sau,

APPLEMANGOORANGEPRICE
1005
01010
10015
00120

2. Dưới đây là Triển khai bằng Python

Ví dụ 1:

Ví dụ sau đây là dữ liệu về khu vực và điểm tín dụng của khách hàng, khu vực là một giá trị phân loại cần được mã hóa nóng.

# Program for demonstration of one hot encoding 
  
# import libraries 
import numpy as np 
import pandas as pd 
  
# import the data required 
data = pd.read_csv(r"../../onehotenc_data.csv") 
print(data) 

Output:

3. Để một mã hóa nóng cột vùng

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

brightness_4
# importing one hot encoder from sklearn 
# There are changes in OneHotEncoder class 
from sklearn.preprocessing import OneHotEncoder 
from sklearn.compose import ColumnTransformer 
   
# creating one hot encoder object with categorical feature 0 
# indicating the first column 
columnTransformer = ColumnTransformer([('encoder', 
                                        OneHotEncoder(), 
                                        [0])], 
                                      remainder='passthrough') 
  
data = np.array(columnTransformer.fit_transform(data), dtype = np.str) 

Output

Kết quả bao gồm 5 cột, một cột cho giá và 4 cột còn lại đại diện cho 4 khu vực.

Ví dụ 2:

Một bộ mã hóa nóng chỉ nhận các giá trị phân loại bằng số, do đó bất kỳ giá trị nào của loại chuỗi phải được mã hóa nhãn trước khi mã hóa một nóng.

Ví dụ dưới đây có dữ liệu về địa lý và giới tính của khách hàng phải được mã hóa nhãn trước.

# importing libraries 
import numpy as np 
import pandas as pds 
  
# After importing the required data 
print(data) 

Output

4. Mã hóa Nhãn dữ liệu

# label encoding the data 
from sklearn.preprocessing import LabelEncoder 
  
le = LabelEncoder() 
  
data['Gender']= le.fit_transform(data['Gender']) 
data['Geography']= le.fit_transform(data['Geography']) 

Output

Một mã hóa nóng các cột giới tính và địa lý

# importing one hot encoder from sklearn 
from sklearn.preprocessing import OneHotEncoder 
  
# creating one hot encoder object by default 
# entire data passed is one hot encoded 
onehotencoder = OneHotEncoder() 
  
data = np.array(columnTransformer.fit_transform(data), dtype = np.str) 

Output

Kết quả bao gồm 5 cột, 2 cột đại diện cho giới tính, nam và nữ, 3 cột còn lại đại diện cho các quốc gia Pháp, Đức và Tây Ban Nha.

Ghi chú :

  • Một bộ mã hóa nóng không chấp nhận mảng 1 chiều hoặc chuỗi gấu trúc, đầu vào phải luôn là 2 Chiều.
  • Dữ liệu được chuyển đến bộ mã hóa không được chứa chuỗi.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!